diff --git a/BUILD b/BUILD index 8ad99466c45efb85d2371bb16536cf9711cbf5bc..afac470d5b67fc08f39c28f10263f6daf35bf5db 100644 --- a/BUILD +++ b/BUILD @@ -179,6 +179,7 @@ cc_library( "src/core/lib/iomgr/endpoint.h", "src/core/lib/iomgr/endpoint_pair.h", "src/core/lib/iomgr/ev_poll_and_epoll_posix.h", + "src/core/lib/iomgr/ev_poll_posix.h", "src/core/lib/iomgr/ev_posix.h", "src/core/lib/iomgr/exec_ctx.h", "src/core/lib/iomgr/executor.h", @@ -285,8 +286,9 @@ cc_library( "src/core/ext/client_config/subchannel_call_holder.h", "src/core/ext/client_config/subchannel_index.h", "src/core/ext/client_config/uri_parser.h", + "third_party/objective_c/Cronet/cronet_c_for_grpc.h", "src/core/ext/lb_policy/grpclb/load_balancer_api.h", - "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.h", + "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h", "src/core/ext/load_reporting/load_reporting.h", "src/core/ext/load_reporting/load_reporting_filter.h", "src/core/ext/census/aggregation.h", @@ -314,6 +316,7 @@ cc_library( "src/core/lib/iomgr/endpoint_pair_posix.c", "src/core/lib/iomgr/endpoint_pair_windows.c", "src/core/lib/iomgr/ev_poll_and_epoll_posix.c", + "src/core/lib/iomgr/ev_poll_posix.c", "src/core/lib/iomgr/ev_posix.c", "src/core/lib/iomgr/exec_ctx.c", "src/core/lib/iomgr/executor.c", @@ -441,8 +444,11 @@ cc_library( "src/core/ext/client_config/uri_parser.c", "src/core/ext/transport/chttp2/server/insecure/server_chttp2.c", "src/core/ext/transport/chttp2/client/insecure/channel_create.c", + "src/core/ext/transport/cronet/client/secure/cronet_channel_create.c", + "src/core/ext/transport/cronet/transport/cronet_api_dummy.c", + "src/core/ext/transport/cronet/transport/cronet_transport.c", "src/core/ext/lb_policy/grpclb/load_balancer_api.c", - "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c", + "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c", "src/core/ext/lb_policy/pick_first/pick_first.c", "src/core/ext/lb_policy/round_robin/round_robin.c", "src/core/ext/resolver/dns/native/dns_resolver.c", @@ -467,6 +473,7 @@ cc_library( "include/grpc/grpc.h", "include/grpc/status.h", "include/grpc/impl/codegen/byte_buffer.h", + "include/grpc/impl/codegen/byte_buffer_reader.h", "include/grpc/impl/codegen/compression_types.h", "include/grpc/impl/codegen/connectivity_state.h", "include/grpc/impl/codegen/grpc_types.h", @@ -486,6 +493,7 @@ cc_library( "include/grpc/impl/codegen/sync_posix.h", "include/grpc/impl/codegen/sync_win32.h", "include/grpc/impl/codegen/time.h", + "include/grpc/grpc_cronet.h", "include/grpc/grpc_security.h", "include/grpc/grpc_security_constants.h", "include/grpc/census.h", @@ -528,6 +536,7 @@ cc_library( "src/core/lib/iomgr/endpoint.h", "src/core/lib/iomgr/endpoint_pair.h", "src/core/lib/iomgr/ev_poll_and_epoll_posix.h", + "src/core/lib/iomgr/ev_poll_posix.h", "src/core/lib/iomgr/ev_posix.h", "src/core/lib/iomgr/exec_ctx.h", "src/core/lib/iomgr/executor.h", @@ -623,7 +632,7 @@ cc_library( "src/core/ext/load_reporting/load_reporting.h", "src/core/ext/load_reporting/load_reporting_filter.h", "src/core/ext/lb_policy/grpclb/load_balancer_api.h", - "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.h", + "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h", "src/core/ext/census/aggregation.h", "src/core/ext/census/census_interface.h", "src/core/ext/census/census_rpc_stats.h", @@ -650,6 +659,7 @@ cc_library( "src/core/lib/iomgr/endpoint_pair_posix.c", "src/core/lib/iomgr/endpoint_pair_windows.c", "src/core/lib/iomgr/ev_poll_and_epoll_posix.c", + "src/core/lib/iomgr/ev_poll_posix.c", "src/core/lib/iomgr/ev_posix.c", "src/core/lib/iomgr/exec_ctx.c", "src/core/lib/iomgr/executor.c", @@ -761,7 +771,7 @@ cc_library( "src/core/ext/load_reporting/load_reporting.c", "src/core/ext/load_reporting/load_reporting_filter.c", "src/core/ext/lb_policy/grpclb/load_balancer_api.c", - "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c", + "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c", "src/core/ext/lb_policy/pick_first/pick_first.c", "src/core/ext/lb_policy/round_robin/round_robin.c", "src/core/ext/census/context.c", @@ -782,6 +792,7 @@ cc_library( "include/grpc/grpc.h", "include/grpc/status.h", "include/grpc/impl/codegen/byte_buffer.h", + "include/grpc/impl/codegen/byte_buffer_reader.h", "include/grpc/impl/codegen/compression_types.h", "include/grpc/impl/codegen/connectivity_state.h", "include/grpc/impl/codegen/grpc_types.h", @@ -898,6 +909,8 @@ cc_library( "include/grpc++/impl/rpc_service_method.h", "include/grpc++/impl/serialization_traits.h", "include/grpc++/impl/server_builder_option.h", + "include/grpc++/impl/server_builder_plugin.h", + "include/grpc++/impl/server_initializer.h", "include/grpc++/impl/service_type.h", "include/grpc++/impl/sync.h", "include/grpc++/impl/sync_cxx11.h", @@ -954,6 +967,7 @@ cc_library( "include/grpc++/impl/codegen/sync_stream.h", "include/grpc++/impl/codegen/time.h", "include/grpc/impl/codegen/byte_buffer.h", + "include/grpc/impl/codegen/byte_buffer_reader.h", "include/grpc/impl/codegen/compression_types.h", "include/grpc/impl/codegen/connectivity_state.h", "include/grpc/impl/codegen/grpc_types.h", @@ -1043,6 +1057,8 @@ cc_library( "include/grpc++/impl/rpc_service_method.h", "include/grpc++/impl/serialization_traits.h", "include/grpc++/impl/server_builder_option.h", + "include/grpc++/impl/server_builder_plugin.h", + "include/grpc++/impl/server_initializer.h", "include/grpc++/impl/service_type.h", "include/grpc++/impl/sync.h", "include/grpc++/impl/sync_cxx11.h", @@ -1099,6 +1115,7 @@ cc_library( "include/grpc++/impl/codegen/sync_stream.h", "include/grpc++/impl/codegen/time.h", "include/grpc/impl/codegen/byte_buffer.h", + "include/grpc/impl/codegen/byte_buffer_reader.h", "include/grpc/impl/codegen/compression_types.h", "include/grpc/impl/codegen/connectivity_state.h", "include/grpc/impl/codegen/grpc_types.h", @@ -1337,6 +1354,7 @@ objc_library( "src/core/lib/iomgr/endpoint_pair_posix.c", "src/core/lib/iomgr/endpoint_pair_windows.c", "src/core/lib/iomgr/ev_poll_and_epoll_posix.c", + "src/core/lib/iomgr/ev_poll_posix.c", "src/core/lib/iomgr/ev_posix.c", "src/core/lib/iomgr/exec_ctx.c", "src/core/lib/iomgr/executor.c", @@ -1464,8 +1482,11 @@ objc_library( "src/core/ext/client_config/uri_parser.c", "src/core/ext/transport/chttp2/server/insecure/server_chttp2.c", "src/core/ext/transport/chttp2/client/insecure/channel_create.c", + "src/core/ext/transport/cronet/client/secure/cronet_channel_create.c", + "src/core/ext/transport/cronet/transport/cronet_api_dummy.c", + "src/core/ext/transport/cronet/transport/cronet_transport.c", "src/core/ext/lb_policy/grpclb/load_balancer_api.c", - "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c", + "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c", "src/core/ext/lb_policy/pick_first/pick_first.c", "src/core/ext/lb_policy/round_robin/round_robin.c", "src/core/ext/resolver/dns/native/dns_resolver.c", @@ -1490,6 +1511,7 @@ objc_library( "include/grpc/grpc.h", "include/grpc/status.h", "include/grpc/impl/codegen/byte_buffer.h", + "include/grpc/impl/codegen/byte_buffer_reader.h", "include/grpc/impl/codegen/compression_types.h", "include/grpc/impl/codegen/connectivity_state.h", "include/grpc/impl/codegen/grpc_types.h", @@ -1509,6 +1531,7 @@ objc_library( "include/grpc/impl/codegen/sync_posix.h", "include/grpc/impl/codegen/sync_win32.h", "include/grpc/impl/codegen/time.h", + "include/grpc/grpc_cronet.h", "include/grpc/grpc_security.h", "include/grpc/grpc_security_constants.h", "include/grpc/census.h", @@ -1530,6 +1553,7 @@ objc_library( "src/core/lib/iomgr/endpoint.h", "src/core/lib/iomgr/endpoint_pair.h", "src/core/lib/iomgr/ev_poll_and_epoll_posix.h", + "src/core/lib/iomgr/ev_poll_posix.h", "src/core/lib/iomgr/ev_posix.h", "src/core/lib/iomgr/exec_ctx.h", "src/core/lib/iomgr/executor.h", @@ -1636,8 +1660,9 @@ objc_library( "src/core/ext/client_config/subchannel_call_holder.h", "src/core/ext/client_config/subchannel_index.h", "src/core/ext/client_config/uri_parser.h", + "third_party/objective_c/Cronet/cronet_c_for_grpc.h", "src/core/ext/lb_policy/grpclb/load_balancer_api.h", - "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.h", + "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h", "src/core/ext/load_reporting/load_reporting.h", "src/core/ext/load_reporting/load_reporting_filter.h", "src/core/ext/census/aggregation.h", diff --git a/Makefile b/Makefile index 41b983e613dbd044842020c655669aad4e1c1b05..d046fec21e82e0e4b449dc0d22a607fb80728f76 100644 --- a/Makefile +++ b/Makefile @@ -187,8 +187,8 @@ CC_ubsan = clang CXX_ubsan = clang++ LD_ubsan = clang LDXX_ubsan = clang++ -CPPFLAGS_ubsan = -O1 -fsanitize-coverage=edge -fsanitize=undefined -fno-omit-frame-pointer -Wno-unused-command-line-argument -LDFLAGS_ubsan = -fsanitize=undefined +CPPFLAGS_ubsan = -O0 -fsanitize-coverage=edge -fsanitize=undefined,unsigned-integer-overflow -fno-omit-frame-pointer -Wno-unused-command-line-argument -Wvarargs +LDFLAGS_ubsan = -fsanitize=undefined,unsigned-integer-overflow DEFINES_ubsan = NDEBUG DEFINES_ubsan += GRPC_TEST_SLOWDOWN_BUILD_FACTOR=1.5 @@ -319,12 +319,19 @@ CHECK_SHADOW_WORKS_CMD = $(CC) -std=c99 -Werror -Wshadow -o $(TMPOUT) -c test/bu HAS_WORKING_SHADOW = $(shell $(CHECK_SHADOW_WORKS_CMD) 2> /dev/null && echo true || echo false) ifeq ($(HAS_WORKING_SHADOW),true) W_SHADOW=-Wshadow +NO_W_SHADOW=-Wno-shadow endif - -CHECK_NO_SHIFT_NEGATIVE_VALUE_CMD = $(CC) -std=c99 -Werror -Wno-shift-negative-value -o $(TMPOUT) -c test/build/empty.c -HAS_NO_SHIFT_NEGATIVE_VALUE = $(shell $(CHECK_NO_SHIFT_NEGATIVE_VALUE_CMD) 2> /dev/null && echo true || echo false) -ifeq ($(HAS_NO_SHIFT_NEGATIVE_VALUE),true) +CHECK_EXTRA_SEMI_WORKS_CMD = $(CC) -std=c99 -Werror -Wextra-semi -o $(TMPOUT) -c test/build/extra-semi.c +HAS_WORKING_EXTRA_SEMI = $(shell $(CHECK_EXTRA_SEMI_WORKS_CMD) 2> /dev/null && echo true || echo false) +ifeq ($(HAS_WORKING_EXTRA_SEMI),true) +W_EXTRA_SEMI=-Wextra-semi +NO_W_EXTRA_SEMI=-Wno-extra-semi +endif +CHECK_NO_SHIFT_NEGATIVE_VALUE_WORKS_CMD = $(CC) -std=c99 -Werror -Wno-shift-negative-value -o $(TMPOUT) -c test/build/no-shift-negative-value.c +HAS_WORKING_NO_SHIFT_NEGATIVE_VALUE = $(shell $(CHECK_NO_SHIFT_NEGATIVE_VALUE_WORKS_CMD) 2> /dev/null && echo true || echo false) +ifeq ($(HAS_WORKING_NO_SHIFT_NEGATIVE_VALUE),true) W_NO_SHIFT_NEGATIVE_VALUE=-Wno-shift-negative-value +NO_W_NO_SHIFT_NEGATIVE_VALUE=-Wshift-negative-value endif # The HOST compiler settings are used to compile the protoc plugins. @@ -341,7 +348,7 @@ ifdef EXTRA_DEFINES DEFINES += $(EXTRA_DEFINES) endif -CFLAGS += -std=c99 -Wsign-conversion -Wconversion $(W_SHADOW) +CFLAGS += -std=c99 -Wsign-conversion -Wconversion $(W_SHADOW) $(W_EXTRA_SEMI) ifeq ($(HAS_CXX11),true) CXXFLAGS += -std=c++11 else @@ -407,7 +414,7 @@ E = @echo Q = @ endif -VERSION = 0.14.0-dev +VERSION = 0.15.0-dev CPPFLAGS_NO_ARCH += $(addprefix -I, $(INCLUDES)) $(addprefix -D, $(DEFINES)) CPPFLAGS += $(CPPFLAGS_NO_ARCH) $(ARCH_FLAGS) @@ -472,7 +479,7 @@ endif OPENSSL_ALPN_CHECK_CMD = $(CC) $(CPPFLAGS) $(CFLAGS) -o $(TMPOUT) test/build/openssl-alpn.c $(addprefix -l, $(OPENSSL_LIBS)) $(LDFLAGS) OPENSSL_NPN_CHECK_CMD = $(CC) $(CPPFLAGS) $(CFLAGS) -o $(TMPOUT) test/build/openssl-npn.c $(addprefix -l, $(OPENSSL_LIBS)) $(LDFLAGS) -BORINGSSL_COMPILE_CHECK_CMD = $(CC) $(CPPFLAGS) -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare -o $(TMPOUT) test/build/boringssl.c $(LDFLAGS) +BORINGSSL_COMPILE_CHECK_CMD = $(CC) $(CPPFLAGS) -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) -o $(TMPOUT) test/build/boringssl.c $(LDFLAGS) ZLIB_CHECK_CMD = $(CC) $(CPPFLAGS) $(CFLAGS) -o $(TMPOUT) test/build/zlib.c -lz $(LDFLAGS) PROTOBUF_CHECK_CMD = $(CXX) $(CPPFLAGS) $(CXXFLAGS) -o $(TMPOUT) test/build/protobuf.cc -lprotobuf $(LDFLAGS) @@ -1035,6 +1042,7 @@ reconnect_interop_client: $(BINDIR)/$(CONFIG)/reconnect_interop_client reconnect_interop_server: $(BINDIR)/$(CONFIG)/reconnect_interop_server secure_auth_context_test: $(BINDIR)/$(CONFIG)/secure_auth_context_test secure_sync_unary_ping_pong_test: $(BINDIR)/$(CONFIG)/secure_sync_unary_ping_pong_test +server_builder_plugin_test: $(BINDIR)/$(CONFIG)/server_builder_plugin_test server_crash_test: $(BINDIR)/$(CONFIG)/server_crash_test server_crash_test_client: $(BINDIR)/$(CONFIG)/server_crash_test_client shutdown_test: $(BINDIR)/$(CONFIG)/shutdown_test @@ -1089,6 +1097,7 @@ connection_prefix_bad_client_test: $(BINDIR)/$(CONFIG)/connection_prefix_bad_cli head_of_line_blocking_bad_client_test: $(BINDIR)/$(CONFIG)/head_of_line_blocking_bad_client_test headers_bad_client_test: $(BINDIR)/$(CONFIG)/headers_bad_client_test initial_settings_frame_bad_client_test: $(BINDIR)/$(CONFIG)/initial_settings_frame_bad_client_test +large_metadata_bad_client_test: $(BINDIR)/$(CONFIG)/large_metadata_bad_client_test server_registered_method_bad_client_test: $(BINDIR)/$(CONFIG)/server_registered_method_bad_client_test simple_request_bad_client_test: $(BINDIR)/$(CONFIG)/simple_request_bad_client_test unknown_frame_bad_client_test: $(BINDIR)/$(CONFIG)/unknown_frame_bad_client_test @@ -1320,6 +1329,7 @@ buildtests_c: privatelibs_c \ $(BINDIR)/$(CONFIG)/head_of_line_blocking_bad_client_test \ $(BINDIR)/$(CONFIG)/headers_bad_client_test \ $(BINDIR)/$(CONFIG)/initial_settings_frame_bad_client_test \ + $(BINDIR)/$(CONFIG)/large_metadata_bad_client_test \ $(BINDIR)/$(CONFIG)/server_registered_method_bad_client_test \ $(BINDIR)/$(CONFIG)/simple_request_bad_client_test \ $(BINDIR)/$(CONFIG)/unknown_frame_bad_client_test \ @@ -1405,6 +1415,7 @@ buildtests_cxx: buildtests_zookeeper privatelibs_cxx \ $(BINDIR)/$(CONFIG)/reconnect_interop_server \ $(BINDIR)/$(CONFIG)/secure_auth_context_test \ $(BINDIR)/$(CONFIG)/secure_sync_unary_ping_pong_test \ + $(BINDIR)/$(CONFIG)/server_builder_plugin_test \ $(BINDIR)/$(CONFIG)/server_crash_test \ $(BINDIR)/$(CONFIG)/server_crash_test_client \ $(BINDIR)/$(CONFIG)/shutdown_test \ @@ -1660,6 +1671,8 @@ test_c: buildtests_c $(Q) $(BINDIR)/$(CONFIG)/headers_bad_client_test || ( echo test headers_bad_client_test failed ; exit 1 ) $(E) "[RUN] Testing initial_settings_frame_bad_client_test" $(Q) $(BINDIR)/$(CONFIG)/initial_settings_frame_bad_client_test || ( echo test initial_settings_frame_bad_client_test failed ; exit 1 ) + $(E) "[RUN] Testing large_metadata_bad_client_test" + $(Q) $(BINDIR)/$(CONFIG)/large_metadata_bad_client_test || ( echo test large_metadata_bad_client_test failed ; exit 1 ) $(E) "[RUN] Testing server_registered_method_bad_client_test" $(Q) $(BINDIR)/$(CONFIG)/server_registered_method_bad_client_test || ( echo test server_registered_method_bad_client_test failed ; exit 1 ) $(E) "[RUN] Testing simple_request_bad_client_test" @@ -1736,6 +1749,8 @@ test_cxx: test_zookeeper buildtests_cxx $(Q) $(BINDIR)/$(CONFIG)/secure_auth_context_test || ( echo test secure_auth_context_test failed ; exit 1 ) $(E) "[RUN] Testing secure_sync_unary_ping_pong_test" $(Q) $(BINDIR)/$(CONFIG)/secure_sync_unary_ping_pong_test || ( echo test secure_sync_unary_ping_pong_test failed ; exit 1 ) + $(E) "[RUN] Testing server_builder_plugin_test" + $(Q) $(BINDIR)/$(CONFIG)/server_builder_plugin_test || ( echo test server_builder_plugin_test failed ; exit 1 ) $(E) "[RUN] Testing server_crash_test" $(Q) $(BINDIR)/$(CONFIG)/server_crash_test || ( echo test server_crash_test failed ; exit 1 ) $(E) "[RUN] Testing shutdown_test" @@ -1874,15 +1889,15 @@ $(LIBDIR)/$(CONFIG)/pkgconfig/grpc++_unsecure.pc: $(Q) echo "$(GRPCXX_UNSECURE_PC_FILE)" | tr , '\n' >$@ ifeq ($(NO_PROTOC),true) -$(GENDIR)/src/proto/grpc/lb/v0/load_balancer.pb.cc: protoc_dep_error -$(GENDIR)/src/proto/grpc/lb/v0/load_balancer.grpc.pb.cc: protoc_dep_error +$(GENDIR)/src/proto/grpc/lb/v1/load_balancer.pb.cc: protoc_dep_error +$(GENDIR)/src/proto/grpc/lb/v1/load_balancer.grpc.pb.cc: protoc_dep_error else -$(GENDIR)/src/proto/grpc/lb/v0/load_balancer.pb.cc: src/proto/grpc/lb/v0/load_balancer.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) +$(GENDIR)/src/proto/grpc/lb/v1/load_balancer.pb.cc: src/proto/grpc/lb/v1/load_balancer.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) --cpp_out=$(GENDIR) $< -$(GENDIR)/src/proto/grpc/lb/v0/load_balancer.grpc.pb.cc: src/proto/grpc/lb/v0/load_balancer.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) +$(GENDIR)/src/proto/grpc/lb/v1/load_balancer.grpc.pb.cc: src/proto/grpc/lb/v1/load_balancer.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $< @@ -2500,6 +2515,7 @@ LIBGRPC_SRC = \ src/core/lib/iomgr/endpoint_pair_posix.c \ src/core/lib/iomgr/endpoint_pair_windows.c \ src/core/lib/iomgr/ev_poll_and_epoll_posix.c \ + src/core/lib/iomgr/ev_poll_posix.c \ src/core/lib/iomgr/ev_posix.c \ src/core/lib/iomgr/exec_ctx.c \ src/core/lib/iomgr/executor.c \ @@ -2627,8 +2643,11 @@ LIBGRPC_SRC = \ src/core/ext/client_config/uri_parser.c \ src/core/ext/transport/chttp2/server/insecure/server_chttp2.c \ src/core/ext/transport/chttp2/client/insecure/channel_create.c \ + src/core/ext/transport/cronet/client/secure/cronet_channel_create.c \ + src/core/ext/transport/cronet/transport/cronet_api_dummy.c \ + src/core/ext/transport/cronet/transport/cronet_transport.c \ src/core/ext/lb_policy/grpclb/load_balancer_api.c \ - src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c \ + src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c \ third_party/nanopb/pb_common.c \ third_party/nanopb/pb_decode.c \ third_party/nanopb/pb_encode.c \ @@ -2656,6 +2675,7 @@ PUBLIC_HEADERS_C += \ include/grpc/grpc.h \ include/grpc/status.h \ include/grpc/impl/codegen/byte_buffer.h \ + include/grpc/impl/codegen/byte_buffer_reader.h \ include/grpc/impl/codegen/compression_types.h \ include/grpc/impl/codegen/connectivity_state.h \ include/grpc/impl/codegen/grpc_types.h \ @@ -2675,6 +2695,7 @@ PUBLIC_HEADERS_C += \ include/grpc/impl/codegen/sync_posix.h \ include/grpc/impl/codegen/sync_win32.h \ include/grpc/impl/codegen/time.h \ + include/grpc/grpc_cronet.h \ include/grpc/grpc_security.h \ include/grpc/grpc_security_constants.h \ include/grpc/census.h \ @@ -2843,6 +2864,7 @@ LIBGRPC_UNSECURE_SRC = \ src/core/lib/iomgr/endpoint_pair_posix.c \ src/core/lib/iomgr/endpoint_pair_windows.c \ src/core/lib/iomgr/ev_poll_and_epoll_posix.c \ + src/core/lib/iomgr/ev_poll_posix.c \ src/core/lib/iomgr/ev_posix.c \ src/core/lib/iomgr/exec_ctx.c \ src/core/lib/iomgr/executor.c \ @@ -2954,7 +2976,7 @@ LIBGRPC_UNSECURE_SRC = \ src/core/ext/load_reporting/load_reporting.c \ src/core/ext/load_reporting/load_reporting_filter.c \ src/core/ext/lb_policy/grpclb/load_balancer_api.c \ - src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c \ + src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c \ third_party/nanopb/pb_common.c \ third_party/nanopb/pb_decode.c \ third_party/nanopb/pb_encode.c \ @@ -2978,6 +3000,7 @@ PUBLIC_HEADERS_C += \ include/grpc/grpc.h \ include/grpc/status.h \ include/grpc/impl/codegen/byte_buffer.h \ + include/grpc/impl/codegen/byte_buffer_reader.h \ include/grpc/impl/codegen/compression_types.h \ include/grpc/impl/codegen/connectivity_state.h \ include/grpc/impl/codegen/grpc_types.h \ @@ -3208,6 +3231,8 @@ PUBLIC_HEADERS_CXX += \ include/grpc++/impl/rpc_service_method.h \ include/grpc++/impl/serialization_traits.h \ include/grpc++/impl/server_builder_option.h \ + include/grpc++/impl/server_builder_plugin.h \ + include/grpc++/impl/server_initializer.h \ include/grpc++/impl/service_type.h \ include/grpc++/impl/sync.h \ include/grpc++/impl/sync_cxx11.h \ @@ -3264,6 +3289,7 @@ PUBLIC_HEADERS_CXX += \ include/grpc++/impl/codegen/sync_stream.h \ include/grpc++/impl/codegen/time.h \ include/grpc/impl/codegen/byte_buffer.h \ + include/grpc/impl/codegen/byte_buffer_reader.h \ include/grpc/impl/codegen/compression_types.h \ include/grpc/impl/codegen/connectivity_state.h \ include/grpc/impl/codegen/grpc_types.h \ @@ -3511,6 +3537,8 @@ PUBLIC_HEADERS_CXX += \ include/grpc++/impl/rpc_service_method.h \ include/grpc++/impl/serialization_traits.h \ include/grpc++/impl/server_builder_option.h \ + include/grpc++/impl/server_builder_plugin.h \ + include/grpc++/impl/server_initializer.h \ include/grpc++/impl/service_type.h \ include/grpc++/impl/sync.h \ include/grpc++/impl/sync_cxx11.h \ @@ -3567,6 +3595,7 @@ PUBLIC_HEADERS_CXX += \ include/grpc++/impl/codegen/sync_stream.h \ include/grpc++/impl/codegen/time.h \ include/grpc/impl/codegen/byte_buffer.h \ + include/grpc/impl/codegen/byte_buffer_reader.h \ include/grpc/impl/codegen/compression_types.h \ include/grpc/impl/codegen/connectivity_state.h \ include/grpc/impl/codegen/grpc_types.h \ @@ -4330,7 +4359,7 @@ PUBLIC_HEADERS_C += \ LIBBORINGSSL_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_SRC)))) $(LIBBORINGSSL_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX -$(LIBBORINGSSL_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare +$(LIBBORINGSSL_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) $(LIBDIR)/$(CONFIG)/libboringssl.a: $(ZLIB_DEP) $(LIBBORINGSSL_OBJS) $(E) "[AR] Creating $@" @@ -4359,7 +4388,7 @@ PUBLIC_HEADERS_CXX += \ LIBBORINGSSL_TEST_UTIL_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_TEST_UTIL_SRC)))) $(LIBBORINGSSL_TEST_UTIL_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX -$(LIBBORINGSSL_TEST_UTIL_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare +$(LIBBORINGSSL_TEST_UTIL_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) ifeq ($(NO_PROTOBUF),true) @@ -4397,7 +4426,7 @@ PUBLIC_HEADERS_CXX += \ LIBBORINGSSL_AES_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_AES_TEST_LIB_SRC)))) $(LIBBORINGSSL_AES_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX -$(LIBBORINGSSL_AES_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare +$(LIBBORINGSSL_AES_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) ifeq ($(NO_PROTOBUF),true) @@ -4435,7 +4464,7 @@ PUBLIC_HEADERS_CXX += \ LIBBORINGSSL_ASN1_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_ASN1_TEST_LIB_SRC)))) $(LIBBORINGSSL_ASN1_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX -$(LIBBORINGSSL_ASN1_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare +$(LIBBORINGSSL_ASN1_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) ifeq ($(NO_PROTOBUF),true) @@ -4473,7 +4502,7 @@ PUBLIC_HEADERS_CXX += \ LIBBORINGSSL_BASE64_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_BASE64_TEST_LIB_SRC)))) $(LIBBORINGSSL_BASE64_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX -$(LIBBORINGSSL_BASE64_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare +$(LIBBORINGSSL_BASE64_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) ifeq ($(NO_PROTOBUF),true) @@ -4511,7 +4540,7 @@ PUBLIC_HEADERS_CXX += \ LIBBORINGSSL_BIO_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_BIO_TEST_LIB_SRC)))) $(LIBBORINGSSL_BIO_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX -$(LIBBORINGSSL_BIO_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare +$(LIBBORINGSSL_BIO_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) ifeq ($(NO_PROTOBUF),true) @@ -4549,7 +4578,7 @@ PUBLIC_HEADERS_CXX += \ LIBBORINGSSL_BN_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_BN_TEST_LIB_SRC)))) $(LIBBORINGSSL_BN_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX -$(LIBBORINGSSL_BN_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare +$(LIBBORINGSSL_BN_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) ifeq ($(NO_PROTOBUF),true) @@ -4587,7 +4616,7 @@ PUBLIC_HEADERS_CXX += \ LIBBORINGSSL_BYTESTRING_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_BYTESTRING_TEST_LIB_SRC)))) $(LIBBORINGSSL_BYTESTRING_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX -$(LIBBORINGSSL_BYTESTRING_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare +$(LIBBORINGSSL_BYTESTRING_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) ifeq ($(NO_PROTOBUF),true) @@ -4625,7 +4654,7 @@ PUBLIC_HEADERS_CXX += \ LIBBORINGSSL_AEAD_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_AEAD_TEST_LIB_SRC)))) $(LIBBORINGSSL_AEAD_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX -$(LIBBORINGSSL_AEAD_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare +$(LIBBORINGSSL_AEAD_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) ifeq ($(NO_PROTOBUF),true) @@ -4663,7 +4692,7 @@ PUBLIC_HEADERS_CXX += \ LIBBORINGSSL_CIPHER_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_CIPHER_TEST_LIB_SRC)))) $(LIBBORINGSSL_CIPHER_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX -$(LIBBORINGSSL_CIPHER_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare +$(LIBBORINGSSL_CIPHER_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) ifeq ($(NO_PROTOBUF),true) @@ -4701,7 +4730,7 @@ PUBLIC_HEADERS_CXX += \ LIBBORINGSSL_CMAC_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_CMAC_TEST_LIB_SRC)))) $(LIBBORINGSSL_CMAC_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX -$(LIBBORINGSSL_CMAC_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare +$(LIBBORINGSSL_CMAC_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) ifeq ($(NO_PROTOBUF),true) @@ -4739,7 +4768,7 @@ PUBLIC_HEADERS_C += \ LIBBORINGSSL_CONSTANT_TIME_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_CONSTANT_TIME_TEST_LIB_SRC)))) $(LIBBORINGSSL_CONSTANT_TIME_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX -$(LIBBORINGSSL_CONSTANT_TIME_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare +$(LIBBORINGSSL_CONSTANT_TIME_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) $(LIBDIR)/$(CONFIG)/libboringssl_constant_time_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_CONSTANT_TIME_TEST_LIB_OBJS) $(E) "[AR] Creating $@" @@ -4766,7 +4795,7 @@ PUBLIC_HEADERS_CXX += \ LIBBORINGSSL_ED25519_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_ED25519_TEST_LIB_SRC)))) $(LIBBORINGSSL_ED25519_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX -$(LIBBORINGSSL_ED25519_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare +$(LIBBORINGSSL_ED25519_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) ifeq ($(NO_PROTOBUF),true) @@ -4804,7 +4833,7 @@ PUBLIC_HEADERS_CXX += \ LIBBORINGSSL_X25519_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_X25519_TEST_LIB_SRC)))) $(LIBBORINGSSL_X25519_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX -$(LIBBORINGSSL_X25519_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare +$(LIBBORINGSSL_X25519_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) ifeq ($(NO_PROTOBUF),true) @@ -4842,7 +4871,7 @@ PUBLIC_HEADERS_CXX += \ LIBBORINGSSL_DH_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_DH_TEST_LIB_SRC)))) $(LIBBORINGSSL_DH_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX -$(LIBBORINGSSL_DH_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare +$(LIBBORINGSSL_DH_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) ifeq ($(NO_PROTOBUF),true) @@ -4880,7 +4909,7 @@ PUBLIC_HEADERS_CXX += \ LIBBORINGSSL_DIGEST_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_DIGEST_TEST_LIB_SRC)))) $(LIBBORINGSSL_DIGEST_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX -$(LIBBORINGSSL_DIGEST_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare +$(LIBBORINGSSL_DIGEST_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) ifeq ($(NO_PROTOBUF),true) @@ -4918,7 +4947,7 @@ PUBLIC_HEADERS_C += \ LIBBORINGSSL_DSA_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_DSA_TEST_LIB_SRC)))) $(LIBBORINGSSL_DSA_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX -$(LIBBORINGSSL_DSA_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare +$(LIBBORINGSSL_DSA_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) $(LIBDIR)/$(CONFIG)/libboringssl_dsa_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_DSA_TEST_LIB_OBJS) $(E) "[AR] Creating $@" @@ -4945,7 +4974,7 @@ PUBLIC_HEADERS_CXX += \ LIBBORINGSSL_EC_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_EC_TEST_LIB_SRC)))) $(LIBBORINGSSL_EC_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX -$(LIBBORINGSSL_EC_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare +$(LIBBORINGSSL_EC_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) ifeq ($(NO_PROTOBUF),true) @@ -4983,7 +5012,7 @@ PUBLIC_HEADERS_C += \ LIBBORINGSSL_EXAMPLE_MUL_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_EXAMPLE_MUL_LIB_SRC)))) $(LIBBORINGSSL_EXAMPLE_MUL_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX -$(LIBBORINGSSL_EXAMPLE_MUL_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare +$(LIBBORINGSSL_EXAMPLE_MUL_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) $(LIBDIR)/$(CONFIG)/libboringssl_example_mul_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_EXAMPLE_MUL_LIB_OBJS) $(E) "[AR] Creating $@" @@ -5010,7 +5039,7 @@ PUBLIC_HEADERS_CXX += \ LIBBORINGSSL_ECDSA_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_ECDSA_TEST_LIB_SRC)))) $(LIBBORINGSSL_ECDSA_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX -$(LIBBORINGSSL_ECDSA_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare +$(LIBBORINGSSL_ECDSA_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) ifeq ($(NO_PROTOBUF),true) @@ -5048,7 +5077,7 @@ PUBLIC_HEADERS_CXX += \ LIBBORINGSSL_ERR_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_ERR_TEST_LIB_SRC)))) $(LIBBORINGSSL_ERR_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX -$(LIBBORINGSSL_ERR_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare +$(LIBBORINGSSL_ERR_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) ifeq ($(NO_PROTOBUF),true) @@ -5086,7 +5115,7 @@ PUBLIC_HEADERS_CXX += \ LIBBORINGSSL_EVP_EXTRA_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_EVP_EXTRA_TEST_LIB_SRC)))) $(LIBBORINGSSL_EVP_EXTRA_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX -$(LIBBORINGSSL_EVP_EXTRA_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare +$(LIBBORINGSSL_EVP_EXTRA_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) ifeq ($(NO_PROTOBUF),true) @@ -5124,7 +5153,7 @@ PUBLIC_HEADERS_CXX += \ LIBBORINGSSL_EVP_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_EVP_TEST_LIB_SRC)))) $(LIBBORINGSSL_EVP_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX -$(LIBBORINGSSL_EVP_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare +$(LIBBORINGSSL_EVP_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) ifeq ($(NO_PROTOBUF),true) @@ -5162,7 +5191,7 @@ PUBLIC_HEADERS_CXX += \ LIBBORINGSSL_PBKDF_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_PBKDF_TEST_LIB_SRC)))) $(LIBBORINGSSL_PBKDF_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX -$(LIBBORINGSSL_PBKDF_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare +$(LIBBORINGSSL_PBKDF_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) ifeq ($(NO_PROTOBUF),true) @@ -5200,7 +5229,7 @@ PUBLIC_HEADERS_C += \ LIBBORINGSSL_HKDF_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_HKDF_TEST_LIB_SRC)))) $(LIBBORINGSSL_HKDF_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX -$(LIBBORINGSSL_HKDF_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare +$(LIBBORINGSSL_HKDF_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) $(LIBDIR)/$(CONFIG)/libboringssl_hkdf_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_HKDF_TEST_LIB_OBJS) $(E) "[AR] Creating $@" @@ -5227,7 +5256,7 @@ PUBLIC_HEADERS_CXX += \ LIBBORINGSSL_HMAC_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_HMAC_TEST_LIB_SRC)))) $(LIBBORINGSSL_HMAC_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX -$(LIBBORINGSSL_HMAC_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare +$(LIBBORINGSSL_HMAC_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) ifeq ($(NO_PROTOBUF),true) @@ -5265,7 +5294,7 @@ PUBLIC_HEADERS_C += \ LIBBORINGSSL_LHASH_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_LHASH_TEST_LIB_SRC)))) $(LIBBORINGSSL_LHASH_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX -$(LIBBORINGSSL_LHASH_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare +$(LIBBORINGSSL_LHASH_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) $(LIBDIR)/$(CONFIG)/libboringssl_lhash_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_LHASH_TEST_LIB_OBJS) $(E) "[AR] Creating $@" @@ -5292,7 +5321,7 @@ PUBLIC_HEADERS_C += \ LIBBORINGSSL_GCM_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_GCM_TEST_LIB_SRC)))) $(LIBBORINGSSL_GCM_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX -$(LIBBORINGSSL_GCM_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare +$(LIBBORINGSSL_GCM_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) $(LIBDIR)/$(CONFIG)/libboringssl_gcm_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_GCM_TEST_LIB_OBJS) $(E) "[AR] Creating $@" @@ -5319,7 +5348,7 @@ PUBLIC_HEADERS_CXX += \ LIBBORINGSSL_PKCS12_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_PKCS12_TEST_LIB_SRC)))) $(LIBBORINGSSL_PKCS12_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX -$(LIBBORINGSSL_PKCS12_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare +$(LIBBORINGSSL_PKCS12_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) ifeq ($(NO_PROTOBUF),true) @@ -5357,7 +5386,7 @@ PUBLIC_HEADERS_CXX += \ LIBBORINGSSL_PKCS8_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_PKCS8_TEST_LIB_SRC)))) $(LIBBORINGSSL_PKCS8_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX -$(LIBBORINGSSL_PKCS8_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare +$(LIBBORINGSSL_PKCS8_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) ifeq ($(NO_PROTOBUF),true) @@ -5395,7 +5424,7 @@ PUBLIC_HEADERS_CXX += \ LIBBORINGSSL_POLY1305_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_POLY1305_TEST_LIB_SRC)))) $(LIBBORINGSSL_POLY1305_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX -$(LIBBORINGSSL_POLY1305_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare +$(LIBBORINGSSL_POLY1305_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) ifeq ($(NO_PROTOBUF),true) @@ -5433,7 +5462,7 @@ PUBLIC_HEADERS_C += \ LIBBORINGSSL_REFCOUNT_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_REFCOUNT_TEST_LIB_SRC)))) $(LIBBORINGSSL_REFCOUNT_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX -$(LIBBORINGSSL_REFCOUNT_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare +$(LIBBORINGSSL_REFCOUNT_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) $(LIBDIR)/$(CONFIG)/libboringssl_refcount_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_REFCOUNT_TEST_LIB_OBJS) $(E) "[AR] Creating $@" @@ -5460,7 +5489,7 @@ PUBLIC_HEADERS_CXX += \ LIBBORINGSSL_RSA_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_RSA_TEST_LIB_SRC)))) $(LIBBORINGSSL_RSA_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX -$(LIBBORINGSSL_RSA_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare +$(LIBBORINGSSL_RSA_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) ifeq ($(NO_PROTOBUF),true) @@ -5498,7 +5527,7 @@ PUBLIC_HEADERS_C += \ LIBBORINGSSL_THREAD_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_THREAD_TEST_LIB_SRC)))) $(LIBBORINGSSL_THREAD_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX -$(LIBBORINGSSL_THREAD_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare +$(LIBBORINGSSL_THREAD_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) $(LIBDIR)/$(CONFIG)/libboringssl_thread_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_THREAD_TEST_LIB_OBJS) $(E) "[AR] Creating $@" @@ -5525,7 +5554,7 @@ PUBLIC_HEADERS_C += \ LIBBORINGSSL_PKCS7_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_PKCS7_TEST_LIB_SRC)))) $(LIBBORINGSSL_PKCS7_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX -$(LIBBORINGSSL_PKCS7_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare +$(LIBBORINGSSL_PKCS7_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) $(LIBDIR)/$(CONFIG)/libboringssl_pkcs7_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_PKCS7_TEST_LIB_OBJS) $(E) "[AR] Creating $@" @@ -5552,7 +5581,7 @@ PUBLIC_HEADERS_CXX += \ LIBBORINGSSL_X509_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_X509_TEST_LIB_SRC)))) $(LIBBORINGSSL_X509_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX -$(LIBBORINGSSL_X509_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare +$(LIBBORINGSSL_X509_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) ifeq ($(NO_PROTOBUF),true) @@ -5590,7 +5619,7 @@ PUBLIC_HEADERS_C += \ LIBBORINGSSL_TAB_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_TAB_TEST_LIB_SRC)))) $(LIBBORINGSSL_TAB_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX -$(LIBBORINGSSL_TAB_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare +$(LIBBORINGSSL_TAB_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) $(LIBDIR)/$(CONFIG)/libboringssl_tab_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_TAB_TEST_LIB_OBJS) $(E) "[AR] Creating $@" @@ -5617,7 +5646,7 @@ PUBLIC_HEADERS_C += \ LIBBORINGSSL_V3NAME_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_V3NAME_TEST_LIB_SRC)))) $(LIBBORINGSSL_V3NAME_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX -$(LIBBORINGSSL_V3NAME_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare +$(LIBBORINGSSL_V3NAME_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) $(LIBDIR)/$(CONFIG)/libboringssl_v3name_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_V3NAME_TEST_LIB_OBJS) $(E) "[AR] Creating $@" @@ -5644,7 +5673,7 @@ PUBLIC_HEADERS_C += \ LIBBORINGSSL_PQUEUE_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_PQUEUE_TEST_LIB_SRC)))) $(LIBBORINGSSL_PQUEUE_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX -$(LIBBORINGSSL_PQUEUE_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare +$(LIBBORINGSSL_PQUEUE_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) $(LIBDIR)/$(CONFIG)/libboringssl_pqueue_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_PQUEUE_TEST_LIB_OBJS) $(E) "[AR] Creating $@" @@ -5671,7 +5700,7 @@ PUBLIC_HEADERS_CXX += \ LIBBORINGSSL_SSL_TEST_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBBORINGSSL_SSL_TEST_LIB_SRC)))) $(LIBBORINGSSL_SSL_TEST_LIB_OBJS): CPPFLAGS += -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX -$(LIBBORINGSSL_SSL_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare +$(LIBBORINGSSL_SSL_TEST_LIB_OBJS): CFLAGS += -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) ifeq ($(NO_PROTOBUF),true) @@ -10750,7 +10779,7 @@ endif GRPCLB_API_TEST_SRC = \ - $(GENDIR)/src/proto/grpc/lb/v0/load_balancer.pb.cc $(GENDIR)/src/proto/grpc/lb/v0/load_balancer.grpc.pb.cc \ + $(GENDIR)/src/proto/grpc/lb/v1/load_balancer.pb.cc $(GENDIR)/src/proto/grpc/lb/v1/load_balancer.grpc.pb.cc \ test/cpp/grpclb/grpclb_api_test.cc \ GRPCLB_API_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPCLB_API_TEST_SRC)))) @@ -10782,7 +10811,7 @@ endif endif -$(OBJDIR)/$(CONFIG)/src/proto/grpc/lb/v0/load_balancer.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a +$(OBJDIR)/$(CONFIG)/src/proto/grpc/lb/v1/load_balancer.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(OBJDIR)/$(CONFIG)/test/cpp/grpclb/grpclb_api_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a @@ -10793,7 +10822,7 @@ ifneq ($(NO_DEPS),true) -include $(GRPCLB_API_TEST_OBJS:.o=.dep) endif endif -$(OBJDIR)/$(CONFIG)/test/cpp/grpclb/grpclb_api_test.o: $(GENDIR)/src/proto/grpc/lb/v0/load_balancer.pb.cc $(GENDIR)/src/proto/grpc/lb/v0/load_balancer.grpc.pb.cc +$(OBJDIR)/$(CONFIG)/test/cpp/grpclb/grpclb_api_test.o: $(GENDIR)/src/proto/grpc/lb/v1/load_balancer.pb.cc $(GENDIR)/src/proto/grpc/lb/v1/load_balancer.grpc.pb.cc HYBRID_END2END_TEST_SRC = \ @@ -11487,6 +11516,49 @@ endif endif +SERVER_BUILDER_PLUGIN_TEST_SRC = \ + test/cpp/end2end/server_builder_plugin_test.cc \ + +SERVER_BUILDER_PLUGIN_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SERVER_BUILDER_PLUGIN_TEST_SRC)))) +ifeq ($(NO_SECURE),true) + +# You can't build secure targets if you don't have OpenSSL. + +$(BINDIR)/$(CONFIG)/server_builder_plugin_test: openssl_dep_error + +else + + + + +ifeq ($(NO_PROTOBUF),true) + +# You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.0.0+. + +$(BINDIR)/$(CONFIG)/server_builder_plugin_test: protobuf_dep_error + +else + +$(BINDIR)/$(CONFIG)/server_builder_plugin_test: $(PROTOBUF_DEP) $(SERVER_BUILDER_PLUGIN_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.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) $(SERVER_BUILDER_PLUGIN_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/server_builder_plugin_test + +endif + +endif + +$(OBJDIR)/$(CONFIG)/test/cpp/end2end/server_builder_plugin_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a + +deps_server_builder_plugin_test: $(SERVER_BUILDER_PLUGIN_TEST_OBJS:.o=.dep) + +ifneq ($(NO_SECURE),true) +ifneq ($(NO_DEPS),true) +-include $(SERVER_BUILDER_PLUGIN_TEST_OBJS:.o=.dep) +endif +endif + + SERVER_CRASH_TEST_SRC = \ test/cpp/end2end/server_crash_test.cc \ @@ -11986,7 +12058,7 @@ endif # boringssl needs an override to ensure that it does not include # system openssl headers regardless of other configuration # we do so here with a target specific variable assignment -$(BORINGSSL_AES_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value +$(BORINGSSL_AES_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) $(BORINGSSL_AES_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS) $(BORINGSSL_AES_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE @@ -12013,7 +12085,7 @@ endif # boringssl needs an override to ensure that it does not include # system openssl headers regardless of other configuration # we do so here with a target specific variable assignment -$(BORINGSSL_ASN1_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value +$(BORINGSSL_ASN1_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) $(BORINGSSL_ASN1_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS) $(BORINGSSL_ASN1_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE @@ -12040,7 +12112,7 @@ endif # boringssl needs an override to ensure that it does not include # system openssl headers regardless of other configuration # we do so here with a target specific variable assignment -$(BORINGSSL_BASE64_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value +$(BORINGSSL_BASE64_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) $(BORINGSSL_BASE64_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS) $(BORINGSSL_BASE64_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE @@ -12067,7 +12139,7 @@ endif # boringssl needs an override to ensure that it does not include # system openssl headers regardless of other configuration # we do so here with a target specific variable assignment -$(BORINGSSL_BIO_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value +$(BORINGSSL_BIO_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) $(BORINGSSL_BIO_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS) $(BORINGSSL_BIO_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE @@ -12094,7 +12166,7 @@ endif # boringssl needs an override to ensure that it does not include # system openssl headers regardless of other configuration # we do so here with a target specific variable assignment -$(BORINGSSL_BN_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value +$(BORINGSSL_BN_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) $(BORINGSSL_BN_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS) $(BORINGSSL_BN_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE @@ -12121,7 +12193,7 @@ endif # boringssl needs an override to ensure that it does not include # system openssl headers regardless of other configuration # we do so here with a target specific variable assignment -$(BORINGSSL_BYTESTRING_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value +$(BORINGSSL_BYTESTRING_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) $(BORINGSSL_BYTESTRING_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS) $(BORINGSSL_BYTESTRING_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE @@ -12148,7 +12220,7 @@ endif # boringssl needs an override to ensure that it does not include # system openssl headers regardless of other configuration # we do so here with a target specific variable assignment -$(BORINGSSL_AEAD_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value +$(BORINGSSL_AEAD_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) $(BORINGSSL_AEAD_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS) $(BORINGSSL_AEAD_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE @@ -12175,7 +12247,7 @@ endif # boringssl needs an override to ensure that it does not include # system openssl headers regardless of other configuration # we do so here with a target specific variable assignment -$(BORINGSSL_CIPHER_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value +$(BORINGSSL_CIPHER_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) $(BORINGSSL_CIPHER_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS) $(BORINGSSL_CIPHER_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE @@ -12202,7 +12274,7 @@ endif # boringssl needs an override to ensure that it does not include # system openssl headers regardless of other configuration # we do so here with a target specific variable assignment -$(BORINGSSL_CMAC_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value +$(BORINGSSL_CMAC_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) $(BORINGSSL_CMAC_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS) $(BORINGSSL_CMAC_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE @@ -12229,7 +12301,7 @@ endif # boringssl needs an override to ensure that it does not include # system openssl headers regardless of other configuration # we do so here with a target specific variable assignment -$(BORINGSSL_CONSTANT_TIME_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value +$(BORINGSSL_CONSTANT_TIME_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) $(BORINGSSL_CONSTANT_TIME_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS) $(BORINGSSL_CONSTANT_TIME_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE @@ -12256,7 +12328,7 @@ endif # boringssl needs an override to ensure that it does not include # system openssl headers regardless of other configuration # we do so here with a target specific variable assignment -$(BORINGSSL_ED25519_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value +$(BORINGSSL_ED25519_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) $(BORINGSSL_ED25519_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS) $(BORINGSSL_ED25519_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE @@ -12283,7 +12355,7 @@ endif # boringssl needs an override to ensure that it does not include # system openssl headers regardless of other configuration # we do so here with a target specific variable assignment -$(BORINGSSL_X25519_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value +$(BORINGSSL_X25519_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) $(BORINGSSL_X25519_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS) $(BORINGSSL_X25519_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE @@ -12310,7 +12382,7 @@ endif # boringssl needs an override to ensure that it does not include # system openssl headers regardless of other configuration # we do so here with a target specific variable assignment -$(BORINGSSL_DH_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value +$(BORINGSSL_DH_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) $(BORINGSSL_DH_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS) $(BORINGSSL_DH_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE @@ -12337,7 +12409,7 @@ endif # boringssl needs an override to ensure that it does not include # system openssl headers regardless of other configuration # we do so here with a target specific variable assignment -$(BORINGSSL_DIGEST_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value +$(BORINGSSL_DIGEST_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) $(BORINGSSL_DIGEST_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS) $(BORINGSSL_DIGEST_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE @@ -12364,7 +12436,7 @@ endif # boringssl needs an override to ensure that it does not include # system openssl headers regardless of other configuration # we do so here with a target specific variable assignment -$(BORINGSSL_DSA_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value +$(BORINGSSL_DSA_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) $(BORINGSSL_DSA_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS) $(BORINGSSL_DSA_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE @@ -12391,7 +12463,7 @@ endif # boringssl needs an override to ensure that it does not include # system openssl headers regardless of other configuration # we do so here with a target specific variable assignment -$(BORINGSSL_EC_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value +$(BORINGSSL_EC_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) $(BORINGSSL_EC_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS) $(BORINGSSL_EC_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE @@ -12418,7 +12490,7 @@ endif # boringssl needs an override to ensure that it does not include # system openssl headers regardless of other configuration # we do so here with a target specific variable assignment -$(BORINGSSL_EXAMPLE_MUL_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value +$(BORINGSSL_EXAMPLE_MUL_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) $(BORINGSSL_EXAMPLE_MUL_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS) $(BORINGSSL_EXAMPLE_MUL_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE @@ -12445,7 +12517,7 @@ endif # boringssl needs an override to ensure that it does not include # system openssl headers regardless of other configuration # we do so here with a target specific variable assignment -$(BORINGSSL_ECDSA_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value +$(BORINGSSL_ECDSA_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) $(BORINGSSL_ECDSA_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS) $(BORINGSSL_ECDSA_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE @@ -12472,7 +12544,7 @@ endif # boringssl needs an override to ensure that it does not include # system openssl headers regardless of other configuration # we do so here with a target specific variable assignment -$(BORINGSSL_ERR_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value +$(BORINGSSL_ERR_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) $(BORINGSSL_ERR_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS) $(BORINGSSL_ERR_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE @@ -12499,7 +12571,7 @@ endif # boringssl needs an override to ensure that it does not include # system openssl headers regardless of other configuration # we do so here with a target specific variable assignment -$(BORINGSSL_EVP_EXTRA_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value +$(BORINGSSL_EVP_EXTRA_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) $(BORINGSSL_EVP_EXTRA_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS) $(BORINGSSL_EVP_EXTRA_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE @@ -12526,7 +12598,7 @@ endif # boringssl needs an override to ensure that it does not include # system openssl headers regardless of other configuration # we do so here with a target specific variable assignment -$(BORINGSSL_EVP_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value +$(BORINGSSL_EVP_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) $(BORINGSSL_EVP_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS) $(BORINGSSL_EVP_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE @@ -12553,7 +12625,7 @@ endif # boringssl needs an override to ensure that it does not include # system openssl headers regardless of other configuration # we do so here with a target specific variable assignment -$(BORINGSSL_PBKDF_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value +$(BORINGSSL_PBKDF_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) $(BORINGSSL_PBKDF_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS) $(BORINGSSL_PBKDF_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE @@ -12580,7 +12652,7 @@ endif # boringssl needs an override to ensure that it does not include # system openssl headers regardless of other configuration # we do so here with a target specific variable assignment -$(BORINGSSL_HKDF_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value +$(BORINGSSL_HKDF_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) $(BORINGSSL_HKDF_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS) $(BORINGSSL_HKDF_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE @@ -12607,7 +12679,7 @@ endif # boringssl needs an override to ensure that it does not include # system openssl headers regardless of other configuration # we do so here with a target specific variable assignment -$(BORINGSSL_HMAC_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value +$(BORINGSSL_HMAC_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) $(BORINGSSL_HMAC_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS) $(BORINGSSL_HMAC_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE @@ -12634,7 +12706,7 @@ endif # boringssl needs an override to ensure that it does not include # system openssl headers regardless of other configuration # we do so here with a target specific variable assignment -$(BORINGSSL_LHASH_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value +$(BORINGSSL_LHASH_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) $(BORINGSSL_LHASH_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS) $(BORINGSSL_LHASH_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE @@ -12661,7 +12733,7 @@ endif # boringssl needs an override to ensure that it does not include # system openssl headers regardless of other configuration # we do so here with a target specific variable assignment -$(BORINGSSL_GCM_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value +$(BORINGSSL_GCM_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) $(BORINGSSL_GCM_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS) $(BORINGSSL_GCM_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE @@ -12688,7 +12760,7 @@ endif # boringssl needs an override to ensure that it does not include # system openssl headers regardless of other configuration # we do so here with a target specific variable assignment -$(BORINGSSL_PKCS12_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value +$(BORINGSSL_PKCS12_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) $(BORINGSSL_PKCS12_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS) $(BORINGSSL_PKCS12_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE @@ -12715,7 +12787,7 @@ endif # boringssl needs an override to ensure that it does not include # system openssl headers regardless of other configuration # we do so here with a target specific variable assignment -$(BORINGSSL_PKCS8_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value +$(BORINGSSL_PKCS8_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) $(BORINGSSL_PKCS8_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS) $(BORINGSSL_PKCS8_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE @@ -12742,7 +12814,7 @@ endif # boringssl needs an override to ensure that it does not include # system openssl headers regardless of other configuration # we do so here with a target specific variable assignment -$(BORINGSSL_POLY1305_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value +$(BORINGSSL_POLY1305_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) $(BORINGSSL_POLY1305_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS) $(BORINGSSL_POLY1305_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE @@ -12769,7 +12841,7 @@ endif # boringssl needs an override to ensure that it does not include # system openssl headers regardless of other configuration # we do so here with a target specific variable assignment -$(BORINGSSL_REFCOUNT_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value +$(BORINGSSL_REFCOUNT_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) $(BORINGSSL_REFCOUNT_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS) $(BORINGSSL_REFCOUNT_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE @@ -12796,7 +12868,7 @@ endif # boringssl needs an override to ensure that it does not include # system openssl headers regardless of other configuration # we do so here with a target specific variable assignment -$(BORINGSSL_RSA_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value +$(BORINGSSL_RSA_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) $(BORINGSSL_RSA_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS) $(BORINGSSL_RSA_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE @@ -12823,7 +12895,7 @@ endif # boringssl needs an override to ensure that it does not include # system openssl headers regardless of other configuration # we do so here with a target specific variable assignment -$(BORINGSSL_THREAD_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value +$(BORINGSSL_THREAD_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) $(BORINGSSL_THREAD_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS) $(BORINGSSL_THREAD_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE @@ -12850,7 +12922,7 @@ endif # boringssl needs an override to ensure that it does not include # system openssl headers regardless of other configuration # we do so here with a target specific variable assignment -$(BORINGSSL_PKCS7_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value +$(BORINGSSL_PKCS7_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) $(BORINGSSL_PKCS7_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS) $(BORINGSSL_PKCS7_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE @@ -12877,7 +12949,7 @@ endif # boringssl needs an override to ensure that it does not include # system openssl headers regardless of other configuration # we do so here with a target specific variable assignment -$(BORINGSSL_X509_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value +$(BORINGSSL_X509_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) $(BORINGSSL_X509_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS) $(BORINGSSL_X509_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE @@ -12904,7 +12976,7 @@ endif # boringssl needs an override to ensure that it does not include # system openssl headers regardless of other configuration # we do so here with a target specific variable assignment -$(BORINGSSL_TAB_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value +$(BORINGSSL_TAB_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) $(BORINGSSL_TAB_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS) $(BORINGSSL_TAB_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE @@ -12931,7 +13003,7 @@ endif # boringssl needs an override to ensure that it does not include # system openssl headers regardless of other configuration # we do so here with a target specific variable assignment -$(BORINGSSL_V3NAME_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value +$(BORINGSSL_V3NAME_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) $(BORINGSSL_V3NAME_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS) $(BORINGSSL_V3NAME_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE @@ -12958,7 +13030,7 @@ endif # boringssl needs an override to ensure that it does not include # system openssl headers regardless of other configuration # we do so here with a target specific variable assignment -$(BORINGSSL_PQUEUE_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value +$(BORINGSSL_PQUEUE_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) $(BORINGSSL_PQUEUE_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS) $(BORINGSSL_PQUEUE_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE @@ -12985,7 +13057,7 @@ endif # boringssl needs an override to ensure that it does not include # system openssl headers regardless of other configuration # we do so here with a target specific variable assignment -$(BORINGSSL_SSL_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value +$(BORINGSSL_SSL_TEST_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) $(BORINGSSL_SSL_TEST_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS) $(BORINGSSL_SSL_TEST_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE @@ -13108,6 +13180,26 @@ ifneq ($(NO_DEPS),true) endif +LARGE_METADATA_BAD_CLIENT_TEST_SRC = \ + test/core/bad_client/tests/large_metadata.c \ + +LARGE_METADATA_BAD_CLIENT_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LARGE_METADATA_BAD_CLIENT_TEST_SRC)))) + + +$(BINDIR)/$(CONFIG)/large_metadata_bad_client_test: $(LARGE_METADATA_BAD_CLIENT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libbad_client_test.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a + $(E) "[LD] Linking $@" + $(Q) mkdir -p `dirname $@` + $(Q) $(LD) $(LDFLAGS) $(LARGE_METADATA_BAD_CLIENT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libbad_client_test.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) -o $(BINDIR)/$(CONFIG)/large_metadata_bad_client_test + +$(OBJDIR)/$(CONFIG)/test/core/bad_client/tests/large_metadata.o: $(LIBDIR)/$(CONFIG)/libbad_client_test.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a + +deps_large_metadata_bad_client_test: $(LARGE_METADATA_BAD_CLIENT_TEST_OBJS:.o=.dep) + +ifneq ($(NO_DEPS),true) +-include $(LARGE_METADATA_BAD_CLIENT_TEST_OBJS:.o=.dep) +endif + + SERVER_REGISTERED_METHOD_BAD_CLIENT_TEST_SRC = \ test/core/bad_client/tests/server_registered_method.c \ @@ -14373,6 +14465,9 @@ ifneq ($(OPENSSL_DEP),) # otherwise parallel compilation will fail if a source is compiled first. src/core/ext/transport/chttp2/client/secure/secure_channel_create.c: $(OPENSSL_DEP) src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c: $(OPENSSL_DEP) +src/core/ext/transport/cronet/client/secure/cronet_channel_create.c: $(OPENSSL_DEP) +src/core/ext/transport/cronet/transport/cronet_api_dummy.c: $(OPENSSL_DEP) +src/core/ext/transport/cronet/transport/cronet_transport.c: $(OPENSSL_DEP) src/core/lib/http/httpcli_security_connector.c: $(OPENSSL_DEP) src/core/lib/security/b64.c: $(OPENSSL_DEP) src/core/lib/security/client_auth_filter.c: $(OPENSSL_DEP) diff --git a/binding.gyp b/binding.gyp index 49c6f23653b931d602fe755f2d72e3d977489c77..86d24bdf3810fe70f52159272c421912ff9f69aa 100644 --- a/binding.gyp +++ b/binding.gyp @@ -582,6 +582,7 @@ 'src/core/lib/iomgr/endpoint_pair_posix.c', 'src/core/lib/iomgr/endpoint_pair_windows.c', 'src/core/lib/iomgr/ev_poll_and_epoll_posix.c', + 'src/core/lib/iomgr/ev_poll_posix.c', 'src/core/lib/iomgr/ev_posix.c', 'src/core/lib/iomgr/exec_ctx.c', 'src/core/lib/iomgr/executor.c', @@ -709,8 +710,11 @@ 'src/core/ext/client_config/uri_parser.c', 'src/core/ext/transport/chttp2/server/insecure/server_chttp2.c', 'src/core/ext/transport/chttp2/client/insecure/channel_create.c', + 'src/core/ext/transport/cronet/client/secure/cronet_channel_create.c', + 'src/core/ext/transport/cronet/transport/cronet_api_dummy.c', + 'src/core/ext/transport/cronet/transport/cronet_transport.c', 'src/core/ext/lb_policy/grpclb/load_balancer_api.c', - 'src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c', + 'src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c', 'third_party/nanopb/pb_common.c', 'third_party/nanopb/pb_decode.c', 'third_party/nanopb/pb_encode.c', diff --git a/build.yaml b/build.yaml index e330920d9ea6288754d50f8f0304f86c502ffc94..9685d46fa915978df16d0ad1075d953516fcc1c7 100644 --- a/build.yaml +++ b/build.yaml @@ -7,7 +7,7 @@ settings: '#3': Use "-preN" suffixes to identify pre-release versions '#4': Per-language overrides are possible with (eg) ruby_version tag here '#5': See the expand_version.py for all the quirks here - version: 0.14.0-dev + version: 0.15.0-dev filegroups: - name: census public_headers: @@ -166,6 +166,7 @@ filegroups: - src/core/lib/iomgr/endpoint.h - src/core/lib/iomgr/endpoint_pair.h - src/core/lib/iomgr/ev_poll_and_epoll_posix.h + - src/core/lib/iomgr/ev_poll_posix.h - src/core/lib/iomgr/ev_posix.h - src/core/lib/iomgr/exec_ctx.h - src/core/lib/iomgr/executor.h @@ -240,6 +241,7 @@ filegroups: - src/core/lib/iomgr/endpoint_pair_posix.c - src/core/lib/iomgr/endpoint_pair_windows.c - src/core/lib/iomgr/ev_poll_and_epoll_posix.c + - src/core/lib/iomgr/ev_poll_posix.c - src/core/lib/iomgr/ev_posix.c - src/core/lib/iomgr/exec_ctx.c - src/core/lib/iomgr/executor.c @@ -351,6 +353,7 @@ filegroups: - name: grpc_codegen public_headers: - include/grpc/impl/codegen/byte_buffer.h + - include/grpc/impl/codegen/byte_buffer_reader.h - include/grpc/impl/codegen/compression_types.h - include/grpc/impl/codegen/connectivity_state.h - include/grpc/impl/codegen/grpc_types.h @@ -361,10 +364,10 @@ filegroups: - name: grpc_lb_policy_grpclb headers: - src/core/ext/lb_policy/grpclb/load_balancer_api.h - - src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.h + - src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h src: - src/core/ext/lb_policy/grpclb/load_balancer_api.c - - src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c + - src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c uses: - grpc_base - grpc_client_config @@ -409,6 +412,7 @@ filegroups: - grpc_client_config - name: grpc_secure public_headers: + - include/grpc/grpc_cronet.h - include/grpc/grpc_security.h - include/grpc/grpc_security_constants.h headers: @@ -556,6 +560,16 @@ filegroups: - grpc_transport_chttp2 - grpc_base - grpc_secure +- name: grpc_transport_cronet_client_secure + headers: + - third_party/objective_c/Cronet/cronet_c_for_grpc.h + src: + - src/core/ext/transport/cronet/client/secure/cronet_channel_create.c + - src/core/ext/transport/cronet/transport/cronet_api_dummy.c + - src/core/ext/transport/cronet/transport/cronet_transport.c + filegroups: + - grpc_base + - grpc_transport_chttp2 - name: nanopb headers: - third_party/nanopb/pb.h @@ -600,6 +614,8 @@ filegroups: - include/grpc++/impl/rpc_service_method.h - include/grpc++/impl/serialization_traits.h - include/grpc++/impl/server_builder_option.h + - include/grpc++/impl/server_builder_plugin.h + - include/grpc++/impl/server_initializer.h - include/grpc++/impl/service_type.h - include/grpc++/impl/sync.h - include/grpc++/impl/sync_cxx11.h @@ -743,6 +759,7 @@ libs: - grpc_transport_chttp2_client_secure - grpc_transport_chttp2_server_insecure - grpc_transport_chttp2_client_insecure + - grpc_transport_cronet_client_secure - grpc_lb_policy_grpclb - grpc_lb_policy_pick_first - grpc_lb_policy_round_robin @@ -2654,7 +2671,7 @@ targets: build: test language: c++ src: - - src/proto/grpc/lb/v0/load_balancer.proto + - src/proto/grpc/lb/v1/load_balancer.proto - test/cpp/grpclb/grpclb_api_test.cc deps: - grpc++_test_util @@ -2926,6 +2943,19 @@ targets: - mac - linux - posix +- name: server_builder_plugin_test + gtest: true + build: test + language: c++ + src: + - test/cpp/end2end/server_builder_plugin_test.cc + deps: + - grpc++_test_util + - grpc_test_util + - grpc++ + - grpc + - gpr_test_util + - gpr - name: server_crash_test gtest: true cpu_cost: 0.1 @@ -3251,19 +3281,21 @@ configs: timeout_multiplier: 5 ubsan: CC: clang - CPPFLAGS: -O1 -fsanitize-coverage=edge -fsanitize=undefined -fno-omit-frame-pointer - -Wno-unused-command-line-argument + CPPFLAGS: -O0 -fsanitize-coverage=edge -fsanitize=undefined,unsigned-integer-overflow + -fno-omit-frame-pointer -Wno-unused-command-line-argument -Wvarargs CXX: clang++ DEFINES: NDEBUG LD: clang - LDFLAGS: -fsanitize=undefined + LDFLAGS: -fsanitize=undefined,unsigned-integer-overflow LDXX: clang++ compile_the_world: true + test_environ: + UBSAN_OPTIONS: print_stacktrace=1 timeout_multiplier: 1.5 defaults: boringssl: CFLAGS: -Wno-sign-conversion -Wno-conversion -Wno-unused-value -Wno-unknown-pragmas - -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare + -Wno-implicit-function-declaration -Wno-unused-variable -Wno-sign-compare $(NO_W_EXTRA_SEMI) CPPFLAGS: -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX global: diff --git a/composer.json b/composer.json index 97b1a5cb49bfd7621ce324db30a41581f5581e0e..b77a59e351c324e0f25ba793b9199bd074df0fb8 100644 --- a/composer.json +++ b/composer.json @@ -2,7 +2,7 @@ "name": "grpc/grpc", "type": "library", "description": "gRPC library for PHP", - "version": "0.14.0", + "version": "0.15.0", "keywords": ["rpc"], "homepage": "http://grpc.io", "license": "BSD-3-Clause", diff --git a/config.m4 b/config.m4 index 2cadb531d494cd76bf22942c043248d5b44154f0..53ec206b999a130e74b07cf85f1054c1018f8f8b 100644 --- a/config.m4 +++ b/config.m4 @@ -101,6 +101,7 @@ if test "$PHP_GRPC" != "no"; then src/core/lib/iomgr/endpoint_pair_posix.c \ src/core/lib/iomgr/endpoint_pair_windows.c \ src/core/lib/iomgr/ev_poll_and_epoll_posix.c \ + src/core/lib/iomgr/ev_poll_posix.c \ src/core/lib/iomgr/ev_posix.c \ src/core/lib/iomgr/exec_ctx.c \ src/core/lib/iomgr/executor.c \ @@ -228,8 +229,11 @@ if test "$PHP_GRPC" != "no"; then src/core/ext/client_config/uri_parser.c \ src/core/ext/transport/chttp2/server/insecure/server_chttp2.c \ src/core/ext/transport/chttp2/client/insecure/channel_create.c \ + src/core/ext/transport/cronet/client/secure/cronet_channel_create.c \ + src/core/ext/transport/cronet/transport/cronet_api_dummy.c \ + src/core/ext/transport/cronet/transport/cronet_transport.c \ src/core/ext/lb_policy/grpclb/load_balancer_api.c \ - src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c \ + src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c \ third_party/nanopb/pb_common.c \ third_party/nanopb/pb_decode.c \ third_party/nanopb/pb_encode.c \ @@ -557,7 +561,7 @@ if test "$PHP_GRPC" != "no"; then PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/census) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/client_config) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/lb_policy/grpclb) - PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0) + PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/lb_policy/pick_first) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/lb_policy/round_robin) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/load_reporting) @@ -569,6 +573,8 @@ if test "$PHP_GRPC" != "no"; then PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/transport/chttp2/server/insecure) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/transport/chttp2/server/secure) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/transport/chttp2/transport) + PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/transport/cronet/client/secure) + PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/transport/cronet/transport) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/channel) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/compression) PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/debug) diff --git a/examples/cpp/helloworld/Makefile b/examples/cpp/helloworld/Makefile index 470b83573e48f7b4ff018285b3a8b0a699cf40ba..58a82dbb8312611ea278d85a2e9bdb991994b5a8 100644 --- a/examples/cpp/helloworld/Makefile +++ b/examples/cpp/helloworld/Makefile @@ -41,7 +41,7 @@ PROTOS_PATH = ../../protos vpath %.proto $(PROTOS_PATH) -all: system-check greeter_client greeter_server greeter_async_client greeter_async_server +all: system-check greeter_client greeter_server greeter_async_client greeter_async_client2 greeter_async_server greeter_client: helloworld.pb.o helloworld.grpc.pb.o greeter_client.o $(CXX) $^ $(LDFLAGS) -o $@ @@ -52,6 +52,9 @@ greeter_server: helloworld.pb.o helloworld.grpc.pb.o greeter_server.o greeter_async_client: helloworld.pb.o helloworld.grpc.pb.o greeter_async_client.o $(CXX) $^ $(LDFLAGS) -o $@ +greeter_async_client2: helloworld.pb.o helloworld.grpc.pb.o greeter_async_client2.o + $(CXX) $^ $(LDFLAGS) -o $@ + greeter_async_server: helloworld.pb.o helloworld.grpc.pb.o greeter_async_server.o $(CXX) $^ $(LDFLAGS) -o $@ @@ -64,7 +67,7 @@ greeter_async_server: helloworld.pb.o helloworld.grpc.pb.o greeter_async_server. $(PROTOC) -I $(PROTOS_PATH) --cpp_out=. $< clean: - rm -f *.o *.pb.cc *.pb.h greeter_client greeter_server greeter_async_client greeter_async_server + rm -f *.o *.pb.cc *.pb.h greeter_client greeter_server greeter_async_client greeter_async_client2 greeter_async_server # The following is to test your system and ensure a smoother experience. diff --git a/examples/cpp/helloworld/greeter_async_client.cc b/examples/cpp/helloworld/greeter_async_client.cc index 35014267febe9ccd1bab506de49e38ccf18af987..c1f5eb55f0534574b05e159adae1082f49e66465 100644 --- a/examples/cpp/helloworld/greeter_async_client.cc +++ b/examples/cpp/helloworld/greeter_async_client.cc @@ -53,7 +53,7 @@ class GreeterClient { explicit GreeterClient(std::shared_ptr<Channel> channel) : stub_(Greeter::NewStub(channel)) {} - // Assambles the client's payload, sends it and presents the response back + // Assembles the client's payload, sends it and presents the response back // from the server. std::string SayHello(const std::string& user) { // Data we are sending to the server. @@ -74,9 +74,9 @@ class GreeterClient { // Storage for the status of the RPC upon completion. Status status; - // stub_->AsyncSayHello() perform the RPC call, returning an instance we - // store in "rpc". Because we are using the asynchronous API, we need the - // hold on to the "rpc" instance in order to get updates on the ongoig RPC. + // stub_->AsyncSayHello() performs the RPC call, returning an instance we + // store in "rpc". Because we are using the asynchronous API, we need to + // hold on to the "rpc" instance in order to get updates on the ongoing RPC. std::unique_ptr<ClientAsyncResponseReader<HelloReply> > rpc( stub_->AsyncSayHello(&context, request, &cq)); diff --git a/examples/cpp/helloworld/greeter_async_client2.cc b/examples/cpp/helloworld/greeter_async_client2.cc new file mode 100644 index 0000000000000000000000000000000000000000..0902376074e84cf501cb9f5f5fd7c7d87aaaf589 --- /dev/null +++ b/examples/cpp/helloworld/greeter_async_client2.cc @@ -0,0 +1,153 @@ +/* + * + * 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 <iostream> +#include <memory> +#include <string> + +#include <grpc++/grpc++.h> +#include <thread> + +#include "helloworld.grpc.pb.h" + +using grpc::Channel; +using grpc::ClientAsyncResponseReader; +using grpc::ClientContext; +using grpc::CompletionQueue; +using grpc::Status; +using helloworld::HelloRequest; +using helloworld::HelloReply; +using helloworld::Greeter; + +class GreeterClient { + public: + explicit GreeterClient(std::shared_ptr<Channel> channel) + : stub_(Greeter::NewStub(channel)) {} + + // Assembles the client's payload and sends it to the server. + void SayHello(const std::string& user) { + // Data we are sending to the server. + HelloRequest request; + request.set_name(user); + + // Call object to store rpc data + AsyncClientCall* call = new AsyncClientCall; + + // stub_->AsyncSayHello() performs the RPC call, returning an instance to + // store in "call". Because we are using the asynchronous API, we need to + // hold on to the "call" instance in order to get updates on the ongoing RPC. + call->response_reader = stub_->AsyncSayHello(&call->context, request, &cq_); + + + // Request that, upon completion of the RPC, "reply" be updated with the + // server's response; "status" with the indication of whether the operation + // was successful. Tag the request with the memory address of the call object. + call->response_reader->Finish(&call->reply, &call->status, (void*)call); + + } + + // Loop while listening for completed responses. + // Prints out the response from the server. + void AsyncCompleteRpc() { + void* got_tag; + bool ok = false; + + // Block until the next result is available in the completion queue "cq". + while (cq_.Next(&got_tag, &ok)) { + // The tag in this example is the memory location of the call object + AsyncClientCall* call = static_cast<AsyncClientCall*>(got_tag); + + // Verify that the request was completed successfully. Note that "ok" + // corresponds solely to the request for updates introduced by Finish(). + GPR_ASSERT(ok); + + if (call->status.ok()) + std::cout << "Greeter received: " << call->reply.message() << std::endl; + else + std::cout << "RPC failed" << std::endl; + + // Once we're complete, deallocate the call object. + delete call; + } + } + + private: + + // struct for keeping state and data information + struct AsyncClientCall { + // Container for the data we expect from the server. + HelloReply reply; + + // Context for the client. It could be used to convey extra information to + // the server and/or tweak certain RPC behaviors. + ClientContext context; + + // Storage for the status of the RPC upon completion. + Status status; + + + std::unique_ptr<ClientAsyncResponseReader<HelloReply>> response_reader; + }; + + // Out of the passed in Channel comes the stub, stored here, our view of the + // server's exposed services. + std::unique_ptr<Greeter::Stub> stub_; + + // The producer-consumer queue we use to communicate asynchronously with the + // gRPC runtime. + CompletionQueue cq_; +}; + +int main(int argc, char** argv) { + + + // Instantiate the client. It requires a channel, out of which the actual RPCs + // are created. This channel models a connection to an endpoint (in this case, + // localhost at port 50051). We indicate that the channel isn't authenticated + // (use of InsecureChannelCredentials()). + GreeterClient greeter(grpc::CreateChannel( + "localhost:50051", grpc::InsecureChannelCredentials())); + + // Spawn reader thread that loops indefinitely + std::thread thread_ = std::thread(&GreeterClient::AsyncCompleteRpc, &greeter); + + for (int i = 0; i < 100; i++) { + std::string user("world " + std::to_string(i)); + greeter.SayHello(user); // The actual RPC call! + } + + std::cout << "Press control-c to quit" << std::endl << std::endl; + thread_.join(); //blocks forever + + return 0; +} diff --git a/examples/csharp/helloworld/.nuget/packages.config b/examples/csharp/helloworld/.nuget/packages.config index 0f89a66e25f74f83678515c98b5c8d34dce6c74d..bfd6c6723d95020b03c1bc04531110b8a0e2cb96 100644 --- a/examples/csharp/helloworld/.nuget/packages.config +++ b/examples/csharp/helloworld/.nuget/packages.config @@ -1,4 +1,4 @@ <?xml version="1.0" encoding="utf-8"?> <packages> - <package id="Grpc.Tools" version="0.13.1" /> + <package id="Grpc.Tools" version="0.14.0" /> </packages> \ No newline at end of file diff --git a/examples/csharp/helloworld/Greeter/Greeter.csproj b/examples/csharp/helloworld/Greeter/Greeter.csproj index 1e9399f79814875c5f8db1c316ac8d997d4f46b2..0270cc25f7a1e2d0f0040cc132fca6dd1d7a1e70 100644 --- a/examples/csharp/helloworld/Greeter/Greeter.csproj +++ b/examples/csharp/helloworld/Greeter/Greeter.csproj @@ -10,7 +10,7 @@ <RootNamespace>Greeter</RootNamespace> <AssemblyName>Greeter</AssemblyName> <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> - <NuGetPackageImportStamp>96275748</NuGetPackageImportStamp> + <NuGetPackageImportStamp>745ac60f</NuGetPackageImportStamp> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <DebugSymbols>true</DebugSymbols> @@ -35,9 +35,9 @@ <SpecificVersion>False</SpecificVersion> <HintPath>..\packages\Google.Protobuf.3.0.0-beta2\lib\portable-net45+netcore45+wpa81+wp8\Google.Protobuf.dll</HintPath> </Reference> - <Reference Include="Grpc.Core, Version=0.13.1.0, Culture=neutral, PublicKeyToken=d754f35622e28bad, processorArchitecture=MSIL"> + <Reference Include="Grpc.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d754f35622e28bad, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> - <HintPath>..\packages\Grpc.Core.0.13.1\lib\net45\Grpc.Core.dll</HintPath> + <HintPath>..\packages\Grpc.Core.0.14.0\lib\net45\Grpc.Core.dll</HintPath> </Reference> <Reference Include="System" /> <Reference Include="System.Interactive.Async, Version=1.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> @@ -61,11 +61,11 @@ <None Include="packages.config" /> </ItemGroup> <ItemGroup /> - <Import Project="..\packages\grpc.native.csharp.0.13.1\build\portable-net45+netcore45+wpa81+wp8\grpc.native.csharp.targets" Condition="Exists('..\packages\grpc.native.csharp.0.13.1\build\portable-net45+netcore45+wpa81+wp8\grpc.native.csharp.targets')" /> + <Import Project="..\packages\Grpc.Core.0.14.0\build\net45\Grpc.Core.targets" Condition="Exists('..\packages\Grpc.Core.0.14.0\build\net45\Grpc.Core.targets')" /> <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> <PropertyGroup> <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> </PropertyGroup> - <Error Condition="!Exists('..\packages\grpc.native.csharp.0.13.1\build\portable-net45+netcore45+wpa81+wp8\grpc.native.csharp.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.native.csharp.0.13.1\build\portable-net45+netcore45+wpa81+wp8\grpc.native.csharp.targets'))" /> + <Error Condition="!Exists('..\packages\Grpc.Core.0.14.0\build\net45\Grpc.Core.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Grpc.Core.0.14.0\build\net45\Grpc.Core.targets'))" /> </Target> </Project> \ No newline at end of file diff --git a/examples/csharp/helloworld/Greeter/HelloworldGrpc.cs b/examples/csharp/helloworld/Greeter/HelloworldGrpc.cs index 4014bc21e32c0e5c763a8b666bbfdb6b3ed56e2e..405f3bd72481043eb75c9d01e28c7980b656926c 100644 --- a/examples/csharp/helloworld/Greeter/HelloworldGrpc.cs +++ b/examples/csharp/helloworld/Greeter/HelloworldGrpc.cs @@ -1,5 +1,35 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: helloworld.proto +// Original file comments: +// 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. +// #region Designer generated code using System; @@ -8,6 +38,9 @@ using System.Threading.Tasks; using Grpc.Core; namespace Helloworld { + /// <summary> + /// The greeting service definition. + /// </summary> public static class Greeter { static readonly string __ServiceName = "helloworld.Greeter"; @@ -22,66 +55,133 @@ namespace Helloworld { __Marshaller_HelloRequest, __Marshaller_HelloReply); - // service descriptor + /// <summary>Service descriptor</summary> public static global::Google.Protobuf.Reflection.ServiceDescriptor Descriptor { get { return global::Helloworld.HelloworldReflection.Descriptor.Services[0]; } } - // client interface + /// <summary>Client for Greeter</summary> + [System.Obsolete("Client side interfaced will be removed in the next release. Use client class directly.")] public interface IGreeterClient { + /// <summary> + /// Sends a greeting + /// </summary> global::Helloworld.HelloReply SayHello(global::Helloworld.HelloRequest request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken)); + /// <summary> + /// Sends a greeting + /// </summary> global::Helloworld.HelloReply SayHello(global::Helloworld.HelloRequest request, CallOptions options); + /// <summary> + /// Sends a greeting + /// </summary> AsyncUnaryCall<global::Helloworld.HelloReply> SayHelloAsync(global::Helloworld.HelloRequest request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken)); + /// <summary> + /// Sends a greeting + /// </summary> AsyncUnaryCall<global::Helloworld.HelloReply> SayHelloAsync(global::Helloworld.HelloRequest request, CallOptions options); } - // server-side interface + /// <summary>Interface of server-side implementations of Greeter</summary> + [System.Obsolete("Service implementations should inherit from the generated abstract base class instead.")] public interface IGreeter { - Task<global::Helloworld.HelloReply> SayHello(global::Helloworld.HelloRequest request, ServerCallContext context); + /// <summary> + /// Sends a greeting + /// </summary> + global::System.Threading.Tasks.Task<global::Helloworld.HelloReply> SayHello(global::Helloworld.HelloRequest request, ServerCallContext context); } - // client stub - public class GreeterClient : ClientBase, IGreeterClient + /// <summary>Base class for server-side implementations of Greeter</summary> + public abstract class GreeterBase + { + /// <summary> + /// Sends a greeting + /// </summary> + public virtual global::System.Threading.Tasks.Task<global::Helloworld.HelloReply> SayHello(global::Helloworld.HelloRequest request, ServerCallContext context) + { + throw new RpcException(new Status(StatusCode.Unimplemented, "")); + } + + } + + /// <summary>Client for Greeter</summary> + #pragma warning disable 0618 + public class GreeterClient : ClientBase<GreeterClient>, IGreeterClient + #pragma warning restore 0618 { public GreeterClient(Channel channel) : base(channel) { } - public global::Helloworld.HelloReply SayHello(global::Helloworld.HelloRequest request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken)) + public GreeterClient(CallInvoker callInvoker) : base(callInvoker) + { + } + ///<summary>Protected parameterless constructor to allow creation of test doubles.</summary> + protected GreeterClient() : base() + { + } + ///<summary>Protected constructor to allow creation of configured clients.</summary> + protected GreeterClient(ClientBaseConfiguration configuration) : base(configuration) + { + } + + /// <summary> + /// Sends a greeting + /// </summary> + public virtual global::Helloworld.HelloReply SayHello(global::Helloworld.HelloRequest request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken)) + { + return SayHello(request, new CallOptions(headers, deadline, cancellationToken)); + } + /// <summary> + /// Sends a greeting + /// </summary> + public virtual global::Helloworld.HelloReply SayHello(global::Helloworld.HelloRequest request, CallOptions options) { - var call = CreateCall(__Method_SayHello, new CallOptions(headers, deadline, cancellationToken)); - return Calls.BlockingUnaryCall(call, request); + return CallInvoker.BlockingUnaryCall(__Method_SayHello, null, options, request); } - public global::Helloworld.HelloReply SayHello(global::Helloworld.HelloRequest request, CallOptions options) + /// <summary> + /// Sends a greeting + /// </summary> + public virtual AsyncUnaryCall<global::Helloworld.HelloReply> SayHelloAsync(global::Helloworld.HelloRequest request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken)) { - var call = CreateCall(__Method_SayHello, options); - return Calls.BlockingUnaryCall(call, request); + return SayHelloAsync(request, new CallOptions(headers, deadline, cancellationToken)); } - public AsyncUnaryCall<global::Helloworld.HelloReply> SayHelloAsync(global::Helloworld.HelloRequest request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken)) + /// <summary> + /// Sends a greeting + /// </summary> + public virtual AsyncUnaryCall<global::Helloworld.HelloReply> SayHelloAsync(global::Helloworld.HelloRequest request, CallOptions options) { - var call = CreateCall(__Method_SayHello, new CallOptions(headers, deadline, cancellationToken)); - return Calls.AsyncUnaryCall(call, request); + return CallInvoker.AsyncUnaryCall(__Method_SayHello, null, options, request); } - public AsyncUnaryCall<global::Helloworld.HelloReply> SayHelloAsync(global::Helloworld.HelloRequest request, CallOptions options) + protected override GreeterClient NewInstance(ClientBaseConfiguration configuration) { - var call = CreateCall(__Method_SayHello, options); - return Calls.AsyncUnaryCall(call, request); + return new GreeterClient(configuration); } } - // creates service definition that can be registered with a server + /// <summary>Creates a new client for Greeter</summary> + public static GreeterClient NewClient(Channel channel) + { + return new GreeterClient(channel); + } + + /// <summary>Creates service definition that can be registered with a server</summary> + #pragma warning disable 0618 public static ServerServiceDefinition BindService(IGreeter serviceImpl) + #pragma warning restore 0618 { return ServerServiceDefinition.CreateBuilder(__ServiceName) .AddMethod(__Method_SayHello, serviceImpl.SayHello).Build(); } - // creates a new client - public static GreeterClient NewClient(Channel channel) + /// <summary>Creates service definition that can be registered with a server</summary> + #pragma warning disable 0618 + public static ServerServiceDefinition BindService(GreeterBase serviceImpl) + #pragma warning restore 0618 { - return new GreeterClient(channel); + return ServerServiceDefinition.CreateBuilder(__ServiceName) + .AddMethod(__Method_SayHello, serviceImpl.SayHello).Build(); } } diff --git a/examples/csharp/helloworld/Greeter/packages.config b/examples/csharp/helloworld/Greeter/packages.config index 7d24440b123e635d4e30392a4daf42bbfe5bccae..617fe6da7beb3b90c109e843d7ecd1ac94046067 100644 --- a/examples/csharp/helloworld/Greeter/packages.config +++ b/examples/csharp/helloworld/Greeter/packages.config @@ -1,8 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <packages> <package id="Google.Protobuf" version="3.0.0-beta2" targetFramework="net45" /> - <package id="Grpc" version="0.13.1" targetFramework="net45" /> - <package id="Grpc.Core" version="0.13.1" targetFramework="net45" /> - <package id="grpc.native.csharp" version="0.13.1" targetFramework="net45" /> + <package id="Grpc" version="0.14.0" targetFramework="net45" /> + <package id="Grpc.Core" version="0.14.0" targetFramework="net45" /> <package id="Ix-Async" version="1.2.5" targetFramework="net45" /> </packages> \ No newline at end of file diff --git a/examples/csharp/helloworld/GreeterClient/GreeterClient.csproj b/examples/csharp/helloworld/GreeterClient/GreeterClient.csproj index e10a6058df1f5e6300db06c01f9621faea4639d8..877c450a50e584e4afed95d47508979799e44f0a 100644 --- a/examples/csharp/helloworld/GreeterClient/GreeterClient.csproj +++ b/examples/csharp/helloworld/GreeterClient/GreeterClient.csproj @@ -10,7 +10,7 @@ <RootNamespace>GreeterClient</RootNamespace> <AssemblyName>GreeterClient</AssemblyName> <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> - <NuGetPackageImportStamp>d94f6f5f</NuGetPackageImportStamp> + <NuGetPackageImportStamp>63b59176</NuGetPackageImportStamp> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <DebugSymbols>true</DebugSymbols> @@ -35,9 +35,9 @@ <SpecificVersion>False</SpecificVersion> <HintPath>..\packages\Google.Protobuf.3.0.0-beta2\lib\portable-net45+netcore45+wpa81+wp8\Google.Protobuf.dll</HintPath> </Reference> - <Reference Include="Grpc.Core, Version=0.13.1.0, Culture=neutral, PublicKeyToken=d754f35622e28bad, processorArchitecture=MSIL"> + <Reference Include="Grpc.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d754f35622e28bad, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> - <HintPath>..\packages\Grpc.Core.0.13.1\lib\net45\Grpc.Core.dll</HintPath> + <HintPath>..\packages\Grpc.Core.0.14.0\lib\net45\Grpc.Core.dll</HintPath> </Reference> <Reference Include="System" /> <Reference Include="System.Interactive.Async, Version=1.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> @@ -59,11 +59,11 @@ <ItemGroup> <None Include="packages.config" /> </ItemGroup> - <Import Project="..\packages\grpc.native.csharp.0.13.1\build\portable-net45+netcore45+wpa81+wp8\grpc.native.csharp.targets" Condition="Exists('..\packages\grpc.native.csharp.0.13.1\build\portable-net45+netcore45+wpa81+wp8\grpc.native.csharp.targets')" /> + <Import Project="..\packages\Grpc.Core.0.14.0\build\net45\Grpc.Core.targets" Condition="Exists('..\packages\Grpc.Core.0.14.0\build\net45\Grpc.Core.targets')" /> <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> <PropertyGroup> <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> </PropertyGroup> - <Error Condition="!Exists('..\packages\grpc.native.csharp.0.13.1\build\portable-net45+netcore45+wpa81+wp8\grpc.native.csharp.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.native.csharp.0.13.1\build\portable-net45+netcore45+wpa81+wp8\grpc.native.csharp.targets'))" /> + <Error Condition="!Exists('..\packages\Grpc.Core.0.14.0\build\net45\Grpc.Core.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Grpc.Core.0.14.0\build\net45\Grpc.Core.targets'))" /> </Target> </Project> \ No newline at end of file diff --git a/examples/csharp/helloworld/GreeterClient/packages.config b/examples/csharp/helloworld/GreeterClient/packages.config index 7d24440b123e635d4e30392a4daf42bbfe5bccae..617fe6da7beb3b90c109e843d7ecd1ac94046067 100644 --- a/examples/csharp/helloworld/GreeterClient/packages.config +++ b/examples/csharp/helloworld/GreeterClient/packages.config @@ -1,8 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <packages> <package id="Google.Protobuf" version="3.0.0-beta2" targetFramework="net45" /> - <package id="Grpc" version="0.13.1" targetFramework="net45" /> - <package id="Grpc.Core" version="0.13.1" targetFramework="net45" /> - <package id="grpc.native.csharp" version="0.13.1" targetFramework="net45" /> + <package id="Grpc" version="0.14.0" targetFramework="net45" /> + <package id="Grpc.Core" version="0.14.0" targetFramework="net45" /> <package id="Ix-Async" version="1.2.5" targetFramework="net45" /> </packages> \ No newline at end of file diff --git a/examples/csharp/helloworld/GreeterServer/GreeterServer.csproj b/examples/csharp/helloworld/GreeterServer/GreeterServer.csproj index 6c70f75087dd2e54045d17c6e7872939117adedb..4d792dcf32e042af49e673d497a0f15f38e8c627 100644 --- a/examples/csharp/helloworld/GreeterServer/GreeterServer.csproj +++ b/examples/csharp/helloworld/GreeterServer/GreeterServer.csproj @@ -10,7 +10,7 @@ <RootNamespace>GreeterServer</RootNamespace> <AssemblyName>GreeterServer</AssemblyName> <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> - <NuGetPackageImportStamp>6f89e9f2</NuGetPackageImportStamp> + <NuGetPackageImportStamp>25ac2e80</NuGetPackageImportStamp> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <DebugSymbols>true</DebugSymbols> @@ -35,9 +35,9 @@ <SpecificVersion>False</SpecificVersion> <HintPath>..\packages\Google.Protobuf.3.0.0-beta2\lib\portable-net45+netcore45+wpa81+wp8\Google.Protobuf.dll</HintPath> </Reference> - <Reference Include="Grpc.Core, Version=0.13.1.0, Culture=neutral, PublicKeyToken=d754f35622e28bad, processorArchitecture=MSIL"> + <Reference Include="Grpc.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d754f35622e28bad, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> - <HintPath>..\packages\Grpc.Core.0.13.1\lib\net45\Grpc.Core.dll</HintPath> + <HintPath>..\packages\Grpc.Core.0.14.0\lib\net45\Grpc.Core.dll</HintPath> </Reference> <Reference Include="System" /> <Reference Include="System.Interactive.Async, Version=1.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> @@ -59,11 +59,11 @@ <ItemGroup> <None Include="packages.config" /> </ItemGroup> - <Import Project="..\packages\grpc.native.csharp.0.13.1\build\portable-net45+netcore45+wpa81+wp8\grpc.native.csharp.targets" Condition="Exists('..\packages\grpc.native.csharp.0.13.1\build\portable-net45+netcore45+wpa81+wp8\grpc.native.csharp.targets')" /> + <Import Project="..\packages\Grpc.Core.0.14.0\build\net45\Grpc.Core.targets" Condition="Exists('..\packages\Grpc.Core.0.14.0\build\net45\Grpc.Core.targets')" /> <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> <PropertyGroup> <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> </PropertyGroup> - <Error Condition="!Exists('..\packages\grpc.native.csharp.0.13.1\build\portable-net45+netcore45+wpa81+wp8\grpc.native.csharp.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.native.csharp.0.13.1\build\portable-net45+netcore45+wpa81+wp8\grpc.native.csharp.targets'))" /> + <Error Condition="!Exists('..\packages\Grpc.Core.0.14.0\build\net45\Grpc.Core.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Grpc.Core.0.14.0\build\net45\Grpc.Core.targets'))" /> </Target> </Project> \ No newline at end of file diff --git a/examples/csharp/helloworld/GreeterServer/Program.cs b/examples/csharp/helloworld/GreeterServer/Program.cs index 79f421df9e1f4743a2ad5930a8218e51019f6f47..fdab379e81d3136cc4b9286687709f0bc530fd08 100644 --- a/examples/csharp/helloworld/GreeterServer/Program.cs +++ b/examples/csharp/helloworld/GreeterServer/Program.cs @@ -34,10 +34,10 @@ using Helloworld; namespace GreeterServer { - class GreeterImpl : Greeter.IGreeter + class GreeterImpl : Greeter.GreeterBase { // Server side handler of the SayHello RPC - public Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context) + public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context) { return Task.FromResult(new HelloReply { Message = "Hello " + request.Name }); } diff --git a/examples/csharp/helloworld/GreeterServer/packages.config b/examples/csharp/helloworld/GreeterServer/packages.config index 7d24440b123e635d4e30392a4daf42bbfe5bccae..617fe6da7beb3b90c109e843d7ecd1ac94046067 100644 --- a/examples/csharp/helloworld/GreeterServer/packages.config +++ b/examples/csharp/helloworld/GreeterServer/packages.config @@ -1,8 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <packages> <package id="Google.Protobuf" version="3.0.0-beta2" targetFramework="net45" /> - <package id="Grpc" version="0.13.1" targetFramework="net45" /> - <package id="Grpc.Core" version="0.13.1" targetFramework="net45" /> - <package id="grpc.native.csharp" version="0.13.1" targetFramework="net45" /> + <package id="Grpc" version="0.14.0" targetFramework="net45" /> + <package id="Grpc.Core" version="0.14.0" targetFramework="net45" /> <package id="Ix-Async" version="1.2.5" targetFramework="net45" /> </packages> \ No newline at end of file diff --git a/examples/csharp/helloworld/generate_protos.bat b/examples/csharp/helloworld/generate_protos.bat index 99f81a7d821cee97fefde556e27326e0148852be..b9f68d6745abd7c881d0b779e07dcea12829cccd 100644 --- a/examples/csharp/helloworld/generate_protos.bat +++ b/examples/csharp/helloworld/generate_protos.bat @@ -1,3 +1,32 @@ +@rem Copyright 2016, Google Inc. +@rem All rights reserved. +@rem +@rem Redistribution and use in source and binary forms, with or without +@rem modification, are permitted provided that the following conditions are +@rem met: +@rem +@rem * Redistributions of source code must retain the above copyright +@rem notice, this list of conditions and the following disclaimer. +@rem * Redistributions in binary form must reproduce the above +@rem copyright notice, this list of conditions and the following disclaimer +@rem in the documentation and/or other materials provided with the +@rem distribution. +@rem * Neither the name of Google Inc. nor the names of its +@rem contributors may be used to endorse or promote products derived from +@rem this software without specific prior written permission. +@rem +@rem THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +@rem "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +@rem LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +@rem A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +@rem OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +@rem SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +@rem LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +@rem DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +@rem THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +@rem (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +@rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + @rem Generate the C# code for .proto files setlocal @@ -5,7 +34,7 @@ setlocal @rem enter this directory cd /d %~dp0 -set TOOLS_PATH=packages\Grpc.Tools.0.13.1\tools\windows_x86 +set TOOLS_PATH=packages\Grpc.Tools.0.14.0\tools\windows_x86 %TOOLS_PATH%\protoc.exe -I../../protos --csharp_out Greeter ../../protos/helloworld.proto --grpc_out Greeter --plugin=protoc-gen-grpc=%TOOLS_PATH%\grpc_csharp_plugin.exe diff --git a/examples/csharp/route_guide/.nuget/packages.config b/examples/csharp/route_guide/.nuget/packages.config index 0f89a66e25f74f83678515c98b5c8d34dce6c74d..bfd6c6723d95020b03c1bc04531110b8a0e2cb96 100644 --- a/examples/csharp/route_guide/.nuget/packages.config +++ b/examples/csharp/route_guide/.nuget/packages.config @@ -1,4 +1,4 @@ <?xml version="1.0" encoding="utf-8"?> <packages> - <package id="Grpc.Tools" version="0.13.1" /> + <package id="Grpc.Tools" version="0.14.0" /> </packages> \ No newline at end of file diff --git a/examples/csharp/route_guide/RouteGuide/RouteGuide.csproj b/examples/csharp/route_guide/RouteGuide/RouteGuide.csproj index eba1226b900023cf5ac8f8e625b9af53f38db9c9..4f7222ebba33febe7d92480e91ccd84887696ff0 100644 --- a/examples/csharp/route_guide/RouteGuide/RouteGuide.csproj +++ b/examples/csharp/route_guide/RouteGuide/RouteGuide.csproj @@ -11,7 +11,7 @@ <AssemblyName>RouteGuide</AssemblyName> <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> <FileAlignment>512</FileAlignment> - <NuGetPackageImportStamp>e1e648e7</NuGetPackageImportStamp> + <NuGetPackageImportStamp>0a9fcb7a</NuGetPackageImportStamp> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <DebugSymbols>true</DebugSymbols> @@ -35,9 +35,9 @@ <SpecificVersion>False</SpecificVersion> <HintPath>..\packages\Google.Protobuf.3.0.0-beta2\lib\portable-net45+netcore45+wpa81+wp8\Google.Protobuf.dll</HintPath> </Reference> - <Reference Include="Grpc.Core, Version=0.13.1.0, Culture=neutral, PublicKeyToken=d754f35622e28bad, processorArchitecture=MSIL"> + <Reference Include="Grpc.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d754f35622e28bad, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> - <HintPath>..\packages\Grpc.Core.0.13.1\lib\net45\Grpc.Core.dll</HintPath> + <HintPath>..\packages\Grpc.Core.0.14.0\lib\net45\Grpc.Core.dll</HintPath> </Reference> <Reference Include="Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> @@ -74,12 +74,12 @@ </None> </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> - <Import Project="..\packages\grpc.native.csharp.0.13.1\build\portable-net45+netcore45+wpa81+wp8\grpc.native.csharp.targets" Condition="Exists('..\packages\grpc.native.csharp.0.13.1\build\portable-net45+netcore45+wpa81+wp8\grpc.native.csharp.targets')" /> + <Import Project="..\packages\Grpc.Core.0.14.0\build\net45\Grpc.Core.targets" Condition="Exists('..\packages\Grpc.Core.0.14.0\build\net45\Grpc.Core.targets')" /> <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> <PropertyGroup> <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> </PropertyGroup> - <Error Condition="!Exists('..\packages\grpc.native.csharp.0.13.1\build\portable-net45+netcore45+wpa81+wp8\grpc.native.csharp.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.native.csharp.0.13.1\build\portable-net45+netcore45+wpa81+wp8\grpc.native.csharp.targets'))" /> + <Error Condition="!Exists('..\packages\Grpc.Core.0.14.0\build\net45\Grpc.Core.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Grpc.Core.0.14.0\build\net45\Grpc.Core.targets'))" /> </Target> <!-- To modify your build process, add your task inside one of the targets below and uncomment it. Other similar extension points exist, see Microsoft.Common.targets. diff --git a/examples/csharp/route_guide/RouteGuide/RouteGuideGrpc.cs b/examples/csharp/route_guide/RouteGuide/RouteGuideGrpc.cs index 66d1c07978656805ab7bd7c9ea003b755c566027..a59906d9c13654ccf7b0367ba20ecf147a4be6ed 100644 --- a/examples/csharp/route_guide/RouteGuide/RouteGuideGrpc.cs +++ b/examples/csharp/route_guide/RouteGuide/RouteGuideGrpc.cs @@ -1,5 +1,35 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: route_guide.proto +// Original file comments: +// 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. +// #region Designer generated code using System; @@ -8,6 +38,9 @@ using System.Threading.Tasks; using Grpc.Core; namespace Routeguide { + /// <summary> + /// Interface exported by the server. + /// </summary> public static class RouteGuide { static readonly string __ServiceName = "routeguide.RouteGuide"; @@ -46,96 +79,339 @@ namespace Routeguide { __Marshaller_RouteNote, __Marshaller_RouteNote); - // service descriptor + /// <summary>Service descriptor</summary> public static global::Google.Protobuf.Reflection.ServiceDescriptor Descriptor { get { return global::Routeguide.RouteGuideReflection.Descriptor.Services[0]; } } - // client interface + /// <summary>Client for RouteGuide</summary> + [System.Obsolete("Client side interfaced will be removed in the next release. Use client class directly.")] public interface IRouteGuideClient { + /// <summary> + /// A simple RPC. + /// + /// Obtains the feature at a given position. + /// + /// A feature with an empty name is returned if there's no feature at the given + /// position. + /// </summary> global::Routeguide.Feature GetFeature(global::Routeguide.Point request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken)); + /// <summary> + /// A simple RPC. + /// + /// Obtains the feature at a given position. + /// + /// A feature with an empty name is returned if there's no feature at the given + /// position. + /// </summary> global::Routeguide.Feature GetFeature(global::Routeguide.Point request, CallOptions options); + /// <summary> + /// A simple RPC. + /// + /// Obtains the feature at a given position. + /// + /// A feature with an empty name is returned if there's no feature at the given + /// position. + /// </summary> AsyncUnaryCall<global::Routeguide.Feature> GetFeatureAsync(global::Routeguide.Point request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken)); + /// <summary> + /// A simple RPC. + /// + /// Obtains the feature at a given position. + /// + /// A feature with an empty name is returned if there's no feature at the given + /// position. + /// </summary> AsyncUnaryCall<global::Routeguide.Feature> GetFeatureAsync(global::Routeguide.Point request, CallOptions options); + /// <summary> + /// A server-to-client streaming RPC. + /// + /// Obtains the Features available within the given Rectangle. Results are + /// streamed rather than returned at once (e.g. in a response message with a + /// repeated field), as the rectangle may cover a large area and contain a + /// huge number of features. + /// </summary> AsyncServerStreamingCall<global::Routeguide.Feature> ListFeatures(global::Routeguide.Rectangle request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken)); + /// <summary> + /// A server-to-client streaming RPC. + /// + /// Obtains the Features available within the given Rectangle. Results are + /// streamed rather than returned at once (e.g. in a response message with a + /// repeated field), as the rectangle may cover a large area and contain a + /// huge number of features. + /// </summary> AsyncServerStreamingCall<global::Routeguide.Feature> ListFeatures(global::Routeguide.Rectangle request, CallOptions options); + /// <summary> + /// A client-to-server streaming RPC. + /// + /// Accepts a stream of Points on a route being traversed, returning a + /// RouteSummary when traversal is completed. + /// </summary> AsyncClientStreamingCall<global::Routeguide.Point, global::Routeguide.RouteSummary> RecordRoute(Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken)); + /// <summary> + /// A client-to-server streaming RPC. + /// + /// Accepts a stream of Points on a route being traversed, returning a + /// RouteSummary when traversal is completed. + /// </summary> AsyncClientStreamingCall<global::Routeguide.Point, global::Routeguide.RouteSummary> RecordRoute(CallOptions options); + /// <summary> + /// A Bidirectional streaming RPC. + /// + /// Accepts a stream of RouteNotes sent while a route is being traversed, + /// while receiving other RouteNotes (e.g. from other users). + /// </summary> AsyncDuplexStreamingCall<global::Routeguide.RouteNote, global::Routeguide.RouteNote> RouteChat(Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken)); + /// <summary> + /// A Bidirectional streaming RPC. + /// + /// Accepts a stream of RouteNotes sent while a route is being traversed, + /// while receiving other RouteNotes (e.g. from other users). + /// </summary> AsyncDuplexStreamingCall<global::Routeguide.RouteNote, global::Routeguide.RouteNote> RouteChat(CallOptions options); } - // server-side interface + /// <summary>Interface of server-side implementations of RouteGuide</summary> + [System.Obsolete("Service implementations should inherit from the generated abstract base class instead.")] public interface IRouteGuide { - Task<global::Routeguide.Feature> GetFeature(global::Routeguide.Point request, ServerCallContext context); - Task ListFeatures(global::Routeguide.Rectangle request, IServerStreamWriter<global::Routeguide.Feature> responseStream, ServerCallContext context); - Task<global::Routeguide.RouteSummary> RecordRoute(IAsyncStreamReader<global::Routeguide.Point> requestStream, ServerCallContext context); - Task RouteChat(IAsyncStreamReader<global::Routeguide.RouteNote> requestStream, IServerStreamWriter<global::Routeguide.RouteNote> responseStream, ServerCallContext context); + /// <summary> + /// A simple RPC. + /// + /// Obtains the feature at a given position. + /// + /// A feature with an empty name is returned if there's no feature at the given + /// position. + /// </summary> + global::System.Threading.Tasks.Task<global::Routeguide.Feature> GetFeature(global::Routeguide.Point request, ServerCallContext context); + /// <summary> + /// A server-to-client streaming RPC. + /// + /// Obtains the Features available within the given Rectangle. Results are + /// streamed rather than returned at once (e.g. in a response message with a + /// repeated field), as the rectangle may cover a large area and contain a + /// huge number of features. + /// </summary> + global::System.Threading.Tasks.Task ListFeatures(global::Routeguide.Rectangle request, IServerStreamWriter<global::Routeguide.Feature> responseStream, ServerCallContext context); + /// <summary> + /// A client-to-server streaming RPC. + /// + /// Accepts a stream of Points on a route being traversed, returning a + /// RouteSummary when traversal is completed. + /// </summary> + global::System.Threading.Tasks.Task<global::Routeguide.RouteSummary> RecordRoute(IAsyncStreamReader<global::Routeguide.Point> requestStream, ServerCallContext context); + /// <summary> + /// A Bidirectional streaming RPC. + /// + /// Accepts a stream of RouteNotes sent while a route is being traversed, + /// while receiving other RouteNotes (e.g. from other users). + /// </summary> + global::System.Threading.Tasks.Task RouteChat(IAsyncStreamReader<global::Routeguide.RouteNote> requestStream, IServerStreamWriter<global::Routeguide.RouteNote> responseStream, ServerCallContext context); } - // client stub - public class RouteGuideClient : ClientBase, IRouteGuideClient + /// <summary>Base class for server-side implementations of RouteGuide</summary> + public abstract class RouteGuideBase + { + /// <summary> + /// A simple RPC. + /// + /// Obtains the feature at a given position. + /// + /// A feature with an empty name is returned if there's no feature at the given + /// position. + /// </summary> + public virtual global::System.Threading.Tasks.Task<global::Routeguide.Feature> GetFeature(global::Routeguide.Point request, ServerCallContext context) + { + throw new RpcException(new Status(StatusCode.Unimplemented, "")); + } + + /// <summary> + /// A server-to-client streaming RPC. + /// + /// Obtains the Features available within the given Rectangle. Results are + /// streamed rather than returned at once (e.g. in a response message with a + /// repeated field), as the rectangle may cover a large area and contain a + /// huge number of features. + /// </summary> + public virtual global::System.Threading.Tasks.Task ListFeatures(global::Routeguide.Rectangle request, IServerStreamWriter<global::Routeguide.Feature> responseStream, ServerCallContext context) + { + throw new RpcException(new Status(StatusCode.Unimplemented, "")); + } + + /// <summary> + /// A client-to-server streaming RPC. + /// + /// Accepts a stream of Points on a route being traversed, returning a + /// RouteSummary when traversal is completed. + /// </summary> + public virtual global::System.Threading.Tasks.Task<global::Routeguide.RouteSummary> RecordRoute(IAsyncStreamReader<global::Routeguide.Point> requestStream, ServerCallContext context) + { + throw new RpcException(new Status(StatusCode.Unimplemented, "")); + } + + /// <summary> + /// A Bidirectional streaming RPC. + /// + /// Accepts a stream of RouteNotes sent while a route is being traversed, + /// while receiving other RouteNotes (e.g. from other users). + /// </summary> + public virtual global::System.Threading.Tasks.Task RouteChat(IAsyncStreamReader<global::Routeguide.RouteNote> requestStream, IServerStreamWriter<global::Routeguide.RouteNote> responseStream, ServerCallContext context) + { + throw new RpcException(new Status(StatusCode.Unimplemented, "")); + } + + } + + /// <summary>Client for RouteGuide</summary> + #pragma warning disable 0618 + public class RouteGuideClient : ClientBase<RouteGuideClient>, IRouteGuideClient + #pragma warning restore 0618 { public RouteGuideClient(Channel channel) : base(channel) { } - public global::Routeguide.Feature GetFeature(global::Routeguide.Point request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken)) + public RouteGuideClient(CallInvoker callInvoker) : base(callInvoker) + { + } + ///<summary>Protected parameterless constructor to allow creation of test doubles.</summary> + protected RouteGuideClient() : base() + { + } + ///<summary>Protected constructor to allow creation of configured clients.</summary> + protected RouteGuideClient(ClientBaseConfiguration configuration) : base(configuration) { - var call = CreateCall(__Method_GetFeature, new CallOptions(headers, deadline, cancellationToken)); - return Calls.BlockingUnaryCall(call, request); } - public global::Routeguide.Feature GetFeature(global::Routeguide.Point request, CallOptions options) + + /// <summary> + /// A simple RPC. + /// + /// Obtains the feature at a given position. + /// + /// A feature with an empty name is returned if there's no feature at the given + /// position. + /// </summary> + public virtual global::Routeguide.Feature GetFeature(global::Routeguide.Point request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken)) { - var call = CreateCall(__Method_GetFeature, options); - return Calls.BlockingUnaryCall(call, request); + return GetFeature(request, new CallOptions(headers, deadline, cancellationToken)); } - public AsyncUnaryCall<global::Routeguide.Feature> GetFeatureAsync(global::Routeguide.Point request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken)) + /// <summary> + /// A simple RPC. + /// + /// Obtains the feature at a given position. + /// + /// A feature with an empty name is returned if there's no feature at the given + /// position. + /// </summary> + public virtual global::Routeguide.Feature GetFeature(global::Routeguide.Point request, CallOptions options) { - var call = CreateCall(__Method_GetFeature, new CallOptions(headers, deadline, cancellationToken)); - return Calls.AsyncUnaryCall(call, request); + return CallInvoker.BlockingUnaryCall(__Method_GetFeature, null, options, request); } - public AsyncUnaryCall<global::Routeguide.Feature> GetFeatureAsync(global::Routeguide.Point request, CallOptions options) + /// <summary> + /// A simple RPC. + /// + /// Obtains the feature at a given position. + /// + /// A feature with an empty name is returned if there's no feature at the given + /// position. + /// </summary> + public virtual AsyncUnaryCall<global::Routeguide.Feature> GetFeatureAsync(global::Routeguide.Point request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken)) { - var call = CreateCall(__Method_GetFeature, options); - return Calls.AsyncUnaryCall(call, request); + return GetFeatureAsync(request, new CallOptions(headers, deadline, cancellationToken)); } - public AsyncServerStreamingCall<global::Routeguide.Feature> ListFeatures(global::Routeguide.Rectangle request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken)) + /// <summary> + /// A simple RPC. + /// + /// Obtains the feature at a given position. + /// + /// A feature with an empty name is returned if there's no feature at the given + /// position. + /// </summary> + public virtual AsyncUnaryCall<global::Routeguide.Feature> GetFeatureAsync(global::Routeguide.Point request, CallOptions options) { - var call = CreateCall(__Method_ListFeatures, new CallOptions(headers, deadline, cancellationToken)); - return Calls.AsyncServerStreamingCall(call, request); + return CallInvoker.AsyncUnaryCall(__Method_GetFeature, null, options, request); } - public AsyncServerStreamingCall<global::Routeguide.Feature> ListFeatures(global::Routeguide.Rectangle request, CallOptions options) + /// <summary> + /// A server-to-client streaming RPC. + /// + /// Obtains the Features available within the given Rectangle. Results are + /// streamed rather than returned at once (e.g. in a response message with a + /// repeated field), as the rectangle may cover a large area and contain a + /// huge number of features. + /// </summary> + public virtual AsyncServerStreamingCall<global::Routeguide.Feature> ListFeatures(global::Routeguide.Rectangle request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken)) { - var call = CreateCall(__Method_ListFeatures, options); - return Calls.AsyncServerStreamingCall(call, request); + return ListFeatures(request, new CallOptions(headers, deadline, cancellationToken)); } - public AsyncClientStreamingCall<global::Routeguide.Point, global::Routeguide.RouteSummary> RecordRoute(Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken)) + /// <summary> + /// A server-to-client streaming RPC. + /// + /// Obtains the Features available within the given Rectangle. Results are + /// streamed rather than returned at once (e.g. in a response message with a + /// repeated field), as the rectangle may cover a large area and contain a + /// huge number of features. + /// </summary> + public virtual AsyncServerStreamingCall<global::Routeguide.Feature> ListFeatures(global::Routeguide.Rectangle request, CallOptions options) { - var call = CreateCall(__Method_RecordRoute, new CallOptions(headers, deadline, cancellationToken)); - return Calls.AsyncClientStreamingCall(call); + return CallInvoker.AsyncServerStreamingCall(__Method_ListFeatures, null, options, request); } - public AsyncClientStreamingCall<global::Routeguide.Point, global::Routeguide.RouteSummary> RecordRoute(CallOptions options) + /// <summary> + /// A client-to-server streaming RPC. + /// + /// Accepts a stream of Points on a route being traversed, returning a + /// RouteSummary when traversal is completed. + /// </summary> + public virtual AsyncClientStreamingCall<global::Routeguide.Point, global::Routeguide.RouteSummary> RecordRoute(Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken)) { - var call = CreateCall(__Method_RecordRoute, options); - return Calls.AsyncClientStreamingCall(call); + return RecordRoute(new CallOptions(headers, deadline, cancellationToken)); } - public AsyncDuplexStreamingCall<global::Routeguide.RouteNote, global::Routeguide.RouteNote> RouteChat(Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken)) + /// <summary> + /// A client-to-server streaming RPC. + /// + /// Accepts a stream of Points on a route being traversed, returning a + /// RouteSummary when traversal is completed. + /// </summary> + public virtual AsyncClientStreamingCall<global::Routeguide.Point, global::Routeguide.RouteSummary> RecordRoute(CallOptions options) { - var call = CreateCall(__Method_RouteChat, new CallOptions(headers, deadline, cancellationToken)); - return Calls.AsyncDuplexStreamingCall(call); + return CallInvoker.AsyncClientStreamingCall(__Method_RecordRoute, null, options); } - public AsyncDuplexStreamingCall<global::Routeguide.RouteNote, global::Routeguide.RouteNote> RouteChat(CallOptions options) + /// <summary> + /// A Bidirectional streaming RPC. + /// + /// Accepts a stream of RouteNotes sent while a route is being traversed, + /// while receiving other RouteNotes (e.g. from other users). + /// </summary> + public virtual AsyncDuplexStreamingCall<global::Routeguide.RouteNote, global::Routeguide.RouteNote> RouteChat(Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken)) { - var call = CreateCall(__Method_RouteChat, options); - return Calls.AsyncDuplexStreamingCall(call); + return RouteChat(new CallOptions(headers, deadline, cancellationToken)); } + /// <summary> + /// A Bidirectional streaming RPC. + /// + /// Accepts a stream of RouteNotes sent while a route is being traversed, + /// while receiving other RouteNotes (e.g. from other users). + /// </summary> + public virtual AsyncDuplexStreamingCall<global::Routeguide.RouteNote, global::Routeguide.RouteNote> RouteChat(CallOptions options) + { + return CallInvoker.AsyncDuplexStreamingCall(__Method_RouteChat, null, options); + } + protected override RouteGuideClient NewInstance(ClientBaseConfiguration configuration) + { + return new RouteGuideClient(configuration); + } + } + + /// <summary>Creates a new client for RouteGuide</summary> + public static RouteGuideClient NewClient(Channel channel) + { + return new RouteGuideClient(channel); } - // creates service definition that can be registered with a server + /// <summary>Creates service definition that can be registered with a server</summary> + #pragma warning disable 0618 public static ServerServiceDefinition BindService(IRouteGuide serviceImpl) + #pragma warning restore 0618 { return ServerServiceDefinition.CreateBuilder(__ServiceName) .AddMethod(__Method_GetFeature, serviceImpl.GetFeature) @@ -144,10 +420,16 @@ namespace Routeguide { .AddMethod(__Method_RouteChat, serviceImpl.RouteChat).Build(); } - // creates a new client - public static RouteGuideClient NewClient(Channel channel) + /// <summary>Creates service definition that can be registered with a server</summary> + #pragma warning disable 0618 + public static ServerServiceDefinition BindService(RouteGuideBase serviceImpl) + #pragma warning restore 0618 { - return new RouteGuideClient(channel); + return ServerServiceDefinition.CreateBuilder(__ServiceName) + .AddMethod(__Method_GetFeature, serviceImpl.GetFeature) + .AddMethod(__Method_ListFeatures, serviceImpl.ListFeatures) + .AddMethod(__Method_RecordRoute, serviceImpl.RecordRoute) + .AddMethod(__Method_RouteChat, serviceImpl.RouteChat).Build(); } } diff --git a/examples/csharp/route_guide/RouteGuide/packages.config b/examples/csharp/route_guide/RouteGuide/packages.config index c79aef11655673c53fdc531e38bbb409e5740f5a..b16bfedd310422355de704a7cadd4a363f682e4c 100644 --- a/examples/csharp/route_guide/RouteGuide/packages.config +++ b/examples/csharp/route_guide/RouteGuide/packages.config @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <packages> <package id="Google.Protobuf" version="3.0.0-beta2" targetFramework="net45" /> - <package id="Grpc" version="0.13.1" targetFramework="net45" /> - <package id="Grpc.Core" version="0.13.1" targetFramework="net45" /> - <package id="grpc.native.csharp" version="0.13.1" targetFramework="net45" /> + <package id="Grpc" version="0.14.0" targetFramework="net45" /> + <package id="Grpc.Core" version="0.14.0" targetFramework="net45" /> <package id="Ix-Async" version="1.2.5" targetFramework="net45" /> <package id="Newtonsoft.Json" version="7.0.1" targetFramework="net45" /> </packages> \ No newline at end of file diff --git a/examples/csharp/route_guide/RouteGuideClient/Program.cs b/examples/csharp/route_guide/RouteGuideClient/Program.cs index c561a9f7aacfc6340ee13e09e075792c51f95d46..ee51fbe8e04776ee67e1b54249257fdd7b3561a9 100644 --- a/examples/csharp/route_guide/RouteGuideClient/Program.cs +++ b/examples/csharp/route_guide/RouteGuideClient/Program.cs @@ -43,9 +43,9 @@ namespace Routeguide /// </summary> public class RouteGuideClient { - readonly RouteGuide.IRouteGuideClient client; + readonly RouteGuide.RouteGuideClient client; - public RouteGuideClient(RouteGuide.IRouteGuideClient client) + public RouteGuideClient(RouteGuide.RouteGuideClient client) { this.client = client; } diff --git a/examples/csharp/route_guide/RouteGuideClient/RouteGuideClient.csproj b/examples/csharp/route_guide/RouteGuideClient/RouteGuideClient.csproj index 3f7c4d0900bcc426cddc19df905f03dc3b3644ba..c3700f65c6de1eb9abb4ad5d7befcde3197cdc04 100644 --- a/examples/csharp/route_guide/RouteGuideClient/RouteGuideClient.csproj +++ b/examples/csharp/route_guide/RouteGuideClient/RouteGuideClient.csproj @@ -11,7 +11,7 @@ <AssemblyName>RouteGuideClient</AssemblyName> <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> <FileAlignment>512</FileAlignment> - <NuGetPackageImportStamp>2a1dd0a1</NuGetPackageImportStamp> + <NuGetPackageImportStamp>8ef088f0</NuGetPackageImportStamp> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <PlatformTarget>AnyCPU</PlatformTarget> @@ -37,9 +37,9 @@ <SpecificVersion>False</SpecificVersion> <HintPath>..\packages\Google.Protobuf.3.0.0-beta2\lib\portable-net45+netcore45+wpa81+wp8\Google.Protobuf.dll</HintPath> </Reference> - <Reference Include="Grpc.Core, Version=0.13.1.0, Culture=neutral, PublicKeyToken=d754f35622e28bad, processorArchitecture=MSIL"> + <Reference Include="Grpc.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d754f35622e28bad, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> - <HintPath>..\packages\Grpc.Core.0.13.1\lib\net45\Grpc.Core.dll</HintPath> + <HintPath>..\packages\Grpc.Core.0.14.0\lib\net45\Grpc.Core.dll</HintPath> </Reference> <Reference Include="Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> @@ -71,12 +71,12 @@ </ProjectReference> </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> - <Import Project="..\packages\grpc.native.csharp.0.13.1\build\portable-net45+netcore45+wpa81+wp8\grpc.native.csharp.targets" Condition="Exists('..\packages\grpc.native.csharp.0.13.1\build\portable-net45+netcore45+wpa81+wp8\grpc.native.csharp.targets')" /> + <Import Project="..\packages\Grpc.Core.0.14.0\build\net45\Grpc.Core.targets" Condition="Exists('..\packages\Grpc.Core.0.14.0\build\net45\Grpc.Core.targets')" /> <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> <PropertyGroup> <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> </PropertyGroup> - <Error Condition="!Exists('..\packages\grpc.native.csharp.0.13.1\build\portable-net45+netcore45+wpa81+wp8\grpc.native.csharp.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.native.csharp.0.13.1\build\portable-net45+netcore45+wpa81+wp8\grpc.native.csharp.targets'))" /> + <Error Condition="!Exists('..\packages\Grpc.Core.0.14.0\build\net45\Grpc.Core.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Grpc.Core.0.14.0\build\net45\Grpc.Core.targets'))" /> </Target> <!-- To modify your build process, add your task inside one of the targets below and uncomment it. Other similar extension points exist, see Microsoft.Common.targets. diff --git a/examples/csharp/route_guide/RouteGuideClient/packages.config b/examples/csharp/route_guide/RouteGuideClient/packages.config index c79aef11655673c53fdc531e38bbb409e5740f5a..b16bfedd310422355de704a7cadd4a363f682e4c 100644 --- a/examples/csharp/route_guide/RouteGuideClient/packages.config +++ b/examples/csharp/route_guide/RouteGuideClient/packages.config @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <packages> <package id="Google.Protobuf" version="3.0.0-beta2" targetFramework="net45" /> - <package id="Grpc" version="0.13.1" targetFramework="net45" /> - <package id="Grpc.Core" version="0.13.1" targetFramework="net45" /> - <package id="grpc.native.csharp" version="0.13.1" targetFramework="net45" /> + <package id="Grpc" version="0.14.0" targetFramework="net45" /> + <package id="Grpc.Core" version="0.14.0" targetFramework="net45" /> <package id="Ix-Async" version="1.2.5" targetFramework="net45" /> <package id="Newtonsoft.Json" version="7.0.1" targetFramework="net45" /> </packages> \ No newline at end of file diff --git a/examples/csharp/route_guide/RouteGuideServer/RouteGuideImpl.cs b/examples/csharp/route_guide/RouteGuideServer/RouteGuideImpl.cs index 20784fdcf3d0a997d5d00b15643b30795219a676..7a466e7483a2919ee8831d9780987341e048493c 100644 --- a/examples/csharp/route_guide/RouteGuideServer/RouteGuideImpl.cs +++ b/examples/csharp/route_guide/RouteGuideServer/RouteGuideImpl.cs @@ -35,6 +35,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; +using Grpc.Core; using Grpc.Core.Utils; namespace Routeguide @@ -42,11 +43,11 @@ namespace Routeguide /// <summary> /// Example implementation of RouteGuide server. /// </summary> - public class RouteGuideImpl : RouteGuide.IRouteGuide + public class RouteGuideImpl : RouteGuide.RouteGuideBase { readonly List<Feature> features; readonly object myLock = new object(); - readonly Dictionary<Point, List<RouteNote>> routeNotes = new Dictionary<Point, List<RouteNote>>(); + readonly Dictionary<Point, List<RouteNote>> routeNotes = new Dictionary<Point, List<RouteNote>>(); public RouteGuideImpl(List<Feature> features) { @@ -57,7 +58,7 @@ namespace Routeguide /// Gets the feature at the requested point. If no feature at that location /// exists, an unnammed feature is returned at the provided location. /// </summary> - public Task<Feature> GetFeature(Point request, Grpc.Core.ServerCallContext context) + public override Task<Feature> GetFeature(Point request, ServerCallContext context) { return Task.FromResult(CheckFeature(request)); } @@ -65,7 +66,7 @@ namespace Routeguide /// <summary> /// Gets all features contained within the given bounding rectangle. /// </summary> - public async Task ListFeatures(Rectangle request, Grpc.Core.IServerStreamWriter<Feature> responseStream, Grpc.Core.ServerCallContext context) + public override async Task ListFeatures(Rectangle request, IServerStreamWriter<Feature> responseStream, ServerCallContext context) { var responses = features.FindAll( (feature) => feature.Exists() && request.Contains(feature.Location) ); foreach (var response in responses) @@ -78,7 +79,7 @@ namespace Routeguide /// Gets a stream of points, and responds with statistics about the "trip": number of points, /// number of known features visited, total distance traveled, and total time spent. /// </summary> - public async Task<RouteSummary> RecordRoute(Grpc.Core.IAsyncStreamReader<Point> requestStream, Grpc.Core.ServerCallContext context) + public override async Task<RouteSummary> RecordRoute(IAsyncStreamReader<Point> requestStream, ServerCallContext context) { int pointCount = 0; int featureCount = 0; @@ -117,7 +118,7 @@ namespace Routeguide /// Receives a stream of message/location pairs, and responds with a stream of all previous /// messages at each of those locations. /// </summary> - public async Task RouteChat(Grpc.Core.IAsyncStreamReader<RouteNote> requestStream, Grpc.Core.IServerStreamWriter<RouteNote> responseStream, Grpc.Core.ServerCallContext context) + public override async Task RouteChat(IAsyncStreamReader<RouteNote> requestStream, IServerStreamWriter<RouteNote> responseStream, ServerCallContext context) { while (await requestStream.MoveNext()) { diff --git a/examples/csharp/route_guide/RouteGuideServer/RouteGuideServer.csproj b/examples/csharp/route_guide/RouteGuideServer/RouteGuideServer.csproj index 599b12fbf7af10000683877400509a4bf2142a63..e7ecbc150f1d7509099ecad31312621f012fab88 100644 --- a/examples/csharp/route_guide/RouteGuideServer/RouteGuideServer.csproj +++ b/examples/csharp/route_guide/RouteGuideServer/RouteGuideServer.csproj @@ -11,7 +11,7 @@ <AssemblyName>RouteGuideServer</AssemblyName> <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> <FileAlignment>512</FileAlignment> - <NuGetPackageImportStamp>164e03eb</NuGetPackageImportStamp> + <NuGetPackageImportStamp>d5246467</NuGetPackageImportStamp> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <PlatformTarget>AnyCPU</PlatformTarget> @@ -37,9 +37,9 @@ <SpecificVersion>False</SpecificVersion> <HintPath>..\packages\Google.Protobuf.3.0.0-beta2\lib\portable-net45+netcore45+wpa81+wp8\Google.Protobuf.dll</HintPath> </Reference> - <Reference Include="Grpc.Core, Version=0.13.1.0, Culture=neutral, PublicKeyToken=d754f35622e28bad, processorArchitecture=MSIL"> + <Reference Include="Grpc.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d754f35622e28bad, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> - <HintPath>..\packages\Grpc.Core.0.13.1\lib\net45\Grpc.Core.dll</HintPath> + <HintPath>..\packages\Grpc.Core.0.14.0\lib\net45\Grpc.Core.dll</HintPath> </Reference> <Reference Include="Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> @@ -72,12 +72,12 @@ </ProjectReference> </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> - <Import Project="..\packages\grpc.native.csharp.0.13.1\build\portable-net45+netcore45+wpa81+wp8\grpc.native.csharp.targets" Condition="Exists('..\packages\grpc.native.csharp.0.13.1\build\portable-net45+netcore45+wpa81+wp8\grpc.native.csharp.targets')" /> + <Import Project="..\packages\Grpc.Core.0.14.0\build\net45\Grpc.Core.targets" Condition="Exists('..\packages\Grpc.Core.0.14.0\build\net45\Grpc.Core.targets')" /> <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> <PropertyGroup> <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> </PropertyGroup> - <Error Condition="!Exists('..\packages\grpc.native.csharp.0.13.1\build\portable-net45+netcore45+wpa81+wp8\grpc.native.csharp.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.native.csharp.0.13.1\build\portable-net45+netcore45+wpa81+wp8\grpc.native.csharp.targets'))" /> + <Error Condition="!Exists('..\packages\Grpc.Core.0.14.0\build\net45\Grpc.Core.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Grpc.Core.0.14.0\build\net45\Grpc.Core.targets'))" /> </Target> <!-- To modify your build process, add your task inside one of the targets below and uncomment it. Other similar extension points exist, see Microsoft.Common.targets. diff --git a/examples/csharp/route_guide/RouteGuideServer/packages.config b/examples/csharp/route_guide/RouteGuideServer/packages.config index c79aef11655673c53fdc531e38bbb409e5740f5a..b16bfedd310422355de704a7cadd4a363f682e4c 100644 --- a/examples/csharp/route_guide/RouteGuideServer/packages.config +++ b/examples/csharp/route_guide/RouteGuideServer/packages.config @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <packages> <package id="Google.Protobuf" version="3.0.0-beta2" targetFramework="net45" /> - <package id="Grpc" version="0.13.1" targetFramework="net45" /> - <package id="Grpc.Core" version="0.13.1" targetFramework="net45" /> - <package id="grpc.native.csharp" version="0.13.1" targetFramework="net45" /> + <package id="Grpc" version="0.14.0" targetFramework="net45" /> + <package id="Grpc.Core" version="0.14.0" targetFramework="net45" /> <package id="Ix-Async" version="1.2.5" targetFramework="net45" /> <package id="Newtonsoft.Json" version="7.0.1" targetFramework="net45" /> </packages> \ No newline at end of file diff --git a/examples/csharp/route_guide/generate_protos.bat b/examples/csharp/route_guide/generate_protos.bat index 12be52c6806a36051ad77f2b90ca11e50ca3c0da..72c5ba3e99f9f8e7cf45f0b9c0910013cf5e58a5 100644 --- a/examples/csharp/route_guide/generate_protos.bat +++ b/examples/csharp/route_guide/generate_protos.bat @@ -1,3 +1,32 @@ +@rem Copyright 2016, Google Inc. +@rem All rights reserved. +@rem +@rem Redistribution and use in source and binary forms, with or without +@rem modification, are permitted provided that the following conditions are +@rem met: +@rem +@rem * Redistributions of source code must retain the above copyright +@rem notice, this list of conditions and the following disclaimer. +@rem * Redistributions in binary form must reproduce the above +@rem copyright notice, this list of conditions and the following disclaimer +@rem in the documentation and/or other materials provided with the +@rem distribution. +@rem * Neither the name of Google Inc. nor the names of its +@rem contributors may be used to endorse or promote products derived from +@rem this software without specific prior written permission. +@rem +@rem THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +@rem "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +@rem LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +@rem A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +@rem OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +@rem SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +@rem LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +@rem DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +@rem THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +@rem (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +@rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + @rem Generate the C# code for .proto files setlocal @@ -5,7 +34,7 @@ setlocal @rem enter this directory cd /d %~dp0 -set TOOLS_PATH=packages\Grpc.Tools.0.13.1\tools\windows_x86 +set TOOLS_PATH=packages\Grpc.Tools.0.14.0\tools\windows_x86 %TOOLS_PATH%\protoc.exe -I../../protos --csharp_out RouteGuide ../../protos/route_guide.proto --grpc_out RouteGuide --plugin=protoc-gen-grpc=%TOOLS_PATH%\grpc_csharp_plugin.exe diff --git a/examples/node/README.md b/examples/node/README.md index 28878833ce6684cede8ae9a3441ca4a5378ce2fb..59fb4a17f59139b3ea117f15f9e9213b1815e3f4 100644 --- a/examples/node/README.md +++ b/examples/node/README.md @@ -22,18 +22,24 @@ INSTALL TRY IT! ------- +There are two ways to generate the code needed to work with protocol buffers in Node.js - one approach uses [Protobuf.js](https://github.com/dcodeIO/ProtoBuf.js/) to dynamically generate the code at runtime, the other uses code statically generated using the protocol buffer compiler `protoc`. The examples behave identically, and either server can be used with either client. + - Run the server ```sh $ # from this directory - $ node ./greeter_server.js & + $ node ./dynamic_codegen/greeter_server.js & + $ # OR + $ node ./static_codegen/greeter_server.js & ``` - Run the client ```sh $ # from this directory - $ node ./greeter_client.js + $ node ./dynamic_codegen/greeter_client.js + $ # OR + $ node ./dynamic_codegen/greeter_client.js ``` TUTORIAL diff --git a/examples/node/dynamic_codegen/README.md b/examples/node/dynamic_codegen/README.md new file mode 100644 index 0000000000000000000000000000000000000000..1a6ec17a3eecf88b03235092dbc718bb344acd59 --- /dev/null +++ b/examples/node/dynamic_codegen/README.md @@ -0,0 +1 @@ +This is the dynamic code generation variant of the Node examples. Code in these examples is generated at runtime using Protobuf.js. diff --git a/examples/node/greeter_client.js b/examples/node/dynamic_codegen/greeter_client.js similarity index 96% rename from examples/node/greeter_client.js rename to examples/node/dynamic_codegen/greeter_client.js index 2820acbbb719e9e4c1d8c4891010cd3aec277fa8..e24fb07f4c62d914ef25e35e789a5eb93727f986 100644 --- a/examples/node/greeter_client.js +++ b/examples/node/dynamic_codegen/greeter_client.js @@ -31,7 +31,7 @@ * */ -var PROTO_PATH = __dirname + '/../protos/helloworld.proto'; +var PROTO_PATH = __dirname + '/../../protos/helloworld.proto'; var grpc = require('grpc'); var hello_proto = grpc.load(PROTO_PATH).helloworld; diff --git a/examples/node/greeter_server.js b/examples/node/dynamic_codegen/greeter_server.js similarity index 97% rename from examples/node/greeter_server.js rename to examples/node/dynamic_codegen/greeter_server.js index e7ad51f600989d080624c0f95998f8aaa4fccec6..aa43e4c6728e2db188365013ce4fb402350734b5 100644 --- a/examples/node/greeter_server.js +++ b/examples/node/dynamic_codegen/greeter_server.js @@ -31,7 +31,7 @@ * */ -var PROTO_PATH = __dirname + '/../protos/helloworld.proto'; +var PROTO_PATH = __dirname + '/../../protos/helloworld.proto'; var grpc = require('grpc'); var hello_proto = grpc.load(PROTO_PATH).helloworld; diff --git a/examples/node/route_guide/README.md b/examples/node/dynamic_codegen/route_guide/README.md similarity index 100% rename from examples/node/route_guide/README.md rename to examples/node/dynamic_codegen/route_guide/README.md diff --git a/examples/node/route_guide/route_guide_client.js b/examples/node/dynamic_codegen/route_guide/route_guide_client.js similarity index 99% rename from examples/node/route_guide/route_guide_client.js rename to examples/node/dynamic_codegen/route_guide/route_guide_client.js index fd05a59b63a4493b4696237585f437c70538dfd8..775b9addbfc84ad45726265918c26d744a472ed9 100644 --- a/examples/node/route_guide/route_guide_client.js +++ b/examples/node/dynamic_codegen/route_guide/route_guide_client.js @@ -31,7 +31,7 @@ * */ -var PROTO_PATH = __dirname + '/../../protos/route_guide.proto'; +var PROTO_PATH = __dirname + '/../../../protos/route_guide.proto'; var async = require('async'); var fs = require('fs'); diff --git a/examples/node/route_guide/route_guide_db.json b/examples/node/dynamic_codegen/route_guide/route_guide_db.json similarity index 100% rename from examples/node/route_guide/route_guide_db.json rename to examples/node/dynamic_codegen/route_guide/route_guide_db.json diff --git a/examples/node/route_guide/route_guide_server.js b/examples/node/dynamic_codegen/route_guide/route_guide_server.js similarity index 99% rename from examples/node/route_guide/route_guide_server.js rename to examples/node/dynamic_codegen/route_guide/route_guide_server.js index 6c01fac2465be1add0a2cb57b0b017008d5c4b4c..6d59348cc925659e4d0d9e7664b72d7289fe19ab 100644 --- a/examples/node/route_guide/route_guide_server.js +++ b/examples/node/dynamic_codegen/route_guide/route_guide_server.js @@ -31,7 +31,7 @@ * */ -var PROTO_PATH = __dirname + '/../../protos/route_guide.proto'; +var PROTO_PATH = __dirname + '/../../../protos/route_guide.proto'; var fs = require('fs'); var parseArgs = require('minimist'); diff --git a/examples/node/package.json b/examples/node/package.json index d135df2464b1aa1fbcb656668c3332348daddfe8..2cae031175e956e8fe44c63a1854780214ff8ceb 100644 --- a/examples/node/package.json +++ b/examples/node/package.json @@ -3,7 +3,8 @@ "version": "0.1.0", "dependencies": { "async": "^1.5.2", - "grpc": "0.13.0", + "google-protobuf": "^3.0.0-alpha.5", + "grpc": "^0.14.0", "lodash": "^4.6.1", "minimist": "^1.2.0" } diff --git a/examples/node/static_codegen/README.md b/examples/node/static_codegen/README.md new file mode 100644 index 0000000000000000000000000000000000000000..fc97d34a3868a449ef35bace323af4a9d434ce06 --- /dev/null +++ b/examples/node/static_codegen/README.md @@ -0,0 +1,7 @@ +This is the static code generation variant of the Node examples. Code in these examples is pre-generated using protoc and the Node gRPC protoc plugin, and the generated code can be found in various `*_pb.js` files. The command line sequence for generating those files is as follows (assuming that `protoc` and `grpc_node_plugin` are present, and starting in the base directory of this package): + +```sh +cd ../protos +protoc --js_out=import_style=commonjs,binary:../node/static_codegen/ --grpc_out=../node/static_codegen --plugin=protoc-gen-grpc=grpc_node_plugin helloworld.proto +protoc --js_out=import_style=commonjs,binary:../node/static_codegen/route_guide/ --grpc_out=../node/static_codegen/route_guide/ --plugin=protoc-gen-grpc=grpc_node_plugin route_guide.proto +``` diff --git a/examples/node/static_codegen/greeter_client.js b/examples/node/static_codegen/greeter_client.js new file mode 100644 index 0000000000000000000000000000000000000000..da80cf34d8e07de8d183e880a7d7bfc3dce92698 --- /dev/null +++ b/examples/node/static_codegen/greeter_client.js @@ -0,0 +1,55 @@ +/* + * + * 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. + * + */ + +var messages = require('./helloworld_pb'); +var services = require('./helloworld_grpc_pb'); + +var grpc = require('grpc'); + +function main() { + var client = new services.GreeterClient('localhost:50051', + grpc.credentials.createInsecure()); + var user; + if (process.argv.length >= 3) { + user = process.argv[2]; + } else { + user = 'world'; + } + var request = new messages.HelloRequest(); + request.setName(user); + client.sayHello(request, function(err, response) { + console.log('Greeting:', response.getMessage()); + }); +} + +main(); diff --git a/examples/node/static_codegen/greeter_server.js b/examples/node/static_codegen/greeter_server.js new file mode 100644 index 0000000000000000000000000000000000000000..a1591b89fa6f20150f0e9f59d04a4c06a4feaf01 --- /dev/null +++ b/examples/node/static_codegen/greeter_server.js @@ -0,0 +1,59 @@ +/* + * + * 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. + * + */ + +var messages = require('./helloworld_pb'); +var services = require('./helloworld_grpc_pb'); + +var grpc = require('grpc'); + +/** + * Implements the SayHello RPC method. + */ +function sayHello(call, callback) { + var reply = new messages.HelloReply(); + reply.setMessage('Hello ' + call.request.getName()); + callback(null, reply); +} + +/** + * Starts an RPC server that receives requests for the Greeter service at the + * sample server port + */ +function main() { + var server = new grpc.Server(); + server.addService(services.GreeterService, {sayHello: sayHello}); + server.bind('0.0.0.0:50051', grpc.ServerCredentials.createInsecure()); + server.start(); +} + +main(); diff --git a/examples/node/static_codegen/helloworld_grpc_pb.js b/examples/node/static_codegen/helloworld_grpc_pb.js new file mode 100644 index 0000000000000000000000000000000000000000..846f8b6bf575f2f134e05fa36f73e98f57553e08 --- /dev/null +++ b/examples/node/static_codegen/helloworld_grpc_pb.js @@ -0,0 +1,44 @@ +// GENERATED CODE -- DO NOT EDIT! + +'use strict'; +var grpc = require('grpc'); +var helloworld_pb = require('./helloworld_pb.js'); + +function serialize_HelloReply(arg) { + if (!(arg instanceof helloworld_pb.HelloReply)) { + throw new Error('Expected argument of type HelloReply'); + } + return new Buffer(arg.serializeBinary()); +} + +function deserialize_HelloReply(buffer_arg) { + return helloworld_pb.HelloReply.deserializeBinary(new Uint8Array(buffer_arg)); +} + +function serialize_HelloRequest(arg) { + if (!(arg instanceof helloworld_pb.HelloRequest)) { + throw new Error('Expected argument of type HelloRequest'); + } + return new Buffer(arg.serializeBinary()); +} + +function deserialize_HelloRequest(buffer_arg) { + return helloworld_pb.HelloRequest.deserializeBinary(new Uint8Array(buffer_arg)); +} + + +var GreeterService = exports.GreeterService = { + sayHello: { + path: '/helloworld.Greeter/SayHello', + requestStream: false, + responseStream: false, + requestType: helloworld_pb.HelloRequest, + responseType: helloworld_pb.HelloReply, + requestSerialize: serialize_HelloRequest, + requestDeserialize: deserialize_HelloRequest, + responseSerialize: serialize_HelloReply, + responseDeserialize: deserialize_HelloReply, + }, +}; + +exports.GreeterClient = grpc.makeGenericClientConstructor(GreeterService); diff --git a/examples/node/static_codegen/helloworld_pb.js b/examples/node/static_codegen/helloworld_pb.js new file mode 100644 index 0000000000000000000000000000000000000000..6405bd90f10444bc4aa2141154801a18de8d584a --- /dev/null +++ b/examples/node/static_codegen/helloworld_pb.js @@ -0,0 +1,332 @@ +/** + * @fileoverview + * @enhanceable + * @public + */ +// GENERATED CODE -- DO NOT EDIT! + +var jspb = require('google-protobuf'); +var goog = jspb; +var global = Function('return this')(); + +goog.exportSymbol('proto.helloworld.HelloReply', null, global); +goog.exportSymbol('proto.helloworld.HelloRequest', null, global); + +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.helloworld.HelloRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.helloworld.HelloRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + proto.helloworld.HelloRequest.displayName = 'proto.helloworld.HelloRequest'; +} + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto suitable for use in Soy templates. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. + * @param {boolean=} opt_includeInstance Whether to include the JSPB instance + * for transitional soy proto support: http://goto/soy-param-migration + * @return {!Object} + */ +proto.helloworld.HelloRequest.prototype.toObject = function(opt_includeInstance) { + return proto.helloworld.HelloRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Whether to include the JSPB + * instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.helloworld.HelloRequest} msg The msg instance to transform. + * @return {!Object} + */ +proto.helloworld.HelloRequest.toObject = function(includeInstance, msg) { + var f, obj = { + name: msg.getName() + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.helloworld.HelloRequest} + */ +proto.helloworld.HelloRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.helloworld.HelloRequest; + return proto.helloworld.HelloRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.helloworld.HelloRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.helloworld.HelloRequest} + */ +proto.helloworld.HelloRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setName(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Class method variant: serializes the given message to binary data + * (in protobuf wire format), writing to the given BinaryWriter. + * @param {!proto.helloworld.HelloRequest} message + * @param {!jspb.BinaryWriter} writer + */ +proto.helloworld.HelloRequest.serializeBinaryToWriter = function(message, writer) { + message.serializeBinaryToWriter(writer); +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.helloworld.HelloRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + this.serializeBinaryToWriter(writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the message to binary data (in protobuf wire format), + * writing to the given BinaryWriter. + * @param {!jspb.BinaryWriter} writer + */ +proto.helloworld.HelloRequest.prototype.serializeBinaryToWriter = function (writer) { + var f = undefined; + f = this.getName(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } +}; + + +/** + * Creates a deep clone of this proto. No data is shared with the original. + * @return {!proto.helloworld.HelloRequest} The clone. + */ +proto.helloworld.HelloRequest.prototype.cloneMessage = function() { + return /** @type {!proto.helloworld.HelloRequest} */ (jspb.Message.cloneMessage(this)); +}; + + +/** + * optional string name = 1; + * @return {string} + */ +proto.helloworld.HelloRequest.prototype.getName = function() { + return /** @type {string} */ (jspb.Message.getFieldProto3(this, 1, "")); +}; + + +/** @param {string} value */ +proto.helloworld.HelloRequest.prototype.setName = function(value) { + jspb.Message.setField(this, 1, value); +}; + + + +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.helloworld.HelloReply = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.helloworld.HelloReply, jspb.Message); +if (goog.DEBUG && !COMPILED) { + proto.helloworld.HelloReply.displayName = 'proto.helloworld.HelloReply'; +} + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto suitable for use in Soy templates. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. + * @param {boolean=} opt_includeInstance Whether to include the JSPB instance + * for transitional soy proto support: http://goto/soy-param-migration + * @return {!Object} + */ +proto.helloworld.HelloReply.prototype.toObject = function(opt_includeInstance) { + return proto.helloworld.HelloReply.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Whether to include the JSPB + * instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.helloworld.HelloReply} msg The msg instance to transform. + * @return {!Object} + */ +proto.helloworld.HelloReply.toObject = function(includeInstance, msg) { + var f, obj = { + message: msg.getMessage() + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.helloworld.HelloReply} + */ +proto.helloworld.HelloReply.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.helloworld.HelloReply; + return proto.helloworld.HelloReply.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.helloworld.HelloReply} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.helloworld.HelloReply} + */ +proto.helloworld.HelloReply.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setMessage(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Class method variant: serializes the given message to binary data + * (in protobuf wire format), writing to the given BinaryWriter. + * @param {!proto.helloworld.HelloReply} message + * @param {!jspb.BinaryWriter} writer + */ +proto.helloworld.HelloReply.serializeBinaryToWriter = function(message, writer) { + message.serializeBinaryToWriter(writer); +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.helloworld.HelloReply.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + this.serializeBinaryToWriter(writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the message to binary data (in protobuf wire format), + * writing to the given BinaryWriter. + * @param {!jspb.BinaryWriter} writer + */ +proto.helloworld.HelloReply.prototype.serializeBinaryToWriter = function (writer) { + var f = undefined; + f = this.getMessage(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } +}; + + +/** + * Creates a deep clone of this proto. No data is shared with the original. + * @return {!proto.helloworld.HelloReply} The clone. + */ +proto.helloworld.HelloReply.prototype.cloneMessage = function() { + return /** @type {!proto.helloworld.HelloReply} */ (jspb.Message.cloneMessage(this)); +}; + + +/** + * optional string message = 1; + * @return {string} + */ +proto.helloworld.HelloReply.prototype.getMessage = function() { + return /** @type {string} */ (jspb.Message.getFieldProto3(this, 1, "")); +}; + + +/** @param {string} value */ +proto.helloworld.HelloReply.prototype.setMessage = function(value) { + jspb.Message.setField(this, 1, value); +}; + + +goog.object.extend(exports, proto.helloworld); diff --git a/examples/node/static_codegen/route_guide/README.md b/examples/node/static_codegen/route_guide/README.md new file mode 100644 index 0000000000000000000000000000000000000000..22bcf789863df05d58b03b5cc1cf19ed3a32bf7e --- /dev/null +++ b/examples/node/static_codegen/route_guide/README.md @@ -0,0 +1,5 @@ +#gRPC Basics: Node.js sample code + +The files in this folder are the samples used in [gRPC Basics: Node.js][], a detailed tutorial for using gRPC in Node.js. + +[gRPC Basics: Node.js]:http://www.grpc.io/docs/tutorials/basic/node.html diff --git a/examples/node/static_codegen/route_guide/route_guide_client.js b/examples/node/static_codegen/route_guide/route_guide_client.js new file mode 100644 index 0000000000000000000000000000000000000000..ecde78616b5f299777900137ff3121781a79aff7 --- /dev/null +++ b/examples/node/static_codegen/route_guide/route_guide_client.js @@ -0,0 +1,247 @@ +/* + * + * 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. + * + */ + +var messages = require('./route_guide_pb'); +var services = require('./route_guide_grpc_pb'); + +var async = require('async'); +var fs = require('fs'); +var parseArgs = require('minimist'); +var path = require('path'); +var _ = require('lodash'); +var grpc = require('grpc'); + +var client = new services.RouteGuideClient('localhost:50051', + grpc.credentials.createInsecure()); + +var COORD_FACTOR = 1e7; + +/** + * Run the getFeature demo. Calls getFeature with a point known to have a + * feature and a point known not to have a feature. + * @param {function} callback Called when this demo is complete + */ +function runGetFeature(callback) { + var next = _.after(2, callback); + function featureCallback(error, feature) { + if (error) { + callback(error); + } + var latitude = feature.getLocation().getLatitude(); + var longitude = feature.getLocation().getLongitude(); + if (feature.getName() === '') { + console.log('Found no feature at ' + + latitude/COORD_FACTOR + ', ' + longitude/COORD_FACTOR); + } else { + console.log('Found feature called "' + feature.getName() + '" at ' + + latitude/COORD_FACTOR + ', ' + longitude/COORD_FACTOR); + } + next(); + } + var point1 = new messages.Point(); + point1.setLatitude(409146138); + point1.setLongitude(-746188906); + var point2 = new messages.Point(); + point2.setLatitude(0); + point2.setLongitude(0); + client.getFeature(point1, featureCallback); + client.getFeature(point2, featureCallback); +} + +/** + * Run the listFeatures demo. Calls listFeatures with a rectangle containing all + * of the features in the pre-generated database. Prints each response as it + * comes in. + * @param {function} callback Called when this demo is complete + */ +function runListFeatures(callback) { + var rect = new messages.Rectangle(); + var lo = new messages.Point(); + lo.setLatitude(400000000); + lo.setLongitude(-750000000); + rect.setLo(lo); + var hi = new messages.Point(); + hi.setLatitude(420000000); + hi.setLongitude(-730000000); + rect.setHi(hi); + console.log('Looking for features between 40, -75 and 42, -73'); + var call = client.listFeatures(rect); + call.on('data', function(feature) { + console.log('Found feature called "' + feature.getName() + '" at ' + + feature.getLocation().getLatitude()/COORD_FACTOR + ', ' + + feature.getLocation().getLongitude()/COORD_FACTOR); + }); + call.on('end', callback); +} + +/** + * Run the recordRoute demo. Sends several randomly chosen points from the + * pre-generated feature database with a variable delay in between. Prints the + * statistics when they are sent from the server. + * @param {function} callback Called when this demo is complete + */ +function runRecordRoute(callback) { + var argv = parseArgs(process.argv, { + string: 'db_path' + }); + fs.readFile(path.resolve(argv.db_path), function(err, data) { + if (err) callback(err); + // Transform the loaded features to Feature objects + var feature_list = _.map(JSON.parse(data), function(value) { + var feature = new messages.Feature(); + feature.setName(value.name); + var location = new messages.Point(); + location.setLatitude(value.location.latitude); + location.setLongitude(value.location.longitude); + feature.setLocation(location); + return feature; + }); + + var num_points = 10; + var call = client.recordRoute(function(error, stats) { + if (error) { + callback(error); + } + console.log('Finished trip with', stats.getPointCount(), 'points'); + console.log('Passed', stats.getFeatureCount(), 'features'); + console.log('Travelled', stats.getDistance(), 'meters'); + console.log('It took', stats.getElapsedTime(), 'seconds'); + callback(); + }); + /** + * Constructs a function that asynchronously sends the given point and then + * delays sending its callback + * @param {messages.Point} location The point to send + * @return {function(function)} The function that sends the point + */ + function pointSender(location) { + /** + * Sends the point, then calls the callback after a delay + * @param {function} callback Called when complete + */ + return function(callback) { + console.log('Visiting point ' + location.getLatitude()/COORD_FACTOR + + ', ' + location.getLongitude()/COORD_FACTOR); + call.write(location); + _.delay(callback, _.random(500, 1500)); + }; + } + var point_senders = []; + for (var i = 0; i < num_points; i++) { + var rand_point = feature_list[_.random(0, feature_list.length - 1)]; + point_senders[i] = pointSender(rand_point.getLocation()); + } + async.series(point_senders, function() { + call.end(); + }); + }); +} + +/** + * Run the routeChat demo. Send some chat messages, and print any chat messages + * that are sent from the server. + * @param {function} callback Called when the demo is complete + */ +function runRouteChat(callback) { + var call = client.routeChat(); + call.on('data', function(note) { + console.log('Got message "' + note.getMessage() + '" at ' + + note.getLocation().getLatitude() + ', ' + + note.getLocation().getLongitude()); + }); + + call.on('end', callback); + + var notes = [{ + location: { + latitude: 0, + longitude: 0 + }, + message: 'First message' + }, { + location: { + latitude: 0, + longitude: 1 + }, + message: 'Second message' + }, { + location: { + latitude: 1, + longitude: 0 + }, + message: 'Third message' + }, { + location: { + latitude: 0, + longitude: 0 + }, + message: 'Fourth message' + }]; + for (var i = 0; i < notes.length; i++) { + var note = notes[i]; + console.log('Sending message "' + note.message + '" at ' + + note.location.latitude + ', ' + note.location.longitude); + var noteMsg = new messages.RouteNote(); + noteMsg.setMessage(note.message); + var location = new messages.Point(); + location.setLatitude(note.location.latitude); + location.setLongitude(note.location.longitude); + noteMsg.setLocation(location); + call.write(noteMsg); + } + call.end(); +} + +/** + * Run all of the demos in order + */ +function main() { + async.series([ + runGetFeature, + runListFeatures, + runRecordRoute, + runRouteChat + ]); +} + +if (require.main === module) { + main(); +} + +exports.runGetFeature = runGetFeature; + +exports.runListFeatures = runListFeatures; + +exports.runRecordRoute = runRecordRoute; + +exports.runRouteChat = runRouteChat; diff --git a/examples/node/static_codegen/route_guide/route_guide_db.json b/examples/node/static_codegen/route_guide/route_guide_db.json new file mode 100644 index 0000000000000000000000000000000000000000..9d6a980ab7d76163b103a5eccd523a3ffac0ec98 --- /dev/null +++ b/examples/node/static_codegen/route_guide/route_guide_db.json @@ -0,0 +1,601 @@ +[{ + "location": { + "latitude": 407838351, + "longitude": -746143763 + }, + "name": "Patriots Path, Mendham, NJ 07945, USA" +}, { + "location": { + "latitude": 408122808, + "longitude": -743999179 + }, + "name": "101 New Jersey 10, Whippany, NJ 07981, USA" +}, { + "location": { + "latitude": 413628156, + "longitude": -749015468 + }, + "name": "U.S. 6, Shohola, PA 18458, USA" +}, { + "location": { + "latitude": 419999544, + "longitude": -740371136 + }, + "name": "5 Conners Road, Kingston, NY 12401, USA" +}, { + "location": { + "latitude": 414008389, + "longitude": -743951297 + }, + "name": "Mid Hudson Psychiatric Center, New Hampton, NY 10958, USA" +}, { + "location": { + "latitude": 419611318, + "longitude": -746524769 + }, + "name": "287 Flugertown Road, Livingston Manor, NY 12758, USA" +}, { + "location": { + "latitude": 406109563, + "longitude": -742186778 + }, + "name": "4001 Tremley Point Road, Linden, NJ 07036, USA" +}, { + "location": { + "latitude": 416802456, + "longitude": -742370183 + }, + "name": "352 South Mountain Road, Wallkill, NY 12589, USA" +}, { + "location": { + "latitude": 412950425, + "longitude": -741077389 + }, + "name": "Bailey Turn Road, Harriman, NY 10926, USA" +}, { + "location": { + "latitude": 412144655, + "longitude": -743949739 + }, + "name": "193-199 Wawayanda Road, Hewitt, NJ 07421, USA" +}, { + "location": { + "latitude": 415736605, + "longitude": -742847522 + }, + "name": "406-496 Ward Avenue, Pine Bush, NY 12566, USA" +}, { + "location": { + "latitude": 413843930, + "longitude": -740501726 + }, + "name": "162 Merrill Road, Highland Mills, NY 10930, USA" +}, { + "location": { + "latitude": 410873075, + "longitude": -744459023 + }, + "name": "Clinton Road, West Milford, NJ 07480, USA" +}, { + "location": { + "latitude": 412346009, + "longitude": -744026814 + }, + "name": "16 Old Brook Lane, Warwick, NY 10990, USA" +}, { + "location": { + "latitude": 402948455, + "longitude": -747903913 + }, + "name": "3 Drake Lane, Pennington, NJ 08534, USA" +}, { + "location": { + "latitude": 406337092, + "longitude": -740122226 + }, + "name": "6324 8th Avenue, Brooklyn, NY 11220, USA" +}, { + "location": { + "latitude": 406421967, + "longitude": -747727624 + }, + "name": "1 Merck Access Road, Whitehouse Station, NJ 08889, USA" +}, { + "location": { + "latitude": 416318082, + "longitude": -749677716 + }, + "name": "78-98 Schalck Road, Narrowsburg, NY 12764, USA" +}, { + "location": { + "latitude": 415301720, + "longitude": -748416257 + }, + "name": "282 Lakeview Drive Road, Highland Lake, NY 12743, USA" +}, { + "location": { + "latitude": 402647019, + "longitude": -747071791 + }, + "name": "330 Evelyn Avenue, Hamilton Township, NJ 08619, USA" +}, { + "location": { + "latitude": 412567807, + "longitude": -741058078 + }, + "name": "New York State Reference Route 987E, Southfields, NY 10975, USA" +}, { + "location": { + "latitude": 416855156, + "longitude": -744420597 + }, + "name": "103-271 Tempaloni Road, Ellenville, NY 12428, USA" +}, { + "location": { + "latitude": 404663628, + "longitude": -744820157 + }, + "name": "1300 Airport Road, North Brunswick Township, NJ 08902, USA" +}, { + "location": { + "latitude": 407113723, + "longitude": -749746483 + }, + "name": "" +}, { + "location": { + "latitude": 402133926, + "longitude": -743613249 + }, + "name": "" +}, { + "location": { + "latitude": 400273442, + "longitude": -741220915 + }, + "name": "" +}, { + "location": { + "latitude": 411236786, + "longitude": -744070769 + }, + "name": "" +}, { + "location": { + "latitude": 411633782, + "longitude": -746784970 + }, + "name": "211-225 Plains Road, Augusta, NJ 07822, USA" +}, { + "location": { + "latitude": 415830701, + "longitude": -742952812 + }, + "name": "" +}, { + "location": { + "latitude": 413447164, + "longitude": -748712898 + }, + "name": "165 Pedersen Ridge Road, Milford, PA 18337, USA" +}, { + "location": { + "latitude": 405047245, + "longitude": -749800722 + }, + "name": "100-122 Locktown Road, Frenchtown, NJ 08825, USA" +}, { + "location": { + "latitude": 418858923, + "longitude": -746156790 + }, + "name": "" +}, { + "location": { + "latitude": 417951888, + "longitude": -748484944 + }, + "name": "650-652 Willi Hill Road, Swan Lake, NY 12783, USA" +}, { + "location": { + "latitude": 407033786, + "longitude": -743977337 + }, + "name": "26 East 3rd Street, New Providence, NJ 07974, USA" +}, { + "location": { + "latitude": 417548014, + "longitude": -740075041 + }, + "name": "" +}, { + "location": { + "latitude": 410395868, + "longitude": -744972325 + }, + "name": "" +}, { + "location": { + "latitude": 404615353, + "longitude": -745129803 + }, + "name": "" +}, { + "location": { + "latitude": 406589790, + "longitude": -743560121 + }, + "name": "611 Lawrence Avenue, Westfield, NJ 07090, USA" +}, { + "location": { + "latitude": 414653148, + "longitude": -740477477 + }, + "name": "18 Lannis Avenue, New Windsor, NY 12553, USA" +}, { + "location": { + "latitude": 405957808, + "longitude": -743255336 + }, + "name": "82-104 Amherst Avenue, Colonia, NJ 07067, USA" +}, { + "location": { + "latitude": 411733589, + "longitude": -741648093 + }, + "name": "170 Seven Lakes Drive, Sloatsburg, NY 10974, USA" +}, { + "location": { + "latitude": 412676291, + "longitude": -742606606 + }, + "name": "1270 Lakes Road, Monroe, NY 10950, USA" +}, { + "location": { + "latitude": 409224445, + "longitude": -748286738 + }, + "name": "509-535 Alphano Road, Great Meadows, NJ 07838, USA" +}, { + "location": { + "latitude": 406523420, + "longitude": -742135517 + }, + "name": "652 Garden Street, Elizabeth, NJ 07202, USA" +}, { + "location": { + "latitude": 401827388, + "longitude": -740294537 + }, + "name": "349 Sea Spray Court, Neptune City, NJ 07753, USA" +}, { + "location": { + "latitude": 410564152, + "longitude": -743685054 + }, + "name": "13-17 Stanley Street, West Milford, NJ 07480, USA" +}, { + "location": { + "latitude": 408472324, + "longitude": -740726046 + }, + "name": "47 Industrial Avenue, Teterboro, NJ 07608, USA" +}, { + "location": { + "latitude": 412452168, + "longitude": -740214052 + }, + "name": "5 White Oak Lane, Stony Point, NY 10980, USA" +}, { + "location": { + "latitude": 409146138, + "longitude": -746188906 + }, + "name": "Berkshire Valley Management Area Trail, Jefferson, NJ, USA" +}, { + "location": { + "latitude": 404701380, + "longitude": -744781745 + }, + "name": "1007 Jersey Avenue, New Brunswick, NJ 08901, USA" +}, { + "location": { + "latitude": 409642566, + "longitude": -746017679 + }, + "name": "6 East Emerald Isle Drive, Lake Hopatcong, NJ 07849, USA" +}, { + "location": { + "latitude": 408031728, + "longitude": -748645385 + }, + "name": "1358-1474 New Jersey 57, Port Murray, NJ 07865, USA" +}, { + "location": { + "latitude": 413700272, + "longitude": -742135189 + }, + "name": "367 Prospect Road, Chester, NY 10918, USA" +}, { + "location": { + "latitude": 404310607, + "longitude": -740282632 + }, + "name": "10 Simon Lake Drive, Atlantic Highlands, NJ 07716, USA" +}, { + "location": { + "latitude": 409319800, + "longitude": -746201391 + }, + "name": "11 Ward Street, Mount Arlington, NJ 07856, USA" +}, { + "location": { + "latitude": 406685311, + "longitude": -742108603 + }, + "name": "300-398 Jefferson Avenue, Elizabeth, NJ 07201, USA" +}, { + "location": { + "latitude": 419018117, + "longitude": -749142781 + }, + "name": "43 Dreher Road, Roscoe, NY 12776, USA" +}, { + "location": { + "latitude": 412856162, + "longitude": -745148837 + }, + "name": "Swan Street, Pine Island, NY 10969, USA" +}, { + "location": { + "latitude": 416560744, + "longitude": -746721964 + }, + "name": "66 Pleasantview Avenue, Monticello, NY 12701, USA" +}, { + "location": { + "latitude": 405314270, + "longitude": -749836354 + }, + "name": "" +}, { + "location": { + "latitude": 414219548, + "longitude": -743327440 + }, + "name": "" +}, { + "location": { + "latitude": 415534177, + "longitude": -742900616 + }, + "name": "565 Winding Hills Road, Montgomery, NY 12549, USA" +}, { + "location": { + "latitude": 406898530, + "longitude": -749127080 + }, + "name": "231 Rocky Run Road, Glen Gardner, NJ 08826, USA" +}, { + "location": { + "latitude": 407586880, + "longitude": -741670168 + }, + "name": "100 Mount Pleasant Avenue, Newark, NJ 07104, USA" +}, { + "location": { + "latitude": 400106455, + "longitude": -742870190 + }, + "name": "517-521 Huntington Drive, Manchester Township, NJ 08759, USA" +}, { + "location": { + "latitude": 400066188, + "longitude": -746793294 + }, + "name": "" +}, { + "location": { + "latitude": 418803880, + "longitude": -744102673 + }, + "name": "40 Mountain Road, Napanoch, NY 12458, USA" +}, { + "location": { + "latitude": 414204288, + "longitude": -747895140 + }, + "name": "" +}, { + "location": { + "latitude": 414777405, + "longitude": -740615601 + }, + "name": "" +}, { + "location": { + "latitude": 415464475, + "longitude": -747175374 + }, + "name": "48 North Road, Forestburgh, NY 12777, USA" +}, { + "location": { + "latitude": 404062378, + "longitude": -746376177 + }, + "name": "" +}, { + "location": { + "latitude": 405688272, + "longitude": -749285130 + }, + "name": "" +}, { + "location": { + "latitude": 400342070, + "longitude": -748788996 + }, + "name": "" +}, { + "location": { + "latitude": 401809022, + "longitude": -744157964 + }, + "name": "" +}, { + "location": { + "latitude": 404226644, + "longitude": -740517141 + }, + "name": "9 Thompson Avenue, Leonardo, NJ 07737, USA" +}, { + "location": { + "latitude": 410322033, + "longitude": -747871659 + }, + "name": "" +}, { + "location": { + "latitude": 407100674, + "longitude": -747742727 + }, + "name": "" +}, { + "location": { + "latitude": 418811433, + "longitude": -741718005 + }, + "name": "213 Bush Road, Stone Ridge, NY 12484, USA" +}, { + "location": { + "latitude": 415034302, + "longitude": -743850945 + }, + "name": "" +}, { + "location": { + "latitude": 411349992, + "longitude": -743694161 + }, + "name": "" +}, { + "location": { + "latitude": 404839914, + "longitude": -744759616 + }, + "name": "1-17 Bergen Court, New Brunswick, NJ 08901, USA" +}, { + "location": { + "latitude": 414638017, + "longitude": -745957854 + }, + "name": "35 Oakland Valley Road, Cuddebackville, NY 12729, USA" +}, { + "location": { + "latitude": 412127800, + "longitude": -740173578 + }, + "name": "" +}, { + "location": { + "latitude": 401263460, + "longitude": -747964303 + }, + "name": "" +}, { + "location": { + "latitude": 412843391, + "longitude": -749086026 + }, + "name": "" +}, { + "location": { + "latitude": 418512773, + "longitude": -743067823 + }, + "name": "" +}, { + "location": { + "latitude": 404318328, + "longitude": -740835638 + }, + "name": "42-102 Main Street, Belford, NJ 07718, USA" +}, { + "location": { + "latitude": 419020746, + "longitude": -741172328 + }, + "name": "" +}, { + "location": { + "latitude": 404080723, + "longitude": -746119569 + }, + "name": "" +}, { + "location": { + "latitude": 401012643, + "longitude": -744035134 + }, + "name": "" +}, { + "location": { + "latitude": 404306372, + "longitude": -741079661 + }, + "name": "" +}, { + "location": { + "latitude": 403966326, + "longitude": -748519297 + }, + "name": "" +}, { + "location": { + "latitude": 405002031, + "longitude": -748407866 + }, + "name": "" +}, { + "location": { + "latitude": 409532885, + "longitude": -742200683 + }, + "name": "" +}, { + "location": { + "latitude": 416851321, + "longitude": -742674555 + }, + "name": "" +}, { + "location": { + "latitude": 406411633, + "longitude": -741722051 + }, + "name": "3387 Richmond Terrace, Staten Island, NY 10303, USA" +}, { + "location": { + "latitude": 413069058, + "longitude": -744597778 + }, + "name": "261 Van Sickle Road, Goshen, NY 10924, USA" +}, { + "location": { + "latitude": 418465462, + "longitude": -746859398 + }, + "name": "" +}, { + "location": { + "latitude": 411733222, + "longitude": -744228360 + }, + "name": "" +}, { + "location": { + "latitude": 410248224, + "longitude": -747127767 + }, + "name": "3 Hasta Way, Newton, NJ 07860, USA" +}] diff --git a/examples/node/static_codegen/route_guide/route_guide_grpc_pb.js b/examples/node/static_codegen/route_guide/route_guide_grpc_pb.js new file mode 100644 index 0000000000000000000000000000000000000000..1dd71331dbd3edcc0dad9ebed1075b9dedfa34aa --- /dev/null +++ b/examples/node/static_codegen/route_guide/route_guide_grpc_pb.js @@ -0,0 +1,110 @@ +// GENERATED CODE -- DO NOT EDIT! + +'use strict'; +var grpc = require('grpc'); +var route_guide_pb = require('./route_guide_pb.js'); + +function serialize_Feature(arg) { + if (!(arg instanceof route_guide_pb.Feature)) { + throw new Error('Expected argument of type Feature'); + } + return new Buffer(arg.serializeBinary()); +} + +function deserialize_Feature(buffer_arg) { + return route_guide_pb.Feature.deserializeBinary(new Uint8Array(buffer_arg)); +} + +function serialize_Point(arg) { + if (!(arg instanceof route_guide_pb.Point)) { + throw new Error('Expected argument of type Point'); + } + return new Buffer(arg.serializeBinary()); +} + +function deserialize_Point(buffer_arg) { + return route_guide_pb.Point.deserializeBinary(new Uint8Array(buffer_arg)); +} + +function serialize_Rectangle(arg) { + if (!(arg instanceof route_guide_pb.Rectangle)) { + throw new Error('Expected argument of type Rectangle'); + } + return new Buffer(arg.serializeBinary()); +} + +function deserialize_Rectangle(buffer_arg) { + return route_guide_pb.Rectangle.deserializeBinary(new Uint8Array(buffer_arg)); +} + +function serialize_RouteNote(arg) { + if (!(arg instanceof route_guide_pb.RouteNote)) { + throw new Error('Expected argument of type RouteNote'); + } + return new Buffer(arg.serializeBinary()); +} + +function deserialize_RouteNote(buffer_arg) { + return route_guide_pb.RouteNote.deserializeBinary(new Uint8Array(buffer_arg)); +} + +function serialize_RouteSummary(arg) { + if (!(arg instanceof route_guide_pb.RouteSummary)) { + throw new Error('Expected argument of type RouteSummary'); + } + return new Buffer(arg.serializeBinary()); +} + +function deserialize_RouteSummary(buffer_arg) { + return route_guide_pb.RouteSummary.deserializeBinary(new Uint8Array(buffer_arg)); +} + + +var RouteGuideService = exports.RouteGuideService = { + getFeature: { + path: '/routeguide.RouteGuide/GetFeature', + requestStream: false, + responseStream: false, + requestType: route_guide_pb.Point, + responseType: route_guide_pb.Feature, + requestSerialize: serialize_Point, + requestDeserialize: deserialize_Point, + responseSerialize: serialize_Feature, + responseDeserialize: deserialize_Feature, + }, + listFeatures: { + path: '/routeguide.RouteGuide/ListFeatures', + requestStream: false, + responseStream: true, + requestType: route_guide_pb.Rectangle, + responseType: route_guide_pb.Feature, + requestSerialize: serialize_Rectangle, + requestDeserialize: deserialize_Rectangle, + responseSerialize: serialize_Feature, + responseDeserialize: deserialize_Feature, + }, + recordRoute: { + path: '/routeguide.RouteGuide/RecordRoute', + requestStream: true, + responseStream: false, + requestType: route_guide_pb.Point, + responseType: route_guide_pb.RouteSummary, + requestSerialize: serialize_Point, + requestDeserialize: deserialize_Point, + responseSerialize: serialize_RouteSummary, + responseDeserialize: deserialize_RouteSummary, + }, + routeChat: { + path: '/routeguide.RouteGuide/RouteChat', + requestStream: true, + responseStream: true, + requestType: route_guide_pb.RouteNote, + responseType: route_guide_pb.RouteNote, + requestSerialize: serialize_RouteNote, + requestDeserialize: deserialize_RouteNote, + responseSerialize: serialize_RouteNote, + responseDeserialize: deserialize_RouteNote, + }, +}; + +exports.RouteGuideClient = grpc.makeGenericClientConstructor(RouteGuideService); diff --git a/examples/node/static_codegen/route_guide/route_guide_pb.js b/examples/node/static_codegen/route_guide/route_guide_pb.js new file mode 100644 index 0000000000000000000000000000000000000000..f604cd6d50821fd1633cb67b664a66af68a40efa --- /dev/null +++ b/examples/node/static_codegen/route_guide/route_guide_pb.js @@ -0,0 +1,1033 @@ +/** + * @fileoverview + * @enhanceable + * @public + */ +// GENERATED CODE -- DO NOT EDIT! + +var jspb = require('google-protobuf'); +var goog = jspb; +var global = Function('return this')(); + +goog.exportSymbol('proto.routeguide.Feature', null, global); +goog.exportSymbol('proto.routeguide.Point', null, global); +goog.exportSymbol('proto.routeguide.Rectangle', null, global); +goog.exportSymbol('proto.routeguide.RouteNote', null, global); +goog.exportSymbol('proto.routeguide.RouteSummary', null, global); + +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.routeguide.Point = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.routeguide.Point, jspb.Message); +if (goog.DEBUG && !COMPILED) { + proto.routeguide.Point.displayName = 'proto.routeguide.Point'; +} + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto suitable for use in Soy templates. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. + * @param {boolean=} opt_includeInstance Whether to include the JSPB instance + * for transitional soy proto support: http://goto/soy-param-migration + * @return {!Object} + */ +proto.routeguide.Point.prototype.toObject = function(opt_includeInstance) { + return proto.routeguide.Point.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Whether to include the JSPB + * instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.routeguide.Point} msg The msg instance to transform. + * @return {!Object} + */ +proto.routeguide.Point.toObject = function(includeInstance, msg) { + var f, obj = { + latitude: msg.getLatitude(), + longitude: msg.getLongitude() + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.routeguide.Point} + */ +proto.routeguide.Point.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.routeguide.Point; + return proto.routeguide.Point.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.routeguide.Point} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.routeguide.Point} + */ +proto.routeguide.Point.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readInt32()); + msg.setLatitude(value); + break; + case 2: + var value = /** @type {number} */ (reader.readInt32()); + msg.setLongitude(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Class method variant: serializes the given message to binary data + * (in protobuf wire format), writing to the given BinaryWriter. + * @param {!proto.routeguide.Point} message + * @param {!jspb.BinaryWriter} writer + */ +proto.routeguide.Point.serializeBinaryToWriter = function(message, writer) { + message.serializeBinaryToWriter(writer); +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.routeguide.Point.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + this.serializeBinaryToWriter(writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the message to binary data (in protobuf wire format), + * writing to the given BinaryWriter. + * @param {!jspb.BinaryWriter} writer + */ +proto.routeguide.Point.prototype.serializeBinaryToWriter = function (writer) { + var f = undefined; + f = this.getLatitude(); + if (f !== 0) { + writer.writeInt32( + 1, + f + ); + } + f = this.getLongitude(); + if (f !== 0) { + writer.writeInt32( + 2, + f + ); + } +}; + + +/** + * Creates a deep clone of this proto. No data is shared with the original. + * @return {!proto.routeguide.Point} The clone. + */ +proto.routeguide.Point.prototype.cloneMessage = function() { + return /** @type {!proto.routeguide.Point} */ (jspb.Message.cloneMessage(this)); +}; + + +/** + * optional int32 latitude = 1; + * @return {number} + */ +proto.routeguide.Point.prototype.getLatitude = function() { + return /** @type {number} */ (jspb.Message.getFieldProto3(this, 1, 0)); +}; + + +/** @param {number} value */ +proto.routeguide.Point.prototype.setLatitude = function(value) { + jspb.Message.setField(this, 1, value); +}; + + +/** + * optional int32 longitude = 2; + * @return {number} + */ +proto.routeguide.Point.prototype.getLongitude = function() { + return /** @type {number} */ (jspb.Message.getFieldProto3(this, 2, 0)); +}; + + +/** @param {number} value */ +proto.routeguide.Point.prototype.setLongitude = function(value) { + jspb.Message.setField(this, 2, value); +}; + + + +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.routeguide.Rectangle = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.routeguide.Rectangle, jspb.Message); +if (goog.DEBUG && !COMPILED) { + proto.routeguide.Rectangle.displayName = 'proto.routeguide.Rectangle'; +} + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto suitable for use in Soy templates. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. + * @param {boolean=} opt_includeInstance Whether to include the JSPB instance + * for transitional soy proto support: http://goto/soy-param-migration + * @return {!Object} + */ +proto.routeguide.Rectangle.prototype.toObject = function(opt_includeInstance) { + return proto.routeguide.Rectangle.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Whether to include the JSPB + * instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.routeguide.Rectangle} msg The msg instance to transform. + * @return {!Object} + */ +proto.routeguide.Rectangle.toObject = function(includeInstance, msg) { + var f, obj = { + lo: (f = msg.getLo()) && proto.routeguide.Point.toObject(includeInstance, f), + hi: (f = msg.getHi()) && proto.routeguide.Point.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.routeguide.Rectangle} + */ +proto.routeguide.Rectangle.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.routeguide.Rectangle; + return proto.routeguide.Rectangle.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.routeguide.Rectangle} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.routeguide.Rectangle} + */ +proto.routeguide.Rectangle.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.routeguide.Point; + reader.readMessage(value,proto.routeguide.Point.deserializeBinaryFromReader); + msg.setLo(value); + break; + case 2: + var value = new proto.routeguide.Point; + reader.readMessage(value,proto.routeguide.Point.deserializeBinaryFromReader); + msg.setHi(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Class method variant: serializes the given message to binary data + * (in protobuf wire format), writing to the given BinaryWriter. + * @param {!proto.routeguide.Rectangle} message + * @param {!jspb.BinaryWriter} writer + */ +proto.routeguide.Rectangle.serializeBinaryToWriter = function(message, writer) { + message.serializeBinaryToWriter(writer); +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.routeguide.Rectangle.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + this.serializeBinaryToWriter(writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the message to binary data (in protobuf wire format), + * writing to the given BinaryWriter. + * @param {!jspb.BinaryWriter} writer + */ +proto.routeguide.Rectangle.prototype.serializeBinaryToWriter = function (writer) { + var f = undefined; + f = this.getLo(); + if (f != null) { + writer.writeMessage( + 1, + f, + proto.routeguide.Point.serializeBinaryToWriter + ); + } + f = this.getHi(); + if (f != null) { + writer.writeMessage( + 2, + f, + proto.routeguide.Point.serializeBinaryToWriter + ); + } +}; + + +/** + * Creates a deep clone of this proto. No data is shared with the original. + * @return {!proto.routeguide.Rectangle} The clone. + */ +proto.routeguide.Rectangle.prototype.cloneMessage = function() { + return /** @type {!proto.routeguide.Rectangle} */ (jspb.Message.cloneMessage(this)); +}; + + +/** + * optional Point lo = 1; + * @return {proto.routeguide.Point} + */ +proto.routeguide.Rectangle.prototype.getLo = function() { + return /** @type{proto.routeguide.Point} */ ( + jspb.Message.getWrapperField(this, proto.routeguide.Point, 1)); +}; + + +/** @param {proto.routeguide.Point|undefined} value */ +proto.routeguide.Rectangle.prototype.setLo = function(value) { + jspb.Message.setWrapperField(this, 1, value); +}; + + +proto.routeguide.Rectangle.prototype.clearLo = function() { + this.setLo(undefined); +}; + + +/** + * optional Point hi = 2; + * @return {proto.routeguide.Point} + */ +proto.routeguide.Rectangle.prototype.getHi = function() { + return /** @type{proto.routeguide.Point} */ ( + jspb.Message.getWrapperField(this, proto.routeguide.Point, 2)); +}; + + +/** @param {proto.routeguide.Point|undefined} value */ +proto.routeguide.Rectangle.prototype.setHi = function(value) { + jspb.Message.setWrapperField(this, 2, value); +}; + + +proto.routeguide.Rectangle.prototype.clearHi = function() { + this.setHi(undefined); +}; + + + +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.routeguide.Feature = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.routeguide.Feature, jspb.Message); +if (goog.DEBUG && !COMPILED) { + proto.routeguide.Feature.displayName = 'proto.routeguide.Feature'; +} + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto suitable for use in Soy templates. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. + * @param {boolean=} opt_includeInstance Whether to include the JSPB instance + * for transitional soy proto support: http://goto/soy-param-migration + * @return {!Object} + */ +proto.routeguide.Feature.prototype.toObject = function(opt_includeInstance) { + return proto.routeguide.Feature.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Whether to include the JSPB + * instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.routeguide.Feature} msg The msg instance to transform. + * @return {!Object} + */ +proto.routeguide.Feature.toObject = function(includeInstance, msg) { + var f, obj = { + name: msg.getName(), + location: (f = msg.getLocation()) && proto.routeguide.Point.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.routeguide.Feature} + */ +proto.routeguide.Feature.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.routeguide.Feature; + return proto.routeguide.Feature.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.routeguide.Feature} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.routeguide.Feature} + */ +proto.routeguide.Feature.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setName(value); + break; + case 2: + var value = new proto.routeguide.Point; + reader.readMessage(value,proto.routeguide.Point.deserializeBinaryFromReader); + msg.setLocation(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Class method variant: serializes the given message to binary data + * (in protobuf wire format), writing to the given BinaryWriter. + * @param {!proto.routeguide.Feature} message + * @param {!jspb.BinaryWriter} writer + */ +proto.routeguide.Feature.serializeBinaryToWriter = function(message, writer) { + message.serializeBinaryToWriter(writer); +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.routeguide.Feature.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + this.serializeBinaryToWriter(writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the message to binary data (in protobuf wire format), + * writing to the given BinaryWriter. + * @param {!jspb.BinaryWriter} writer + */ +proto.routeguide.Feature.prototype.serializeBinaryToWriter = function (writer) { + var f = undefined; + f = this.getName(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = this.getLocation(); + if (f != null) { + writer.writeMessage( + 2, + f, + proto.routeguide.Point.serializeBinaryToWriter + ); + } +}; + + +/** + * Creates a deep clone of this proto. No data is shared with the original. + * @return {!proto.routeguide.Feature} The clone. + */ +proto.routeguide.Feature.prototype.cloneMessage = function() { + return /** @type {!proto.routeguide.Feature} */ (jspb.Message.cloneMessage(this)); +}; + + +/** + * optional string name = 1; + * @return {string} + */ +proto.routeguide.Feature.prototype.getName = function() { + return /** @type {string} */ (jspb.Message.getFieldProto3(this, 1, "")); +}; + + +/** @param {string} value */ +proto.routeguide.Feature.prototype.setName = function(value) { + jspb.Message.setField(this, 1, value); +}; + + +/** + * optional Point location = 2; + * @return {proto.routeguide.Point} + */ +proto.routeguide.Feature.prototype.getLocation = function() { + return /** @type{proto.routeguide.Point} */ ( + jspb.Message.getWrapperField(this, proto.routeguide.Point, 2)); +}; + + +/** @param {proto.routeguide.Point|undefined} value */ +proto.routeguide.Feature.prototype.setLocation = function(value) { + jspb.Message.setWrapperField(this, 2, value); +}; + + +proto.routeguide.Feature.prototype.clearLocation = function() { + this.setLocation(undefined); +}; + + + +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.routeguide.RouteNote = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.routeguide.RouteNote, jspb.Message); +if (goog.DEBUG && !COMPILED) { + proto.routeguide.RouteNote.displayName = 'proto.routeguide.RouteNote'; +} + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto suitable for use in Soy templates. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. + * @param {boolean=} opt_includeInstance Whether to include the JSPB instance + * for transitional soy proto support: http://goto/soy-param-migration + * @return {!Object} + */ +proto.routeguide.RouteNote.prototype.toObject = function(opt_includeInstance) { + return proto.routeguide.RouteNote.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Whether to include the JSPB + * instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.routeguide.RouteNote} msg The msg instance to transform. + * @return {!Object} + */ +proto.routeguide.RouteNote.toObject = function(includeInstance, msg) { + var f, obj = { + location: (f = msg.getLocation()) && proto.routeguide.Point.toObject(includeInstance, f), + message: msg.getMessage() + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.routeguide.RouteNote} + */ +proto.routeguide.RouteNote.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.routeguide.RouteNote; + return proto.routeguide.RouteNote.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.routeguide.RouteNote} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.routeguide.RouteNote} + */ +proto.routeguide.RouteNote.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.routeguide.Point; + reader.readMessage(value,proto.routeguide.Point.deserializeBinaryFromReader); + msg.setLocation(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setMessage(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Class method variant: serializes the given message to binary data + * (in protobuf wire format), writing to the given BinaryWriter. + * @param {!proto.routeguide.RouteNote} message + * @param {!jspb.BinaryWriter} writer + */ +proto.routeguide.RouteNote.serializeBinaryToWriter = function(message, writer) { + message.serializeBinaryToWriter(writer); +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.routeguide.RouteNote.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + this.serializeBinaryToWriter(writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the message to binary data (in protobuf wire format), + * writing to the given BinaryWriter. + * @param {!jspb.BinaryWriter} writer + */ +proto.routeguide.RouteNote.prototype.serializeBinaryToWriter = function (writer) { + var f = undefined; + f = this.getLocation(); + if (f != null) { + writer.writeMessage( + 1, + f, + proto.routeguide.Point.serializeBinaryToWriter + ); + } + f = this.getMessage(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } +}; + + +/** + * Creates a deep clone of this proto. No data is shared with the original. + * @return {!proto.routeguide.RouteNote} The clone. + */ +proto.routeguide.RouteNote.prototype.cloneMessage = function() { + return /** @type {!proto.routeguide.RouteNote} */ (jspb.Message.cloneMessage(this)); +}; + + +/** + * optional Point location = 1; + * @return {proto.routeguide.Point} + */ +proto.routeguide.RouteNote.prototype.getLocation = function() { + return /** @type{proto.routeguide.Point} */ ( + jspb.Message.getWrapperField(this, proto.routeguide.Point, 1)); +}; + + +/** @param {proto.routeguide.Point|undefined} value */ +proto.routeguide.RouteNote.prototype.setLocation = function(value) { + jspb.Message.setWrapperField(this, 1, value); +}; + + +proto.routeguide.RouteNote.prototype.clearLocation = function() { + this.setLocation(undefined); +}; + + +/** + * optional string message = 2; + * @return {string} + */ +proto.routeguide.RouteNote.prototype.getMessage = function() { + return /** @type {string} */ (jspb.Message.getFieldProto3(this, 2, "")); +}; + + +/** @param {string} value */ +proto.routeguide.RouteNote.prototype.setMessage = function(value) { + jspb.Message.setField(this, 2, value); +}; + + + +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.routeguide.RouteSummary = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.routeguide.RouteSummary, jspb.Message); +if (goog.DEBUG && !COMPILED) { + proto.routeguide.RouteSummary.displayName = 'proto.routeguide.RouteSummary'; +} + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto suitable for use in Soy templates. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default. + * For the list of reserved names please see: + * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. + * @param {boolean=} opt_includeInstance Whether to include the JSPB instance + * for transitional soy proto support: http://goto/soy-param-migration + * @return {!Object} + */ +proto.routeguide.RouteSummary.prototype.toObject = function(opt_includeInstance) { + return proto.routeguide.RouteSummary.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Whether to include the JSPB + * instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.routeguide.RouteSummary} msg The msg instance to transform. + * @return {!Object} + */ +proto.routeguide.RouteSummary.toObject = function(includeInstance, msg) { + var f, obj = { + pointCount: msg.getPointCount(), + featureCount: msg.getFeatureCount(), + distance: msg.getDistance(), + elapsedTime: msg.getElapsedTime() + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.routeguide.RouteSummary} + */ +proto.routeguide.RouteSummary.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.routeguide.RouteSummary; + return proto.routeguide.RouteSummary.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.routeguide.RouteSummary} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.routeguide.RouteSummary} + */ +proto.routeguide.RouteSummary.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readInt32()); + msg.setPointCount(value); + break; + case 2: + var value = /** @type {number} */ (reader.readInt32()); + msg.setFeatureCount(value); + break; + case 3: + var value = /** @type {number} */ (reader.readInt32()); + msg.setDistance(value); + break; + case 4: + var value = /** @type {number} */ (reader.readInt32()); + msg.setElapsedTime(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Class method variant: serializes the given message to binary data + * (in protobuf wire format), writing to the given BinaryWriter. + * @param {!proto.routeguide.RouteSummary} message + * @param {!jspb.BinaryWriter} writer + */ +proto.routeguide.RouteSummary.serializeBinaryToWriter = function(message, writer) { + message.serializeBinaryToWriter(writer); +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.routeguide.RouteSummary.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + this.serializeBinaryToWriter(writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the message to binary data (in protobuf wire format), + * writing to the given BinaryWriter. + * @param {!jspb.BinaryWriter} writer + */ +proto.routeguide.RouteSummary.prototype.serializeBinaryToWriter = function (writer) { + var f = undefined; + f = this.getPointCount(); + if (f !== 0) { + writer.writeInt32( + 1, + f + ); + } + f = this.getFeatureCount(); + if (f !== 0) { + writer.writeInt32( + 2, + f + ); + } + f = this.getDistance(); + if (f !== 0) { + writer.writeInt32( + 3, + f + ); + } + f = this.getElapsedTime(); + if (f !== 0) { + writer.writeInt32( + 4, + f + ); + } +}; + + +/** + * Creates a deep clone of this proto. No data is shared with the original. + * @return {!proto.routeguide.RouteSummary} The clone. + */ +proto.routeguide.RouteSummary.prototype.cloneMessage = function() { + return /** @type {!proto.routeguide.RouteSummary} */ (jspb.Message.cloneMessage(this)); +}; + + +/** + * optional int32 point_count = 1; + * @return {number} + */ +proto.routeguide.RouteSummary.prototype.getPointCount = function() { + return /** @type {number} */ (jspb.Message.getFieldProto3(this, 1, 0)); +}; + + +/** @param {number} value */ +proto.routeguide.RouteSummary.prototype.setPointCount = function(value) { + jspb.Message.setField(this, 1, value); +}; + + +/** + * optional int32 feature_count = 2; + * @return {number} + */ +proto.routeguide.RouteSummary.prototype.getFeatureCount = function() { + return /** @type {number} */ (jspb.Message.getFieldProto3(this, 2, 0)); +}; + + +/** @param {number} value */ +proto.routeguide.RouteSummary.prototype.setFeatureCount = function(value) { + jspb.Message.setField(this, 2, value); +}; + + +/** + * optional int32 distance = 3; + * @return {number} + */ +proto.routeguide.RouteSummary.prototype.getDistance = function() { + return /** @type {number} */ (jspb.Message.getFieldProto3(this, 3, 0)); +}; + + +/** @param {number} value */ +proto.routeguide.RouteSummary.prototype.setDistance = function(value) { + jspb.Message.setField(this, 3, value); +}; + + +/** + * optional int32 elapsed_time = 4; + * @return {number} + */ +proto.routeguide.RouteSummary.prototype.getElapsedTime = function() { + return /** @type {number} */ (jspb.Message.getFieldProto3(this, 4, 0)); +}; + + +/** @param {number} value */ +proto.routeguide.RouteSummary.prototype.setElapsedTime = function(value) { + jspb.Message.setField(this, 4, value); +}; + + +goog.object.extend(exports, proto.routeguide); diff --git a/examples/node/static_codegen/route_guide/route_guide_server.js b/examples/node/static_codegen/route_guide/route_guide_server.js new file mode 100644 index 0000000000000000000000000000000000000000..53628fb046f1d914c7108bd6cb02f1024df22abb --- /dev/null +++ b/examples/node/static_codegen/route_guide/route_guide_server.js @@ -0,0 +1,261 @@ +/* + * + * 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. + * + */ + +var messages = require('./route_guide_pb'); +var services = require('./route_guide_grpc_pb'); + +var fs = require('fs'); +var parseArgs = require('minimist'); +var path = require('path'); +var _ = require('lodash'); +var grpc = require('grpc'); + +var COORD_FACTOR = 1e7; + +/** + * For simplicity, a point is a record type that looks like + * {latitude: number, longitude: number}, and a feature is a record type that + * looks like {name: string, location: point}. feature objects with name==='' + * are points with no feature. + */ + +/** + * List of feature objects at points that have been requested so far. + */ +var feature_list = []; + +/** + * Get a feature object at the given point, or creates one if it does not exist. + * @param {point} point The point to check + * @return {feature} The feature object at the point. Note that an empty name + * indicates no feature + */ +function checkFeature(point) { + var feature; + // Check if there is already a feature object for the given point + for (var i = 0; i < feature_list.length; i++) { + feature = feature_list[i]; + if (feature.getLocation().getLatitude() === point.getLatitude() && + feature.getLocation().getLongitude() === point.getLongitude()) { + return feature; + } + } + var name = ''; + feature = new messages.Feature(); + feature.setName(name); + feature.setLocation(point); + return feature; +} + +/** + * getFeature request handler. Gets a request with a point, and responds with a + * feature object indicating whether there is a feature at that point. + * @param {EventEmitter} call Call object for the handler to process + * @param {function(Error, feature)} callback Response callback + */ +function getFeature(call, callback) { + callback(null, checkFeature(call.request)); +} + +/** + * listFeatures request handler. Gets a request with two points, and responds + * with a stream of all features in the bounding box defined by those points. + * @param {Writable} call Writable stream for responses with an additional + * request property for the request value. + */ +function listFeatures(call) { + var lo = call.request.getLo(); + var hi = call.request.getHi(); + var left = _.min([lo.getLongitude(), hi.getLongitude()]); + var right = _.max([lo.getLongitude(), hi.getLongitude()]); + var top = _.max([lo.getLatitude(), hi.getLatitude()]); + var bottom = _.min([lo.getLatitude(), hi.getLatitude()]); + // For each feature, check if it is in the given bounding box + _.each(feature_list, function(feature) { + if (feature.getName() === '') { + return; + } + if (feature.getLocation().getLongitude() >= left && + feature.getLocation().getLongitude() <= right && + feature.getLocation().getLatitude() >= bottom && + feature.getLocation().getLatitude() <= top) { + call.write(feature); + } + }); + call.end(); +} + +/** + * Calculate the distance between two points using the "haversine" formula. + * This code was taken from http://www.movable-type.co.uk/scripts/latlong.html. + * @param start The starting point + * @param end The end point + * @return The distance between the points in meters + */ +function getDistance(start, end) { + function toRadians(num) { + return num * Math.PI / 180; + } + var lat1 = start.getLatitude() / COORD_FACTOR; + var lat2 = end.getLatitude() / COORD_FACTOR; + var lon1 = start.getLongitude() / COORD_FACTOR; + var lon2 = end.getLongitude() / COORD_FACTOR; + var R = 6371000; // metres + var φ1 = toRadians(lat1); + var φ2 = toRadians(lat2); + var Δφ = toRadians(lat2-lat1); + var Δλ = toRadians(lon2-lon1); + + var a = Math.sin(Δφ/2) * Math.sin(Δφ/2) + + Math.cos(φ1) * Math.cos(φ2) * + Math.sin(Δλ/2) * Math.sin(Δλ/2); + var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); + + return R * c; +} + +/** + * recordRoute handler. Gets a stream of points, and responds with statistics + * about the "trip": number of points, number of known features visited, total + * distance traveled, and total time spent. + * @param {Readable} call The request point stream. + * @param {function(Error, routeSummary)} callback The callback to pass the + * response to + */ +function recordRoute(call, callback) { + var point_count = 0; + var feature_count = 0; + var distance = 0; + var previous = null; + // Start a timer + var start_time = process.hrtime(); + call.on('data', function(point) { + point_count += 1; + if (checkFeature(point).name !== '') { + feature_count += 1; + } + /* For each point after the first, add the incremental distance from the + * previous point to the total distance value */ + if (previous != null) { + distance += getDistance(previous, point); + } + previous = point; + }); + call.on('end', function() { + var summary = new messages.RouteSummary(); + summary.setPointCount(point_count); + summary.setFeatureCount(feature_count); + // Cast the distance to an integer + summary.setDistance(distance|0); + // End the timer + summary.setElapsedTime(process.hrtime(start_time)[0]); + callback(null, summary); + }); +} + +var route_notes = {}; + +/** + * Turn the point into a dictionary key. + * @param {point} point The point to use + * @return {string} The key for an object + */ +function pointKey(point) { + return point.getLatitude() + ' ' + point.getLongitude(); +} + +/** + * routeChat handler. Receives a stream of message/location pairs, and responds + * with a stream of all previous messages at each of those locations. + * @param {Duplex} call The stream for incoming and outgoing messages + */ +function routeChat(call) { + call.on('data', function(note) { + var key = pointKey(note.getLocation()); + /* For each note sent, respond with all previous notes that correspond to + * the same point */ + if (route_notes.hasOwnProperty(key)) { + _.each(route_notes[key], function(note) { + call.write(note); + }); + } else { + route_notes[key] = []; + } + // Then add the new note to the list + route_notes[key].push(note); + }); + call.on('end', function() { + call.end(); + }); +} + +/** + * Get a new server with the handler functions in this file bound to the methods + * it serves. + * @return {Server} The new server object + */ +function getServer() { + var server = new grpc.Server(); + server.addService(services.RouteGuideService, { + getFeature: getFeature, + listFeatures: listFeatures, + recordRoute: recordRoute, + routeChat: routeChat + }); + return server; +} + +if (require.main === module) { + // If this is run as a script, start a server on an unused port + var routeServer = getServer(); + routeServer.bind('0.0.0.0:50051', grpc.ServerCredentials.createInsecure()); + var argv = parseArgs(process.argv, { + string: 'db_path' + }); + fs.readFile(path.resolve(argv.db_path), function(err, data) { + if (err) throw err; + // Transform the loaded features to Feature objects + feature_list = _.map(JSON.parse(data), function(value) { + var feature = new messages.Feature(); + feature.setName(value.name); + var location = new messages.Point(); + location.setLatitude(value.location.latitude); + location.setLongitude(value.location.longitude); + feature.setLocation(location); + return feature; + }); + routeServer.start(); + }); +} + +exports.getServer = getServer; diff --git a/examples/objective-c/route_guide/ViewControllers.m b/examples/objective-c/route_guide/ViewControllers.m index 0b1a1cf48239c19ae4a5b81921bc65c5ae6b11c8..e32978240b6b868fefdbdf5bbe8d45307d5d0bce 100644 --- a/examples/objective-c/route_guide/ViewControllers.m +++ b/examples/objective-c/route_guide/ViewControllers.m @@ -80,19 +80,14 @@ static NSString * const kHostAddress = @"localhost:50051"; * Run the getFeature demo. Calls getFeature with a point known to have a feature and a point known * not to have a feature. */ -@interface GetFeatureViewController : UIViewController +@interface GetFeatureViewController : UIViewController { + RTGRouteGuide *service; +} @end @implementation GetFeatureViewController -- (void)viewDidLoad { - [super viewDidLoad]; - - // This only needs to be done once per host, before creating service objects for that host. - [GRPCCall useInsecureConnectionsForHost:kHostAddress]; - - RTGRouteGuide *service = [[RTGRouteGuide alloc] initWithHost:kHostAddress]; - +- (void)execRequest { void (^handler)(RTGFeature *response, NSError *error) = ^(RTGFeature *response, NSError *error) { if (response.name.length) { NSLog(@"Found feature called %@ at %@.", response.name, response.location); @@ -111,6 +106,19 @@ static NSString * const kHostAddress = @"localhost:50051"; [service getFeatureWithRequest:[RTGPoint message] handler:handler]; } +- (void)viewDidLoad { + [super viewDidLoad]; + + // This only needs to be done once per host, before creating service objects for that host. + [GRPCCall useInsecureConnectionsForHost:kHostAddress]; + + service = [[RTGRouteGuide alloc] initWithHost:kHostAddress]; +} + +- (void)viewDidAppear:(BOOL)animated { + [self execRequest]; +} + @end @@ -120,16 +128,15 @@ static NSString * const kHostAddress = @"localhost:50051"; * Run the listFeatures demo. Calls listFeatures with a rectangle containing all of the features in * the pre-generated database. Prints each response as it comes in. */ -@interface ListFeaturesViewController : UIViewController +@interface ListFeaturesViewController : UIViewController { + RTGRouteGuide *service; +} + @end @implementation ListFeaturesViewController -- (void)viewDidLoad { - [super viewDidLoad]; - - RTGRouteGuide *service = [[RTGRouteGuide alloc] initWithHost:kHostAddress]; - +- (void)execRequest { RTGRectangle *rectangle = [RTGRectangle message]; rectangle.lo.latitude = 405E6; rectangle.lo.longitude = -750E6; @@ -147,6 +154,16 @@ static NSString * const kHostAddress = @"localhost:50051"; }]; } +- (void)viewDidLoad { + [super viewDidLoad]; + + service = [[RTGRouteGuide alloc] initWithHost:kHostAddress]; +} + +- (void)viewDidAppear:(BOOL)animated { + [self execRequest]; +} + @end @@ -157,14 +174,15 @@ static NSString * const kHostAddress = @"localhost:50051"; * database with a variable delay in between. Prints the statistics when they are sent from the * server. */ -@interface RecordRouteViewController : UIViewController +@interface RecordRouteViewController : UIViewController { + RTGRouteGuide *service; +} + @end @implementation RecordRouteViewController -- (void)viewDidLoad { - [super viewDidLoad]; - +- (void)execRequest { NSString *dataBasePath = [NSBundle.mainBundle pathForResource:@"route_guide_db" ofType:@"json"]; NSData *dataBaseContent = [NSData dataWithContentsOfFile:dataBasePath]; @@ -178,8 +196,6 @@ static NSString * const kHostAddress = @"localhost:50051"; return location; }]; - RTGRouteGuide *service = [[RTGRouteGuide alloc] initWithHost:kHostAddress]; - [service recordRouteWithRequestsWriter:locations handler:^(RTGRouteSummary *response, NSError *error) { if (response) { @@ -193,6 +209,16 @@ static NSString * const kHostAddress = @"localhost:50051"; }]; } +- (void)viewDidLoad { + [super viewDidLoad]; + + service = [[RTGRouteGuide alloc] initWithHost:kHostAddress]; +} + +- (void)viewDidAppear:(BOOL)animated { + [self execRequest]; +} + @end @@ -202,14 +228,15 @@ static NSString * const kHostAddress = @"localhost:50051"; * Run the routeChat demo. Send some chat messages, and print any chat messages that are sent from * the server. */ -@interface RouteChatViewController : UIViewController +@interface RouteChatViewController : UIViewController { + RTGRouteGuide *service; +} + @end @implementation RouteChatViewController -- (void)viewDidLoad { - [super viewDidLoad]; - +- (void)execRequest { NSArray *notes = @[[RTGRouteNote noteWithMessage:@"First message" latitude:0 longitude:0], [RTGRouteNote noteWithMessage:@"Second message" latitude:0 longitude:1], [RTGRouteNote noteWithMessage:@"Third message" latitude:1 longitude:0], @@ -219,8 +246,6 @@ static NSString * const kHostAddress = @"localhost:50051"; return note; }]; - RTGRouteGuide *service = [[RTGRouteGuide alloc] initWithHost:kHostAddress]; - [service routeChatWithRequestsWriter:notesWriter eventHandler:^(BOOL done, RTGRouteNote *note, NSError *error) { if (note) { @@ -234,4 +259,14 @@ static NSString * const kHostAddress = @"localhost:50051"; }]; } +- (void)viewDidLoad { + [super viewDidLoad]; + + service = [[RTGRouteGuide alloc] initWithHost:kHostAddress]; +} + +- (void)viewDidAppear:(BOOL)animated { + [self execRequest]; +} + @end diff --git a/examples/python/helloworld/helloworld_pb2.py b/examples/python/helloworld/helloworld_pb2.py index 1b2674e4c8e8b26550374429da6ad74925a5bb5f..1ee80e4034c2258ab00a788c7698f7fecdad265f 100644 --- a/examples/python/helloworld/helloworld_pb2.py +++ b/examples/python/helloworld/helloworld_pb2.py @@ -1,6 +1,8 @@ # Generated by the protocol buffer compiler. DO NOT EDIT! # source: helloworld.proto +import sys +_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection @@ -17,7 +19,7 @@ DESCRIPTOR = _descriptor.FileDescriptor( name='helloworld.proto', package='helloworld', syntax='proto3', - serialized_pb=b'\n\x10helloworld.proto\x12\nhelloworld\"\x1c\n\x0cHelloRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x1d\n\nHelloReply\x12\x0f\n\x07message\x18\x01 \x01(\t2I\n\x07Greeter\x12>\n\x08SayHello\x12\x18.helloworld.HelloRequest\x1a\x16.helloworld.HelloReply\"\x00\x42\x18\n\x10io.grpc.examples\xa2\x02\x03HLWb\x06proto3' + serialized_pb=_b('\n\x10helloworld.proto\x12\nhelloworld\"\x1c\n\x0cHelloRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x1d\n\nHelloReply\x12\x0f\n\x07message\x18\x01 \x01(\t2I\n\x07Greeter\x12>\n\x08SayHello\x12\x18.helloworld.HelloRequest\x1a\x16.helloworld.HelloReply\"\x00\x42\x36\n\x1bio.grpc.examples.helloworldB\x0fHelloWorldProtoP\x01\xa2\x02\x03HLWb\x06proto3') ) _sym_db.RegisterFileDescriptor(DESCRIPTOR) @@ -34,7 +36,7 @@ _HELLOREQUEST = _descriptor.Descriptor( _descriptor.FieldDescriptor( name='name', full_name='helloworld.HelloRequest.name', index=0, number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), @@ -65,7 +67,7 @@ _HELLOREPLY = _descriptor.Descriptor( _descriptor.FieldDescriptor( name='message', full_name='helloworld.HelloReply.message', index=0, number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), @@ -104,69 +106,28 @@ _sym_db.RegisterMessage(HelloReply) DESCRIPTOR.has_options = True -DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), b'\n\020io.grpc.examples\242\002\003HLW') +DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\033io.grpc.examples.helloworldB\017HelloWorldProtoP\001\242\002\003HLW')) import abc +import six from grpc.beta import implementations as beta_implementations -from grpc.early_adopter import implementations as early_adopter_implementations -from grpc.framework.alpha import utilities as alpha_utilities +from grpc.beta import interfaces as beta_interfaces from grpc.framework.common import cardinality from grpc.framework.interfaces.face import utilities as face_utilities -class EarlyAdopterGreeterServicer(object): - """<fill me in later!>""" - __metaclass__ = abc.ABCMeta - @abc.abstractmethod - def SayHello(self, request, context): - raise NotImplementedError() -class EarlyAdopterGreeterServer(object): - """<fill me in later!>""" - __metaclass__ = abc.ABCMeta - @abc.abstractmethod - def start(self): - raise NotImplementedError() - @abc.abstractmethod - def stop(self): - raise NotImplementedError() -class EarlyAdopterGreeterStub(object): - """<fill me in later!>""" - __metaclass__ = abc.ABCMeta - @abc.abstractmethod - def SayHello(self, request): - raise NotImplementedError() - SayHello.async = None -def early_adopter_create_Greeter_server(servicer, port, private_key=None, certificate_chain=None): - import helloworld_pb2 - import helloworld_pb2 - method_service_descriptions = { - "SayHello": alpha_utilities.unary_unary_service_description( - servicer.SayHello, - helloworld_pb2.HelloRequest.FromString, - helloworld_pb2.HelloReply.SerializeToString, - ), - } - return early_adopter_implementations.server("helloworld.Greeter", method_service_descriptions, port, private_key=private_key, certificate_chain=certificate_chain) -def early_adopter_create_Greeter_stub(host, port, metadata_transformer=None, secure=False, root_certificates=None, private_key=None, certificate_chain=None, server_host_override=None): - import helloworld_pb2 - import helloworld_pb2 - method_invocation_descriptions = { - "SayHello": alpha_utilities.unary_unary_invocation_description( - helloworld_pb2.HelloRequest.SerializeToString, - helloworld_pb2.HelloReply.FromString, - ), - } - return early_adopter_implementations.stub("helloworld.Greeter", method_invocation_descriptions, host, port, metadata_transformer=metadata_transformer, secure=secure, root_certificates=root_certificates, private_key=private_key, certificate_chain=certificate_chain, server_host_override=server_host_override) class BetaGreeterServicer(object): - """<fill me in later!>""" - __metaclass__ = abc.ABCMeta - @abc.abstractmethod + """The greeting service definition. + """ def SayHello(self, request, context): - raise NotImplementedError() + """Sends a greeting + """ + context.code(beta_interfaces.StatusCode.UNIMPLEMENTED) class BetaGreeterStub(object): - """The interface to which stubs will conform.""" - __metaclass__ = abc.ABCMeta - @abc.abstractmethod + """The greeting service definition. + """ def SayHello(self, request, timeout): + """Sends a greeting + """ raise NotImplementedError() SayHello.future = None diff --git a/examples/python/route_guide/route_guide_pb2.py b/examples/python/route_guide/route_guide_pb2.py index d4d9f8dcd5dcbb01780b5962dc25c853d652d275..81d5d075274f80bfc3af1860aa104d7b185809ac 100644 --- a/examples/python/route_guide/route_guide_pb2.py +++ b/examples/python/route_guide/route_guide_pb2.py @@ -1,6 +1,8 @@ # Generated by the protocol buffer compiler. DO NOT EDIT! # source: route_guide.proto +import sys +_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection @@ -17,7 +19,7 @@ DESCRIPTOR = _descriptor.FileDescriptor( name='route_guide.proto', package='routeguide', syntax='proto3', - serialized_pb=b'\n\x11route_guide.proto\x12\nrouteguide\",\n\x05Point\x12\x10\n\x08latitude\x18\x01 \x01(\x05\x12\x11\n\tlongitude\x18\x02 \x01(\x05\"I\n\tRectangle\x12\x1d\n\x02lo\x18\x01 \x01(\x0b\x32\x11.routeguide.Point\x12\x1d\n\x02hi\x18\x02 \x01(\x0b\x32\x11.routeguide.Point\"<\n\x07\x46\x65\x61ture\x12\x0c\n\x04name\x18\x01 \x01(\t\x12#\n\x08location\x18\x02 \x01(\x0b\x32\x11.routeguide.Point\"A\n\tRouteNote\x12#\n\x08location\x18\x01 \x01(\x0b\x32\x11.routeguide.Point\x12\x0f\n\x07message\x18\x02 \x01(\t\"b\n\x0cRouteSummary\x12\x13\n\x0bpoint_count\x18\x01 \x01(\x05\x12\x15\n\rfeature_count\x18\x02 \x01(\x05\x12\x10\n\x08\x64istance\x18\x03 \x01(\x05\x12\x14\n\x0c\x65lapsed_time\x18\x04 \x01(\x05\x32\x85\x02\n\nRouteGuide\x12\x36\n\nGetFeature\x12\x11.routeguide.Point\x1a\x13.routeguide.Feature\"\x00\x12>\n\x0cListFeatures\x12\x15.routeguide.Rectangle\x1a\x13.routeguide.Feature\"\x00\x30\x01\x12>\n\x0bRecordRoute\x12\x11.routeguide.Point\x1a\x18.routeguide.RouteSummary\"\x00(\x01\x12?\n\tRouteChat\x12\x15.routeguide.RouteNote\x1a\x15.routeguide.RouteNote\"\x00(\x01\x30\x01\x42\x0f\n\x07\x65x.grpc\xa2\x02\x03RTGb\x06proto3' + serialized_pb=_b('\n\x11route_guide.proto\x12\nrouteguide\",\n\x05Point\x12\x10\n\x08latitude\x18\x01 \x01(\x05\x12\x11\n\tlongitude\x18\x02 \x01(\x05\"I\n\tRectangle\x12\x1d\n\x02lo\x18\x01 \x01(\x0b\x32\x11.routeguide.Point\x12\x1d\n\x02hi\x18\x02 \x01(\x0b\x32\x11.routeguide.Point\"<\n\x07\x46\x65\x61ture\x12\x0c\n\x04name\x18\x01 \x01(\t\x12#\n\x08location\x18\x02 \x01(\x0b\x32\x11.routeguide.Point\"A\n\tRouteNote\x12#\n\x08location\x18\x01 \x01(\x0b\x32\x11.routeguide.Point\x12\x0f\n\x07message\x18\x02 \x01(\t\"b\n\x0cRouteSummary\x12\x13\n\x0bpoint_count\x18\x01 \x01(\x05\x12\x15\n\rfeature_count\x18\x02 \x01(\x05\x12\x10\n\x08\x64istance\x18\x03 \x01(\x05\x12\x14\n\x0c\x65lapsed_time\x18\x04 \x01(\x05\x32\x85\x02\n\nRouteGuide\x12\x36\n\nGetFeature\x12\x11.routeguide.Point\x1a\x13.routeguide.Feature\"\x00\x12>\n\x0cListFeatures\x12\x15.routeguide.Rectangle\x1a\x13.routeguide.Feature\"\x00\x30\x01\x12>\n\x0bRecordRoute\x12\x11.routeguide.Point\x1a\x18.routeguide.RouteSummary\"\x00(\x01\x12?\n\tRouteChat\x12\x15.routeguide.RouteNote\x1a\x15.routeguide.RouteNote\"\x00(\x01\x30\x01\x42\x36\n\x1bio.grpc.examples.routeguideB\x0fRouteGuideProtoP\x01\xa2\x02\x03RTGb\x06proto3') ) _sym_db.RegisterFileDescriptor(DESCRIPTOR) @@ -110,7 +112,7 @@ _FEATURE = _descriptor.Descriptor( _descriptor.FieldDescriptor( name='name', full_name='routeguide.Feature.name', index=0, number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), @@ -155,7 +157,7 @@ _ROUTENOTE = _descriptor.Descriptor( _descriptor.FieldDescriptor( name='message', full_name='routeguide.RouteNote.message', index=1, number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), @@ -274,149 +276,86 @@ _sym_db.RegisterMessage(RouteSummary) DESCRIPTOR.has_options = True -DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), b'\n\007ex.grpc\242\002\003RTG') +DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\033io.grpc.examples.routeguideB\017RouteGuideProtoP\001\242\002\003RTG')) import abc +import six from grpc.beta import implementations as beta_implementations -from grpc.early_adopter import implementations as early_adopter_implementations -from grpc.framework.alpha import utilities as alpha_utilities +from grpc.beta import interfaces as beta_interfaces from grpc.framework.common import cardinality from grpc.framework.interfaces.face import utilities as face_utilities -class EarlyAdopterRouteGuideServicer(object): - """<fill me in later!>""" - __metaclass__ = abc.ABCMeta - @abc.abstractmethod - def GetFeature(self, request, context): - raise NotImplementedError() - @abc.abstractmethod - def ListFeatures(self, request, context): - raise NotImplementedError() - @abc.abstractmethod - def RecordRoute(self, request_iterator, context): - raise NotImplementedError() - @abc.abstractmethod - def RouteChat(self, request_iterator, context): - raise NotImplementedError() -class EarlyAdopterRouteGuideServer(object): - """<fill me in later!>""" - __metaclass__ = abc.ABCMeta - @abc.abstractmethod - def start(self): - raise NotImplementedError() - @abc.abstractmethod - def stop(self): - raise NotImplementedError() -class EarlyAdopterRouteGuideStub(object): - """<fill me in later!>""" - __metaclass__ = abc.ABCMeta - @abc.abstractmethod - def GetFeature(self, request): - raise NotImplementedError() - GetFeature.async = None - @abc.abstractmethod - def ListFeatures(self, request): - raise NotImplementedError() - ListFeatures.async = None - @abc.abstractmethod - def RecordRoute(self, request_iterator): - raise NotImplementedError() - RecordRoute.async = None - @abc.abstractmethod - def RouteChat(self, request_iterator): - raise NotImplementedError() - RouteChat.async = None -def early_adopter_create_RouteGuide_server(servicer, port, private_key=None, certificate_chain=None): - import route_guide_pb2 - import route_guide_pb2 - import route_guide_pb2 - import route_guide_pb2 - import route_guide_pb2 - import route_guide_pb2 - import route_guide_pb2 - import route_guide_pb2 - method_service_descriptions = { - "GetFeature": alpha_utilities.unary_unary_service_description( - servicer.GetFeature, - route_guide_pb2.Point.FromString, - route_guide_pb2.Feature.SerializeToString, - ), - "ListFeatures": alpha_utilities.unary_stream_service_description( - servicer.ListFeatures, - route_guide_pb2.Rectangle.FromString, - route_guide_pb2.Feature.SerializeToString, - ), - "RecordRoute": alpha_utilities.stream_unary_service_description( - servicer.RecordRoute, - route_guide_pb2.Point.FromString, - route_guide_pb2.RouteSummary.SerializeToString, - ), - "RouteChat": alpha_utilities.stream_stream_service_description( - servicer.RouteChat, - route_guide_pb2.RouteNote.FromString, - route_guide_pb2.RouteNote.SerializeToString, - ), - } - return early_adopter_implementations.server("routeguide.RouteGuide", method_service_descriptions, port, private_key=private_key, certificate_chain=certificate_chain) -def early_adopter_create_RouteGuide_stub(host, port, metadata_transformer=None, secure=False, root_certificates=None, private_key=None, certificate_chain=None, server_host_override=None): - import route_guide_pb2 - import route_guide_pb2 - import route_guide_pb2 - import route_guide_pb2 - import route_guide_pb2 - import route_guide_pb2 - import route_guide_pb2 - import route_guide_pb2 - method_invocation_descriptions = { - "GetFeature": alpha_utilities.unary_unary_invocation_description( - route_guide_pb2.Point.SerializeToString, - route_guide_pb2.Feature.FromString, - ), - "ListFeatures": alpha_utilities.unary_stream_invocation_description( - route_guide_pb2.Rectangle.SerializeToString, - route_guide_pb2.Feature.FromString, - ), - "RecordRoute": alpha_utilities.stream_unary_invocation_description( - route_guide_pb2.Point.SerializeToString, - route_guide_pb2.RouteSummary.FromString, - ), - "RouteChat": alpha_utilities.stream_stream_invocation_description( - route_guide_pb2.RouteNote.SerializeToString, - route_guide_pb2.RouteNote.FromString, - ), - } - return early_adopter_implementations.stub("routeguide.RouteGuide", method_invocation_descriptions, host, port, metadata_transformer=metadata_transformer, secure=secure, root_certificates=root_certificates, private_key=private_key, certificate_chain=certificate_chain, server_host_override=server_host_override) class BetaRouteGuideServicer(object): - """<fill me in later!>""" - __metaclass__ = abc.ABCMeta - @abc.abstractmethod + """Interface exported by the server. + """ def GetFeature(self, request, context): - raise NotImplementedError() - @abc.abstractmethod + """A simple RPC. + + Obtains the feature at a given position. + + A feature with an empty name is returned if there's no feature at the given + position. + """ + context.code(beta_interfaces.StatusCode.UNIMPLEMENTED) def ListFeatures(self, request, context): - raise NotImplementedError() - @abc.abstractmethod + """A server-to-client streaming RPC. + + Obtains the Features available within the given Rectangle. Results are + streamed rather than returned at once (e.g. in a response message with a + repeated field), as the rectangle may cover a large area and contain a + huge number of features. + """ + context.code(beta_interfaces.StatusCode.UNIMPLEMENTED) def RecordRoute(self, request_iterator, context): - raise NotImplementedError() - @abc.abstractmethod + """A client-to-server streaming RPC. + + Accepts a stream of Points on a route being traversed, returning a + RouteSummary when traversal is completed. + """ + context.code(beta_interfaces.StatusCode.UNIMPLEMENTED) def RouteChat(self, request_iterator, context): - raise NotImplementedError() + """A Bidirectional streaming RPC. + + Accepts a stream of RouteNotes sent while a route is being traversed, + while receiving other RouteNotes (e.g. from other users). + """ + context.code(beta_interfaces.StatusCode.UNIMPLEMENTED) class BetaRouteGuideStub(object): - """The interface to which stubs will conform.""" - __metaclass__ = abc.ABCMeta - @abc.abstractmethod + """Interface exported by the server. + """ def GetFeature(self, request, timeout): + """A simple RPC. + + Obtains the feature at a given position. + + A feature with an empty name is returned if there's no feature at the given + position. + """ raise NotImplementedError() GetFeature.future = None - @abc.abstractmethod def ListFeatures(self, request, timeout): + """A server-to-client streaming RPC. + + Obtains the Features available within the given Rectangle. Results are + streamed rather than returned at once (e.g. in a response message with a + repeated field), as the rectangle may cover a large area and contain a + huge number of features. + """ raise NotImplementedError() - @abc.abstractmethod def RecordRoute(self, request_iterator, timeout): + """A client-to-server streaming RPC. + + Accepts a stream of Points on a route being traversed, returning a + RouteSummary when traversal is completed. + """ raise NotImplementedError() RecordRoute.future = None - @abc.abstractmethod def RouteChat(self, request_iterator, timeout): + """A Bidirectional streaming RPC. + + Accepts a stream of RouteNotes sent while a route is being traversed, + while receiving other RouteNotes (e.g. from other users). + """ raise NotImplementedError() def beta_create_RouteGuide_server(servicer, pool=None, pool_size=None, default_timeout=None, maximum_timeout=None): diff --git a/gRPC.podspec b/gRPC.podspec index 631b0e3293be3bd17b51c2f11c044ddb6338624f..3c349d7ae497a0af91d26d31777cd283e3ad0725 100644 --- a/gRPC.podspec +++ b/gRPC.podspec @@ -36,7 +36,7 @@ Pod::Spec.new do |s| s.name = 'gRPC' - version = '0.12.0' + version = '0.14.0' s.version = version s.summary = 'gRPC client library for iOS/OSX' s.homepage = 'http://www.grpc.io' @@ -44,7 +44,8 @@ Pod::Spec.new do |s| s.authors = { 'The gRPC contributors' => 'grpc-packages@google.com' } s.source = { :git => 'https://github.com/grpc/grpc.git', - :tag => "release-#{version.gsub(/\./, '_')}-objectivec-#{version}" } + :tag => "release-#{version.gsub(/\./, '_')}-objectivec-#{version}", + :submodules => true } s.ios.deployment_target = '7.1' @@ -181,6 +182,7 @@ Pod::Spec.new do |s| 'src/core/lib/iomgr/endpoint.h', 'src/core/lib/iomgr/endpoint_pair.h', 'src/core/lib/iomgr/ev_poll_and_epoll_posix.h', + 'src/core/lib/iomgr/ev_poll_posix.h', 'src/core/lib/iomgr/ev_posix.h', 'src/core/lib/iomgr/exec_ctx.h', 'src/core/lib/iomgr/executor.h', @@ -287,8 +289,9 @@ Pod::Spec.new do |s| 'src/core/ext/client_config/subchannel_call_holder.h', 'src/core/ext/client_config/subchannel_index.h', 'src/core/ext/client_config/uri_parser.h', + 'third_party/objective_c/Cronet/cronet_c_for_grpc.h', 'src/core/ext/lb_policy/grpclb/load_balancer_api.h', - 'src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.h', + 'src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h', 'third_party/nanopb/pb.h', 'third_party/nanopb/pb_common.h', 'third_party/nanopb/pb_decode.h', @@ -307,6 +310,7 @@ Pod::Spec.new do |s| 'include/grpc/grpc.h', 'include/grpc/status.h', 'include/grpc/impl/codegen/byte_buffer.h', + 'include/grpc/impl/codegen/byte_buffer_reader.h', 'include/grpc/impl/codegen/compression_types.h', 'include/grpc/impl/codegen/connectivity_state.h', 'include/grpc/impl/codegen/grpc_types.h', @@ -326,6 +330,7 @@ Pod::Spec.new do |s| 'include/grpc/impl/codegen/sync_posix.h', 'include/grpc/impl/codegen/sync_win32.h', 'include/grpc/impl/codegen/time.h', + 'include/grpc/grpc_cronet.h', 'include/grpc/grpc_security.h', 'include/grpc/grpc_security_constants.h', 'include/grpc/census.h', @@ -348,6 +353,7 @@ Pod::Spec.new do |s| 'src/core/lib/iomgr/endpoint_pair_posix.c', 'src/core/lib/iomgr/endpoint_pair_windows.c', 'src/core/lib/iomgr/ev_poll_and_epoll_posix.c', + 'src/core/lib/iomgr/ev_poll_posix.c', 'src/core/lib/iomgr/ev_posix.c', 'src/core/lib/iomgr/exec_ctx.c', 'src/core/lib/iomgr/executor.c', @@ -475,8 +481,11 @@ Pod::Spec.new do |s| 'src/core/ext/client_config/uri_parser.c', 'src/core/ext/transport/chttp2/server/insecure/server_chttp2.c', 'src/core/ext/transport/chttp2/client/insecure/channel_create.c', + 'src/core/ext/transport/cronet/client/secure/cronet_channel_create.c', + 'src/core/ext/transport/cronet/transport/cronet_api_dummy.c', + 'src/core/ext/transport/cronet/transport/cronet_transport.c', 'src/core/ext/lb_policy/grpclb/load_balancer_api.c', - 'src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c', + 'src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c', 'third_party/nanopb/pb_common.c', 'third_party/nanopb/pb_decode.c', 'third_party/nanopb/pb_encode.c', @@ -527,6 +536,7 @@ Pod::Spec.new do |s| 'src/core/lib/iomgr/endpoint.h', 'src/core/lib/iomgr/endpoint_pair.h', 'src/core/lib/iomgr/ev_poll_and_epoll_posix.h', + 'src/core/lib/iomgr/ev_poll_posix.h', 'src/core/lib/iomgr/ev_posix.h', 'src/core/lib/iomgr/exec_ctx.h', 'src/core/lib/iomgr/executor.h', @@ -633,8 +643,9 @@ Pod::Spec.new do |s| 'src/core/ext/client_config/subchannel_call_holder.h', 'src/core/ext/client_config/subchannel_index.h', 'src/core/ext/client_config/uri_parser.h', + 'third_party/objective_c/Cronet/cronet_c_for_grpc.h', 'src/core/ext/lb_policy/grpclb/load_balancer_api.h', - 'src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.h', + 'src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h', 'third_party/nanopb/pb.h', 'third_party/nanopb/pb_common.h', 'third_party/nanopb/pb_decode.h', @@ -660,7 +671,7 @@ Pod::Spec.new do |s| ss.requires_arc = false ss.libraries = 'z' - ss.dependency 'BoringSSL', '~> 2.0' + ss.dependency 'BoringSSL', '~> 3.0' # ss.compiler_flags = '-GCC_WARN_INHIBIT_ALL_WARNINGS', '-w' end diff --git a/grpc.def b/grpc.def index 61948ed1b8945fc2ea2fcd87e2fa47f9c8cc1a5d..09a94a6cd0c502fe2b053e40f38908504d35ab15 100644 --- a/grpc.def +++ b/grpc.def @@ -87,6 +87,7 @@ EXPORTS grpc_header_nonbin_value_is_legal grpc_is_binary_header grpc_call_error_to_string + grpc_cronet_secure_channel_create grpc_auth_property_iterator_next grpc_auth_context_property_iterator grpc_auth_context_peer_identity diff --git a/grpc.gemspec b/grpc.gemspec index 1b7d4e7ccf4c411d2e89cc045eeaf6d36ec6f037..03f1a194c2eea4d23540271c4366b19209ddf388 100755 --- a/grpc.gemspec +++ b/grpc.gemspec @@ -149,6 +149,7 @@ Gem::Specification.new do |s| s.files += %w( include/grpc/grpc.h ) s.files += %w( include/grpc/status.h ) s.files += %w( include/grpc/impl/codegen/byte_buffer.h ) + s.files += %w( include/grpc/impl/codegen/byte_buffer_reader.h ) s.files += %w( include/grpc/impl/codegen/compression_types.h ) s.files += %w( include/grpc/impl/codegen/connectivity_state.h ) s.files += %w( include/grpc/impl/codegen/grpc_types.h ) @@ -168,6 +169,7 @@ Gem::Specification.new do |s| s.files += %w( include/grpc/impl/codegen/sync_posix.h ) s.files += %w( include/grpc/impl/codegen/sync_win32.h ) s.files += %w( include/grpc/impl/codegen/time.h ) + s.files += %w( include/grpc/grpc_cronet.h ) s.files += %w( include/grpc/grpc_security.h ) s.files += %w( include/grpc/grpc_security_constants.h ) s.files += %w( include/grpc/census.h ) @@ -189,6 +191,7 @@ Gem::Specification.new do |s| s.files += %w( src/core/lib/iomgr/endpoint.h ) s.files += %w( src/core/lib/iomgr/endpoint_pair.h ) s.files += %w( src/core/lib/iomgr/ev_poll_and_epoll_posix.h ) + s.files += %w( src/core/lib/iomgr/ev_poll_posix.h ) s.files += %w( src/core/lib/iomgr/ev_posix.h ) s.files += %w( src/core/lib/iomgr/exec_ctx.h ) s.files += %w( src/core/lib/iomgr/executor.h ) @@ -295,8 +298,9 @@ Gem::Specification.new do |s| s.files += %w( src/core/ext/client_config/subchannel_call_holder.h ) s.files += %w( src/core/ext/client_config/subchannel_index.h ) s.files += %w( src/core/ext/client_config/uri_parser.h ) + s.files += %w( third_party/objective_c/Cronet/cronet_c_for_grpc.h ) s.files += %w( src/core/ext/lb_policy/grpclb/load_balancer_api.h ) - s.files += %w( src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.h ) + s.files += %w( src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h ) s.files += %w( third_party/nanopb/pb.h ) s.files += %w( third_party/nanopb/pb_common.h ) s.files += %w( third_party/nanopb/pb_decode.h ) @@ -328,6 +332,7 @@ Gem::Specification.new do |s| s.files += %w( src/core/lib/iomgr/endpoint_pair_posix.c ) s.files += %w( src/core/lib/iomgr/endpoint_pair_windows.c ) s.files += %w( src/core/lib/iomgr/ev_poll_and_epoll_posix.c ) + s.files += %w( src/core/lib/iomgr/ev_poll_posix.c ) s.files += %w( src/core/lib/iomgr/ev_posix.c ) s.files += %w( src/core/lib/iomgr/exec_ctx.c ) s.files += %w( src/core/lib/iomgr/executor.c ) @@ -455,8 +460,11 @@ Gem::Specification.new do |s| s.files += %w( src/core/ext/client_config/uri_parser.c ) s.files += %w( src/core/ext/transport/chttp2/server/insecure/server_chttp2.c ) s.files += %w( src/core/ext/transport/chttp2/client/insecure/channel_create.c ) + s.files += %w( src/core/ext/transport/cronet/client/secure/cronet_channel_create.c ) + s.files += %w( src/core/ext/transport/cronet/transport/cronet_api_dummy.c ) + s.files += %w( src/core/ext/transport/cronet/transport/cronet_transport.c ) s.files += %w( src/core/ext/lb_policy/grpclb/load_balancer_api.c ) - s.files += %w( src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c ) + s.files += %w( src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c ) s.files += %w( third_party/nanopb/pb_common.c ) s.files += %w( third_party/nanopb/pb_decode.c ) s.files += %w( third_party/nanopb/pb_encode.c ) diff --git a/include/grpc++/impl/codegen/call.h b/include/grpc++/impl/codegen/call.h index d081b7d9c5963c9af9119f8fa539204cb542134a..d457f03fa64a03f3d9eb8a0eae736cefcd41e2b6 100644 --- a/include/grpc++/impl/codegen/call.h +++ b/include/grpc++/impl/codegen/call.h @@ -329,8 +329,11 @@ class CallOpGenericRecvMessage { template <class R> void RecvMessage(R* message) { - deserialize_.reset( - new CallOpGenericRecvMessageHelper::DeserializeFuncType<R>(message)); + // Use an explicit base class pointer to avoid resolution error in the + // following unique_ptr::reset for some old implementations. + CallOpGenericRecvMessageHelper::DeserializeFunc* func = + new CallOpGenericRecvMessageHelper::DeserializeFuncType<R>(message); + deserialize_.reset(func); } bool got_message; diff --git a/include/grpc++/impl/codegen/channel_interface.h b/include/grpc++/impl/codegen/channel_interface.h index 6fcd5c315ca9c19e406440059d086a582c1d6afb..cf7843811737e8d7a5bdd7225095c9fa11a8cf8b 100644 --- a/include/grpc++/impl/codegen/channel_interface.h +++ b/include/grpc++/impl/codegen/channel_interface.h @@ -85,6 +85,16 @@ class ChannelInterface { return WaitForStateChangeImpl(last_observed, deadline_tp.raw_time()); } + /// Wait for this channel to be connected + template <typename T> + bool WaitForConnected(T deadline) { + grpc_connectivity_state state; + while ((state = GetState(true)) != GRPC_CHANNEL_READY) { + if (!WaitForStateChange(state, deadline)) return false; + } + return true; + } + private: template <class R> friend class ::grpc::ClientReader; diff --git a/include/grpc++/impl/codegen/core_codegen_interface.h b/include/grpc++/impl/codegen/core_codegen_interface.h index 16424bab3584c18207c75a355743c3c53d42ea4f..aa9013c4cec9ec27293cfd1715b8132822a2bc4f 100644 --- a/include/grpc++/impl/codegen/core_codegen_interface.h +++ b/include/grpc++/impl/codegen/core_codegen_interface.h @@ -49,18 +49,6 @@ namespace grpc { /// \warning This interface should be considered internal and private. class CoreCodegenInterface { public: - // Serialize the msg into a buffer created inside the function. The caller - // should destroy the returned buffer when done with it. If serialization - // fails, - // false is returned and buffer is left unchanged. - virtual Status SerializeProto(const grpc::protobuf::Message& msg, - grpc_byte_buffer** buffer) = 0; - - // The caller keeps ownership of buffer and msg. - virtual Status DeserializeProto(grpc_byte_buffer* buffer, - grpc::protobuf::Message* msg, - int max_message_size) = 0; - /// Upon a failed assertion, log the error. virtual void assert_fail(const char* failed_assertion) = 0; @@ -76,9 +64,29 @@ class CoreCodegenInterface { virtual void gpr_free(void* p) = 0; virtual void grpc_byte_buffer_destroy(grpc_byte_buffer* bb) = 0; + + virtual void grpc_byte_buffer_reader_init(grpc_byte_buffer_reader* reader, + grpc_byte_buffer* buffer) = 0; + virtual void grpc_byte_buffer_reader_destroy( + grpc_byte_buffer_reader* reader) = 0; + virtual int grpc_byte_buffer_reader_next(grpc_byte_buffer_reader* reader, + gpr_slice* slice) = 0; + + virtual grpc_byte_buffer* grpc_raw_byte_buffer_create(gpr_slice* slice, + size_t nslices) = 0; + + virtual gpr_slice gpr_slice_malloc(size_t length) = 0; + virtual void gpr_slice_unref(gpr_slice slice) = 0; + virtual gpr_slice gpr_slice_split_tail(gpr_slice* s, size_t split) = 0; + virtual void gpr_slice_buffer_add(gpr_slice_buffer* sb, gpr_slice slice) = 0; + virtual void gpr_slice_buffer_pop(gpr_slice_buffer* sb) = 0; + virtual void grpc_metadata_array_init(grpc_metadata_array* array) = 0; virtual void grpc_metadata_array_destroy(grpc_metadata_array* array) = 0; + virtual const Status& ok() = 0; + virtual const Status& cancelled() = 0; + virtual gpr_timespec gpr_inf_future(gpr_clock_type type) = 0; }; diff --git a/include/grpc++/impl/codegen/method_handler_impl.h b/include/grpc++/impl/codegen/method_handler_impl.h index ad74efabc4ba1f595ec2d9c2ca44ab10188afcbe..21ac6c4fb5545c7c3b73b2291ca9272d182a37b2 100644 --- a/include/grpc++/impl/codegen/method_handler_impl.h +++ b/include/grpc++/impl/codegen/method_handler_impl.h @@ -44,10 +44,10 @@ namespace grpc { template <class ServiceType, class RequestType, class ResponseType> class RpcMethodHandler : public MethodHandler { public: - RpcMethodHandler( - std::function<Status(ServiceType*, ServerContext*, const RequestType*, - ResponseType*)> func, - ServiceType* service) + RpcMethodHandler(std::function<Status(ServiceType*, ServerContext*, + const RequestType*, ResponseType*)> + func, + ServiceType* service) : func_(func), service_(service) {} void RunHandler(const HandlerParameter& param) GRPC_FINAL { @@ -88,7 +88,8 @@ class ClientStreamingHandler : public MethodHandler { public: ClientStreamingHandler( std::function<Status(ServiceType*, ServerContext*, - ServerReader<RequestType>*, ResponseType*)> func, + ServerReader<RequestType>*, ResponseType*)> + func, ServiceType* service) : func_(func), service_(service) {} @@ -124,7 +125,8 @@ class ServerStreamingHandler : public MethodHandler { public: ServerStreamingHandler( std::function<Status(ServiceType*, ServerContext*, const RequestType*, - ServerWriter<ResponseType>*)> func, + ServerWriter<ResponseType>*)> + func, ServiceType* service) : func_(func), service_(service) {} diff --git a/include/grpc++/impl/codegen/proto_utils.h b/include/grpc++/impl/codegen/proto_utils.h index 2aaa3c3b300d58b5c60c5f799248c690f72730a1..3bad468a74e94d9219fd44d20d1dee31ef0d9d6b 100644 --- a/include/grpc++/impl/codegen/proto_utils.h +++ b/include/grpc++/impl/codegen/proto_utils.h @@ -41,26 +41,180 @@ #include <grpc++/impl/codegen/serialization_traits.h> #include <grpc++/impl/codegen/status.h> #include <grpc/impl/codegen/byte_buffer.h> +#include <grpc/impl/codegen/byte_buffer_reader.h> #include <grpc/impl/codegen/log.h> +#include <grpc/impl/codegen/slice.h> namespace grpc { extern CoreCodegenInterface* g_core_codegen_interface; +namespace internal { + +const int kGrpcBufferWriterMaxBufferLength = 8192; + +class GrpcBufferWriter GRPC_FINAL + : public ::grpc::protobuf::io::ZeroCopyOutputStream { + public: + explicit GrpcBufferWriter(grpc_byte_buffer** bp, int block_size) + : block_size_(block_size), byte_count_(0), have_backup_(false) { + *bp = g_core_codegen_interface->grpc_raw_byte_buffer_create(NULL, 0); + slice_buffer_ = &(*bp)->data.raw.slice_buffer; + } + + ~GrpcBufferWriter() GRPC_OVERRIDE { + if (have_backup_) { + g_core_codegen_interface->gpr_slice_unref(backup_slice_); + } + } + + bool Next(void** data, int* size) GRPC_OVERRIDE { + if (have_backup_) { + slice_ = backup_slice_; + have_backup_ = false; + } else { + slice_ = g_core_codegen_interface->gpr_slice_malloc(block_size_); + } + *data = GPR_SLICE_START_PTR(slice_); + // On win x64, int is only 32bit + GPR_CODEGEN_ASSERT(GPR_SLICE_LENGTH(slice_) <= INT_MAX); + byte_count_ += * size = (int)GPR_SLICE_LENGTH(slice_); + g_core_codegen_interface->gpr_slice_buffer_add(slice_buffer_, slice_); + return true; + } + + void BackUp(int count) GRPC_OVERRIDE { + g_core_codegen_interface->gpr_slice_buffer_pop(slice_buffer_); + if (count == block_size_) { + backup_slice_ = slice_; + } else { + backup_slice_ = g_core_codegen_interface->gpr_slice_split_tail( + &slice_, GPR_SLICE_LENGTH(slice_) - count); + g_core_codegen_interface->gpr_slice_buffer_add(slice_buffer_, slice_); + } + have_backup_ = true; + byte_count_ -= count; + } + + grpc::protobuf::int64 ByteCount() const GRPC_OVERRIDE { return byte_count_; } + + private: + const int block_size_; + int64_t byte_count_; + gpr_slice_buffer* slice_buffer_; + bool have_backup_; + gpr_slice backup_slice_; + gpr_slice slice_; +}; + +class GrpcBufferReader GRPC_FINAL + : public ::grpc::protobuf::io::ZeroCopyInputStream { + public: + explicit GrpcBufferReader(grpc_byte_buffer* buffer) + : byte_count_(0), backup_count_(0) { + g_core_codegen_interface->grpc_byte_buffer_reader_init(&reader_, buffer); + } + ~GrpcBufferReader() GRPC_OVERRIDE { + g_core_codegen_interface->grpc_byte_buffer_reader_destroy(&reader_); + } + + bool Next(const void** data, int* size) GRPC_OVERRIDE { + if (backup_count_ > 0) { + *data = GPR_SLICE_START_PTR(slice_) + GPR_SLICE_LENGTH(slice_) - + backup_count_; + GPR_CODEGEN_ASSERT(backup_count_ <= INT_MAX); + *size = (int)backup_count_; + backup_count_ = 0; + return true; + } + if (!g_core_codegen_interface->grpc_byte_buffer_reader_next(&reader_, + &slice_)) { + return false; + } + g_core_codegen_interface->gpr_slice_unref(slice_); + *data = GPR_SLICE_START_PTR(slice_); + // On win x64, int is only 32bit + GPR_CODEGEN_ASSERT(GPR_SLICE_LENGTH(slice_) <= INT_MAX); + byte_count_ += * size = (int)GPR_SLICE_LENGTH(slice_); + return true; + } + + void BackUp(int count) GRPC_OVERRIDE { backup_count_ = count; } + + bool Skip(int count) GRPC_OVERRIDE { + const void* data; + int size; + while (Next(&data, &size)) { + if (size >= count) { + BackUp(size - count); + return true; + } + // size < count; + count -= size; + } + // error or we have too large count; + return false; + } + + grpc::protobuf::int64 ByteCount() const GRPC_OVERRIDE { + return byte_count_ - backup_count_; + } + + private: + int64_t byte_count_; + int64_t backup_count_; + grpc_byte_buffer_reader reader_; + gpr_slice slice_; +}; +} // namespace internal + template <class T> class SerializationTraits<T, typename std::enable_if<std::is_base_of< grpc::protobuf::Message, T>::value>::type> { public: static Status Serialize(const grpc::protobuf::Message& msg, - grpc_byte_buffer** buffer, bool* own_buffer) { + grpc_byte_buffer** bp, bool* own_buffer) { *own_buffer = true; - return g_core_codegen_interface->SerializeProto(msg, buffer); + int byte_size = msg.ByteSize(); + if (byte_size <= internal::kGrpcBufferWriterMaxBufferLength) { + gpr_slice slice = g_core_codegen_interface->gpr_slice_malloc(byte_size); + GPR_CODEGEN_ASSERT( + GPR_SLICE_END_PTR(slice) == + msg.SerializeWithCachedSizesToArray(GPR_SLICE_START_PTR(slice))); + *bp = g_core_codegen_interface->grpc_raw_byte_buffer_create(&slice, 1); + g_core_codegen_interface->gpr_slice_unref(slice); + return g_core_codegen_interface->ok(); + } else { + internal::GrpcBufferWriter writer( + bp, internal::kGrpcBufferWriterMaxBufferLength); + return msg.SerializeToZeroCopyStream(&writer) + ? g_core_codegen_interface->ok() + : Status(StatusCode::INTERNAL, "Failed to serialize message"); + } } + static Status Deserialize(grpc_byte_buffer* buffer, grpc::protobuf::Message* msg, int max_message_size) { - return g_core_codegen_interface->DeserializeProto(buffer, msg, - max_message_size); + if (buffer == nullptr) { + return Status(StatusCode::INTERNAL, "No payload"); + } + Status result = g_core_codegen_interface->ok(); + { + internal::GrpcBufferReader reader(buffer); + ::grpc::protobuf::io::CodedInputStream decoder(&reader); + if (max_message_size > 0) { + decoder.SetTotalBytesLimit(max_message_size, max_message_size); + } + if (!msg->ParseFromCodedStream(&decoder)) { + result = Status(StatusCode::INTERNAL, msg->InitializationErrorString()); + } + if (!decoder.ConsumedEntireMessage()) { + result = Status(StatusCode::INTERNAL, "Did not read entire message"); + } + } + g_core_codegen_interface->grpc_byte_buffer_destroy(buffer); + return result; } }; diff --git a/include/grpc++/impl/server_builder_option.h b/include/grpc++/impl/server_builder_option.h index bcb19824fdf462acd9716ae8fe8b4886f4652589..2b7e89f5e5def483c611f8766f35540719fc833e 100644 --- a/include/grpc++/impl/server_builder_option.h +++ b/include/grpc++/impl/server_builder_option.h @@ -34,6 +34,10 @@ #ifndef GRPCXX_IMPL_SERVER_BUILDER_OPTION_H #define GRPCXX_IMPL_SERVER_BUILDER_OPTION_H +#include <map> +#include <memory> + +#include <grpc++/impl/server_builder_plugin.h> #include <grpc++/support/channel_arguments.h> namespace grpc { @@ -44,6 +48,10 @@ class ServerBuilderOption { virtual ~ServerBuilderOption() {} /// Alter the \a ChannelArguments used to create the gRPC server. virtual void UpdateArguments(ChannelArguments* args) = 0; + /// Alter the ServerBuilderPlugin map that will be added into ServerBuilder. + virtual void UpdatePlugins( + std::map<grpc::string, std::unique_ptr<ServerBuilderPlugin> >* + plugins) = 0; }; } // namespace grpc diff --git a/include/grpc++/impl/server_builder_plugin.h b/include/grpc++/impl/server_builder_plugin.h new file mode 100644 index 0000000000000000000000000000000000000000..1e157efa1119791e0b148fa321d644dad5e8cc05 --- /dev/null +++ b/include/grpc++/impl/server_builder_plugin.h @@ -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. + * + */ + +#ifndef GRPCXX_IMPL_SERVER_BUILDER_PLUGIN_H +#define GRPCXX_IMPL_SERVER_BUILDER_PLUGIN_H + +#include <memory> + +#include <grpc++/support/config.h> + +namespace grpc { + +class ServerInitializer; + +class ServerBuilderPlugin { + public: + virtual ~ServerBuilderPlugin() {} + virtual grpc::string name() = 0; + + // InitServer will be called in ServerBuilder::BuildAndStart(), after the + // Server instance is created. + virtual void InitServer(ServerInitializer* si) = 0; + + // Finish will be called at the end of ServerBuilder::BuildAndStart(). + virtual void Finish(ServerInitializer* si) = 0; + + // ChangeArguments is an interface that can be used in + // ServerBuilderOption::UpdatePlugins + virtual void ChangeArguments(const grpc::string& name, void* value) = 0; + + virtual bool has_sync_methods() const { return false; } + virtual bool has_async_methods() const { return false; } +}; + +} // namespace grpc + +#endif // GRPCXX_IMPL_SERVER_BUILDER_PLUGIN_H diff --git a/include/grpc++/impl/server_initializer.h b/include/grpc++/impl/server_initializer.h new file mode 100644 index 0000000000000000000000000000000000000000..dbcecc7026c1a64fd2c6f155919cae4d98526fbf --- /dev/null +++ b/include/grpc++/impl/server_initializer.h @@ -0,0 +1,70 @@ +/* + * + * 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. + * + */ + +#ifndef GRPCXX_IMPL_SERVER_INITIALIZER_H +#define GRPCXX_IMPL_SERVER_INITIALIZER_H + +#include <memory> +#include <vector> + +#include <grpc++/server.h> + +namespace grpc { + +class Server; +class Service; + +class ServerInitializer { + public: + ServerInitializer(Server* server) : server_(server) {} + + bool RegisterService(std::shared_ptr<Service> service) { + if (!server_->RegisterService(nullptr, service.get())) { + return false; + } + default_services_.push_back(service); + return true; + } + + const std::vector<grpc::string>* GetServiceList() { + return &server_->services_; + } + + private: + Server* server_; + std::vector<std::shared_ptr<Service> > default_services_; +}; + +} // namespace grpc + +#endif // GRPCXX_IMPL_SERVER_INITIALIZER_H diff --git a/include/grpc++/server.h b/include/grpc++/server.h index 729a5143bf8b3fd83bcdf481c192860583844cd2..a0ee0e98e47dcd4fe7c291726b2d88a860296f64 100644 --- a/include/grpc++/server.h +++ b/include/grpc++/server.h @@ -36,6 +36,7 @@ #include <list> #include <memory> +#include <vector> #include <grpc++/completion_queue.h> #include <grpc++/impl/call.h> @@ -57,6 +58,7 @@ class GenericServerContext; class AsyncGenericService; class ServerAsyncStreamingInterface; class ServerContext; +class ServerInitializer; class ThreadPoolInterface; /// Models a gRPC server. @@ -94,6 +96,7 @@ class Server GRPC_FINAL : public ServerInterface, private GrpcLibraryCodegen { private: friend class AsyncGenericService; friend class ServerBuilder; + friend class ServerInitializer; class SyncRequest; class AsyncRequest; @@ -159,6 +162,8 @@ class Server GRPC_FINAL : public ServerInterface, private GrpcLibraryCodegen { grpc_server* server() GRPC_OVERRIDE { return server_; }; + ServerInitializer* initializer(); + const int max_message_size_; // Completion queue. @@ -175,6 +180,7 @@ class Server GRPC_FINAL : public ServerInterface, private GrpcLibraryCodegen { std::shared_ptr<GlobalCallbacks> global_callbacks_; std::list<SyncRequest>* sync_methods_; + std::vector<grpc::string> services_; std::unique_ptr<RpcServiceMethod> unknown_method_; bool has_generic_service_; @@ -184,6 +190,8 @@ class Server GRPC_FINAL : public ServerInterface, private GrpcLibraryCodegen { ThreadPoolInterface* thread_pool_; // Whether the thread pool is created and owned by the server. bool thread_pool_owned_; + + std::unique_ptr<ServerInitializer> server_initializer_; }; } // namespace grpc diff --git a/include/grpc++/server_builder.h b/include/grpc++/server_builder.h index 86c7fecef59f53e3bd2e3fcdc449ee25401adf15..ad629521cbe415e5a8e7b0f0f24d8f6aa72f2158 100644 --- a/include/grpc++/server_builder.h +++ b/include/grpc++/server_builder.h @@ -34,10 +34,12 @@ #ifndef GRPCXX_SERVER_BUILDER_H #define GRPCXX_SERVER_BUILDER_H +#include <map> #include <memory> #include <vector> #include <grpc++/impl/server_builder_option.h> +#include <grpc++/impl/server_builder_plugin.h> #include <grpc++/support/config.h> #include <grpc/compression.h> @@ -51,6 +53,10 @@ class ServerCompletionQueue; class ServerCredentials; class Service; +namespace testing { +class ServerBuilderPluginTest; +} // namespace testing + /// A builder class for the creation and startup of \a grpc::Server instances. class ServerBuilder { public: @@ -107,7 +113,13 @@ class ServerBuilder { /// Return a running server which is ready for processing calls. std::unique_ptr<Server> BuildAndStart(); + /// For internal use only: Register a ServerBuilderPlugin factory function. + static void InternalAddPluginFactory( + std::unique_ptr<ServerBuilderPlugin> (*CreatePlugin)()); + private: + friend class ::grpc::testing::ServerBuilderPluginTest; + struct Port { grpc::string addr; std::shared_ptr<ServerCredentials> creds; @@ -130,6 +142,7 @@ class ServerBuilder { std::vector<Port> ports_; std::vector<ServerCompletionQueue*> cqs_; std::shared_ptr<ServerCredentials> creds_; + std::map<grpc::string, std::unique_ptr<ServerBuilderPlugin>> plugins_; AsyncGenericService* generic_service_; }; diff --git a/include/grpc/byte_buffer_reader.h b/include/grpc/byte_buffer_reader.h index 9a1c6178ab6918dec1696ff58a5c2baacf95418b..e95bf2f80dcea33295a605647a0fc5d6e1d9b7a1 100644 --- a/include/grpc/byte_buffer_reader.h +++ b/include/grpc/byte_buffer_reader.h @@ -34,25 +34,6 @@ #ifndef GRPC_BYTE_BUFFER_READER_H #define GRPC_BYTE_BUFFER_READER_H -#include <grpc/byte_buffer.h> -#include <grpc/grpc.h> - -#ifdef __cplusplus -extern "C" { -#endif - -struct grpc_byte_buffer_reader { - grpc_byte_buffer *buffer_in; - grpc_byte_buffer *buffer_out; - /* Different current objects correspond to different types of byte buffers */ - union { - /* Index into a slice buffer's array of slices */ - unsigned index; - } current; -}; - -#ifdef __cplusplus -} -#endif +#include <grpc/impl/codegen/byte_buffer_reader.h> #endif /* GRPC_BYTE_BUFFER_READER_H */ diff --git a/include/grpc/grpc_cronet.h b/include/grpc/grpc_cronet.h new file mode 100644 index 0000000000000000000000000000000000000000..295e0f55e80c4bec49fa86fe24769a0f20993fde --- /dev/null +++ b/include/grpc/grpc_cronet.h @@ -0,0 +1,51 @@ +/* + * + * 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. + * + */ + +#ifndef GRPC_GRPC_CRONET_H +#define GRPC_GRPC_CRONET_H + +#include <grpc/grpc.h> + +#ifdef __cplusplus +extern "C" { +#endif + +GRPCAPI grpc_channel *grpc_cronet_secure_channel_create( + void *engine, const char *target, const grpc_channel_args *args, + void *reserved); + +#ifdef __cplusplus +} +#endif + +#endif /* GRPC_GRPC_CRONET_H */ diff --git a/include/grpc/impl/codegen/byte_buffer_reader.h b/include/grpc/impl/codegen/byte_buffer_reader.h new file mode 100644 index 0000000000000000000000000000000000000000..10c382924ecdb21be9725f2eee8dd6ea571cf3d7 --- /dev/null +++ b/include/grpc/impl/codegen/byte_buffer_reader.h @@ -0,0 +1,57 @@ +/* + * + * 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_IMPL_CODEGEN_BYTE_BUFFER_READER_H +#define GRPC_IMPL_CODEGEN_BYTE_BUFFER_READER_H + +#include <grpc/impl/codegen/byte_buffer.h> + +#ifdef __cplusplus +extern "C" { +#endif + +struct grpc_byte_buffer_reader { + grpc_byte_buffer *buffer_in; + grpc_byte_buffer *buffer_out; + /* Different current objects correspond to different types of byte buffers */ + union { + /* Index into a slice buffer's array of slices */ + unsigned index; + } current; +}; + +#ifdef __cplusplus +} +#endif + +#endif /* GRPC_IMPL_CODEGEN_BYTE_BUFFER_READER_H */ diff --git a/include/grpc/impl/codegen/compression_types.h b/include/grpc/impl/codegen/compression_types.h index 0daccd92f237e4021ddd652d0fa532667d101dc7..8d2ec3b9d71221ecba2e7c9358fa9c01b2cdf9d2 100644 --- a/include/grpc/impl/codegen/compression_types.h +++ b/include/grpc/impl/codegen/compression_types.h @@ -41,10 +41,13 @@ extern "C" { #endif /** To be used in channel arguments */ -#define GRPC_COMPRESSION_ALGORITHM_ARG "grpc.compression_algorithm" -#define GRPC_COMPRESSION_ALGORITHM_STATE_ARG "grpc.compression_algorithm_state" +#define GRPC_COMPRESSION_CHANNEL_DEFAULT_ALGORITHM \ + "grpc.default_compression_algorithm" +#define GRPC_COMPRESSION_CHANNEL_DEFAULT_LEVEL "grpc.default_compression_level" +#define GRPC_COMPRESSION_CHANNEL_ENABLED_ALGORITHMS_BITSET \ + "grpc.compression_enabled_algorithms_bitset" -/* The various compression algorithms supported by GRPC */ +/* The various compression algorithms supported by gRPC */ typedef enum { GRPC_COMPRESS_NONE = 0, GRPC_COMPRESS_DEFLATE, @@ -53,6 +56,10 @@ typedef enum { GRPC_COMPRESS_ALGORITHMS_COUNT } grpc_compression_algorithm; +/** Compression levels allow a party with knowledge of its peer's accepted + * encodings to request compression in an abstract way. The level-algorithm + * mapping is performed internally and depends on the peer's supported + * compression algorithms. */ typedef enum { GRPC_COMPRESS_LEVEL_NONE = 0, GRPC_COMPRESS_LEVEL_LOW, @@ -62,8 +69,20 @@ typedef enum { } grpc_compression_level; typedef struct grpc_compression_options { - uint32_t enabled_algorithms_bitset; /**< All algs are enabled by default */ - grpc_compression_algorithm default_compression_algorithm; /**< for channel */ + /** All algs are enabled by default. This option corresponds to the channel + * argument key behind \a GRPC_COMPRESSION_CHANNEL_ENABLED_ALGORITHMS_BITSET + */ + uint32_t enabled_algorithms_bitset; + + /** The default channel compression algorithm. It'll be used in the absence of + * call specific settings. This option corresponds to the channel argument key + * behind \a GRPC_COMPRESSION_CHANNEL_DEFAULT_ALGORITHM */ + grpc_compression_algorithm default_compression_algorithm; + + /** The default channel compression level. It'll be used in the absence of + * call specific settings. This option corresponds to the channel argument key + * behind \a GRPC_COMPRESSION_CHANNEL_DEFAULT_LEVEL */ + grpc_compression_algorithm default_compression_level; } grpc_compression_options; #ifdef __cplusplus diff --git a/include/grpc/impl/codegen/grpc_types.h b/include/grpc/impl/codegen/grpc_types.h index 69f70cbf9ba61a76ddfb2946a4baccc7ac9c1d35..7181be4a34d9b5d1e928a98e31d18622bfd9a9cd 100644 --- a/include/grpc/impl/codegen/grpc_types.h +++ b/include/grpc/impl/codegen/grpc_types.h @@ -154,6 +154,8 @@ typedef struct { channel). If this parameter is specified and the underlying is not an SSL channel, it will just be ignored. */ #define GRPC_SSL_TARGET_NAME_OVERRIDE_ARG "grpc.ssl_target_name_override" +/* Maximum metadata size */ +#define GRPC_ARG_MAX_METADATA_SIZE "grpc.max_metadata_size" /** 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. @@ -309,7 +311,9 @@ typedef enum { GRPC_OP_RECV_STATUS_ON_CLIENT, /** Receive close on the server: one and only one must be made on the server. - This op completes after the close has been received by the server. */ + This op completes after the close has been received by the server. + This operation always succeeds, meaning ops paired with this operation + will also appear to succeed, even though they may not have. */ GRPC_OP_RECV_CLOSE_ON_SERVER } grpc_op_type; diff --git a/include/grpc/impl/codegen/port_platform.h b/include/grpc/impl/codegen/port_platform.h index 1229d488edbdfe94579b1cc4d5b50a7b4d0df1bd..d2d9ac780840d2c96b4cfea23eb6bf469c2e5bbb 100644 --- a/include/grpc/impl/codegen/port_platform.h +++ b/include/grpc/impl/codegen/port_platform.h @@ -114,6 +114,38 @@ #define GPR_WIN32_ATOMIC 1 #define GPR_MSVC_TLS 1 #endif +#elif defined(GPR_MANYLINUX1) +// TODO(atash): manylinux1 is just another __linux__ but with ancient +// libraries; it should be integrated with the `__linux__` definitions below. +#define GPR_PLATFORM_STRING "manylinux" +#define GPR_POSIX_CRASH_HANDLER 1 +#define GPR_CPU_LINUX 1 +#define GPR_GCC_ATOMIC 1 +#define GPR_GCC_TLS 1 +#define GPR_LINUX 1 +#define GPR_LINUX_LOG 1 +#define GPR_POSIX_SOCKET 1 +#define GPR_POSIX_WAKEUP_FD 1 +#define GPR_POSIX_SOCKETADDR 1 +#define GPR_POSIX_NO_SPECIAL_WAKEUP_FD 1 +#define GPR_POSIX_SOCKETUTILS 1 +#define GPR_HAVE_UNIX_SOCKET 1 +#define GPR_HAVE_IP_PKTINFO 1 +#define GPR_HAVE_IPV6_RECVPKTINFO 1 +#define GPR_LINUX_ENV 1 +#define GPR_POSIX_FILE 1 +#define GPR_POSIX_TMPFILE 1 +#define GPR_POSIX_STRING 1 +#define GPR_POSIX_SUBPROCESS 1 +#define GPR_POSIX_SYNC 1 +#define GPR_POSIX_TIME 1 +#define GPR_GETPID_IN_UNISTD_H 1 +#define GPR_HAVE_MSG_NOSIGNAL 1 +#ifdef _LP64 +#define GPR_ARCH_64 1 +#else /* _LP64 */ +#define GPR_ARCH_32 1 +#endif /* _LP64 */ #elif defined(ANDROID) || defined(__ANDROID__) #define GPR_PLATFORM_STRING "android" #define GPR_ANDROID 1 diff --git a/include/grpc/impl/codegen/slice_buffer.h b/include/grpc/impl/codegen/slice_buffer.h index 8ca51baa4716915d1ccd4841fab5ca8e357553a6..7858021600a1690979b7b0e305a3d0639bb544e4 100644 --- a/include/grpc/impl/codegen/slice_buffer.h +++ b/include/grpc/impl/codegen/slice_buffer.h @@ -42,9 +42,8 @@ extern "C" { #define GRPC_SLICE_BUFFER_INLINE_ELEMENTS 8 -/* Represents an expandable array of slices, to be interpreted as a single item - TODO(ctiller): inline some small number of elements into the struct, to - avoid per-call allocations */ +/* Represents an expandable array of slices, to be interpreted as a + single item. */ typedef struct { /* slices in the array */ gpr_slice *slices; diff --git a/package.json b/package.json index 5ed7f363d37f9a1760afaab81a324a854a4c257a..5bdaa761e28adac5ca5f0d45b414faf2ef29ee61 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "grpc", - "version": "0.14.0-dev", + "version": "0.15.0-dev", "author": "Google Inc.", "description": "gRPC Library for Node", "homepage": "http://www.grpc.io/", @@ -67,6 +67,8 @@ "src/node/ext", "include/grpc", "src/core", + "src/boringssl", + "src/zlib", "third_party/nanopb", "third_party/zlib", "third_party/boringssl", diff --git a/package.xml b/package.xml index df47351ba1e165e99ddad3fb8f8491a31ec4b1a2..2d2b97426693b20e5da66efec78e16b38a204079 100644 --- a/package.xml +++ b/package.xml @@ -10,11 +10,11 @@ <email>grpc-packages@google.com</email> <active>yes</active> </lead> - <date>2016-04-19</date> + <date>2016-05-19</date> <time>16:06:07</time> <version> - <release>0.14.0</release> - <api>0.14.0</api> + <release>0.15.0</release> + <api>0.15.0</api> </version> <stability> <release>beta</release> @@ -22,7 +22,7 @@ </stability> <license>BSD</license> <notes> -- destroy grpc_byte_buffer after startBatch #6096 +- TBD </notes> <contents> <dir baseinstalldir="/" name="/"> @@ -156,6 +156,7 @@ <file baseinstalldir="/" name="include/grpc/grpc.h" role="src" /> <file baseinstalldir="/" name="include/grpc/status.h" role="src" /> <file baseinstalldir="/" name="include/grpc/impl/codegen/byte_buffer.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/impl/codegen/byte_buffer_reader.h" role="src" /> <file baseinstalldir="/" name="include/grpc/impl/codegen/compression_types.h" role="src" /> <file baseinstalldir="/" name="include/grpc/impl/codegen/connectivity_state.h" role="src" /> <file baseinstalldir="/" name="include/grpc/impl/codegen/grpc_types.h" role="src" /> @@ -175,6 +176,7 @@ <file baseinstalldir="/" name="include/grpc/impl/codegen/sync_posix.h" role="src" /> <file baseinstalldir="/" name="include/grpc/impl/codegen/sync_win32.h" role="src" /> <file baseinstalldir="/" name="include/grpc/impl/codegen/time.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/grpc_cronet.h" role="src" /> <file baseinstalldir="/" name="include/grpc/grpc_security.h" role="src" /> <file baseinstalldir="/" name="include/grpc/grpc_security_constants.h" role="src" /> <file baseinstalldir="/" name="include/grpc/census.h" role="src" /> @@ -196,6 +198,7 @@ <file baseinstalldir="/" name="src/core/lib/iomgr/endpoint.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/endpoint_pair.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/ev_poll_and_epoll_posix.h" role="src" /> + <file baseinstalldir="/" name="src/core/lib/iomgr/ev_poll_posix.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/ev_posix.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/exec_ctx.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/executor.h" role="src" /> @@ -302,8 +305,9 @@ <file baseinstalldir="/" name="src/core/ext/client_config/subchannel_call_holder.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_config/subchannel_index.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_config/uri_parser.h" role="src" /> + <file baseinstalldir="/" name="third_party/objective_c/Cronet/cronet_c_for_grpc.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/lb_policy/grpclb/load_balancer_api.h" role="src" /> - <file baseinstalldir="/" name="src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.h" role="src" /> + <file baseinstalldir="/" name="src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h" role="src" /> <file baseinstalldir="/" name="third_party/nanopb/pb.h" role="src" /> <file baseinstalldir="/" name="third_party/nanopb/pb_common.h" role="src" /> <file baseinstalldir="/" name="third_party/nanopb/pb_decode.h" role="src" /> @@ -335,6 +339,7 @@ <file baseinstalldir="/" name="src/core/lib/iomgr/endpoint_pair_posix.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/endpoint_pair_windows.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/ev_poll_and_epoll_posix.c" role="src" /> + <file baseinstalldir="/" name="src/core/lib/iomgr/ev_poll_posix.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/ev_posix.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/exec_ctx.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/executor.c" role="src" /> @@ -462,8 +467,11 @@ <file baseinstalldir="/" name="src/core/ext/client_config/uri_parser.c" role="src" /> <file baseinstalldir="/" name="src/core/ext/transport/chttp2/server/insecure/server_chttp2.c" role="src" /> <file baseinstalldir="/" name="src/core/ext/transport/chttp2/client/insecure/channel_create.c" role="src" /> + <file baseinstalldir="/" name="src/core/ext/transport/cronet/client/secure/cronet_channel_create.c" role="src" /> + <file baseinstalldir="/" name="src/core/ext/transport/cronet/transport/cronet_api_dummy.c" role="src" /> + <file baseinstalldir="/" name="src/core/ext/transport/cronet/transport/cronet_transport.c" role="src" /> <file baseinstalldir="/" name="src/core/ext/lb_policy/grpclb/load_balancer_api.c" role="src" /> - <file baseinstalldir="/" name="src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c" role="src" /> + <file baseinstalldir="/" name="src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c" role="src" /> <file baseinstalldir="/" name="third_party/nanopb/pb_common.c" role="src" /> <file baseinstalldir="/" name="third_party/nanopb/pb_decode.c" role="src" /> <file baseinstalldir="/" name="third_party/nanopb/pb_encode.c" role="src" /> @@ -1030,5 +1038,35 @@ Update to wrap gRPC C Core version 0.10.0 - destroy grpc_byte_buffer after startBatch #6096 </notes> </release> + <release> + <version> + <release>0.14.2</release> + <api>0.14.2</api> + </version> + <stability> + <release>beta</release> + <api>beta</api> + </stability> + <date>2016-05-18</date> + <license>BSD</license> + <notes> +- Updated functions with TSRM macros for ZTS support #6607 + </notes> + </release> + <release> + <version> + <release>0.15.0</release> + <api>0.15.0</api> + </version> + <stability> + <release>beta</release> + <api>beta</api> + </stability> + <date>2016-05-19</date> + <license>BSD</license> + <notes> +- TBD + </notes> + </release> </changelog> </package> diff --git a/setup.py b/setup.py index cd0d3a1a51b366908314a0344e59074cc18edb6c..f96824fa8834ff467d911a698b95f16aa7e05497 100644 --- a/setup.py +++ b/setup.py @@ -54,7 +54,6 @@ sys.path.insert(0, os.path.abspath(PYTHON_STEM)) # Break import-style to ensure we can actually find our in-repo dependencies. import commands -import precompiled import grpc_core_dependencies import grpc_version @@ -173,7 +172,6 @@ COMMAND_CLASS = { 'build_project_metadata': commands.BuildProjectMetadata, 'build_py': commands.BuildPy, 'build_ext': commands.BuildExt, - 'build_tagged_ext': precompiled.BuildTaggedExt, 'gather': commands.Gather, 'run_interop': commands.RunInterop, 'test_lite': commands.TestLite @@ -229,23 +227,21 @@ else: PACKAGES = setuptools.find_packages( PYTHON_STEM, exclude=['tests', 'tests.*']) -setup_arguments = { - 'name': 'grpcio', - 'version': grpc_version.VERSION, - 'license': LICENSE, - 'ext_modules': CYTHON_EXTENSION_MODULES, - 'packages': list(PACKAGES), - 'package_dir': PACKAGE_DIRECTORIES, - 'package_data': PACKAGE_DATA, - 'install_requires': INSTALL_REQUIRES, - 'setup_requires': SETUP_REQUIRES, - 'cmdclass': COMMAND_CLASS, - 'tests_require': TESTS_REQUIRE, - 'test_suite': TEST_SUITE, - 'test_loader': TEST_LOADER, - 'test_runner': TEST_RUNNER, -} - -precompiled.update_setup_arguments(setup_arguments) - -setuptools.setup(**setup_arguments) +setuptools.setup( + name='grpcio', + version=grpc_version.VERSION, + license=LICENSE, + ext_modules=CYTHON_EXTENSION_MODULES, + packages=list(PACKAGES), + package_dir=PACKAGE_DIRECTORIES, + # TODO(atash): Figure out why auditwheel doesn't like namespace packages. + #namespace_packages=['grpc'], + package_data=PACKAGE_DATA, + install_requires=INSTALL_REQUIRES, + setup_requires=SETUP_REQUIRES, + cmdclass=COMMAND_CLASS, + tests_require=TESTS_REQUIRE, + test_suite=TEST_SUITE, + test_loader=TEST_LOADER, + test_runner=TEST_RUNNER, +) diff --git a/src/compiler/csharp_generator.cc b/src/compiler/csharp_generator.cc index ac0fee1ec4ddac289bbd126019e6be52de744054..29c359c539572fdbb74e640140d021977fb68439 100644 --- a/src/compiler/csharp_generator.cc +++ b/src/compiler/csharp_generator.cc @@ -214,10 +214,10 @@ std::string GetMethodReturnTypeServer(const MethodDescriptor *method) { switch (GetMethodType(method)) { case METHODTYPE_NO_STREAMING: case METHODTYPE_CLIENT_STREAMING: - return "Task<" + GetClassName(method->output_type()) + ">"; + return "global::System.Threading.Tasks.Task<" + GetClassName(method->output_type()) + ">"; case METHODTYPE_SERVER_STREAMING: case METHODTYPE_BIDI_STREAMING: - return "Task"; + return "global::System.Threading.Tasks.Task"; } GOOGLE_LOG(FATAL)<< "Can't get here."; return ""; diff --git a/src/compiler/python_generator.cc b/src/compiler/python_generator.cc index 59137e1c9233c65a7441fdeb8b6fcca99e2bb746..cd5ddd88326a9c1b14af3d385a81f114dce13fcc 100644 --- a/src/compiler/python_generator.cc +++ b/src/compiler/python_generator.cc @@ -147,7 +147,8 @@ class IndentScope { // END FORMATTING BOILERPLATE // //////////////////////////////// -// TODO(protobuf team): Export `ModuleName` from protobuf's +// TODO(https://github.com/google/protobuf/issues/888): +// Export `ModuleName` from protobuf's // `src/google/protobuf/compiler/python/python_generator.cc` file. grpc::string ModuleName(const grpc::string& filename) { grpc::string basename = StripProto(filename); @@ -156,8 +157,23 @@ grpc::string ModuleName(const grpc::string& filename) { return basename + "_pb2"; } +// TODO(https://github.com/google/protobuf/issues/888): +// Export `ModuleAlias` from protobuf's +// `src/google/protobuf/compiler/python/python_generator.cc` file. +grpc::string ModuleAlias(const grpc::string& filename) { + grpc::string module_name = ModuleName(filename); + // We can't have dots in the module name, so we replace each with _dot_. + // But that could lead to a collision between a.b and a_dot_b, so we also + // duplicate each underscore. + module_name = StringReplace(module_name, "_", "__"); + module_name = StringReplace(module_name, ".", "_dot_"); + return module_name; +} + + bool GetModuleAndMessagePath(const Descriptor* type, - pair<grpc::string, grpc::string>* out) { + const ServiceDescriptor* service, + grpc::string* out) { const Descriptor* path_elem_type = type; vector<const Descriptor*> message_path; do { @@ -170,7 +186,9 @@ bool GetModuleAndMessagePath(const Descriptor* type, file_name.find_last_of(".proto") == file_name.size() - 1)) { return false; } - grpc::string module = ModuleName(file_name); + grpc::string service_file_name = service->file()->name(); + grpc::string module = service_file_name == file_name ? + "" : ModuleAlias(file_name) + "."; grpc::string message_type; for (auto path_iter = message_path.rbegin(); path_iter != message_path.rend(); ++path_iter) { @@ -178,22 +196,44 @@ bool GetModuleAndMessagePath(const Descriptor* type, } // no pop_back prior to C++11 message_type.resize(message_type.size() - 1); - *out = make_pair(module, message_type); + *out = module + message_type; return true; } +// Get all comments (leading, leading_detached, trailing) and print them as a +// docstring. Any leading space of a line will be removed, but the line wrapping +// will not be changed. +template <typename DescriptorType> +static void PrintAllComments(const DescriptorType* desc, Printer* printer) { + std::vector<grpc::string> comments; + grpc_generator::GetComment(desc, grpc_generator::COMMENTTYPE_LEADING_DETACHED, + &comments); + grpc_generator::GetComment(desc, grpc_generator::COMMENTTYPE_LEADING, + &comments); + grpc_generator::GetComment(desc, grpc_generator::COMMENTTYPE_TRAILING, + &comments); + if (comments.empty()) { + return; + } + printer->Print("\"\"\""); + for (auto it = comments.begin(); it != comments.end(); ++it) { + size_t start_pos = it->find_first_not_of(' '); + if (start_pos != grpc::string::npos) { + printer->Print(it->c_str() + start_pos); + } + printer->Print("\n"); + } + printer->Print("\"\"\"\n"); +} + bool PrintBetaServicer(const ServiceDescriptor* service, Printer* out) { - grpc::string doc = "<fill me in later!>"; - map<grpc::string, grpc::string> dict = ListToDict({ - "Service", service->name(), - "Documentation", doc, - }); - out->Print("\n"); - out->Print(dict, "class Beta$Service$Servicer(object):\n"); + out->Print("\n\n"); + out->Print("class Beta$Service$Servicer(object):\n", "Service", + service->name()); { IndentScope raii_class_indent(out); - out->Print(dict, "\"\"\"$Documentation$\"\"\"\n"); + PrintAllComments(service, out); for (int i = 0; i < service->method_count(); ++i) { auto meth = service->method(i); grpc::string arg_name = meth->client_streaming() ? @@ -202,6 +242,7 @@ bool PrintBetaServicer(const ServiceDescriptor* service, "Method", meth->name(), "ArgName", arg_name); { IndentScope raii_method_indent(out); + PrintAllComments(meth, out); out->Print("context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)\n"); } } @@ -211,24 +252,20 @@ bool PrintBetaServicer(const ServiceDescriptor* service, bool PrintBetaStub(const ServiceDescriptor* service, Printer* out) { - grpc::string doc = "The interface to which stubs will conform."; - map<grpc::string, grpc::string> dict = ListToDict({ - "Service", service->name(), - "Documentation", doc, - }); - out->Print("\n"); - out->Print(dict, "class Beta$Service$Stub(object):\n"); + out->Print("\n\n"); + out->Print("class Beta$Service$Stub(object):\n", "Service", service->name()); { IndentScope raii_class_indent(out); - out->Print(dict, "\"\"\"$Documentation$\"\"\"\n"); + PrintAllComments(service, out); for (int i = 0; i < service->method_count(); ++i) { const MethodDescriptor* meth = service->method(i); grpc::string arg_name = meth->client_streaming() ? "request_iterator" : "request"; auto methdict = ListToDict({"Method", meth->name(), "ArgName", arg_name}); - out->Print(methdict, "def $Method$(self, $ArgName$, timeout):\n"); + out->Print(methdict, "def $Method$(self, $ArgName$, timeout, metadata=None, with_call=False, protocol_options=None):\n"); { IndentScope raii_method_indent(out); + PrintAllComments(meth, out); out->Print("raise NotImplementedError()\n"); } if (!meth->server_streaming()) { @@ -241,38 +278,31 @@ bool PrintBetaStub(const ServiceDescriptor* service, bool PrintBetaServerFactory(const grpc::string& package_qualified_service_name, const ServiceDescriptor* service, Printer* out) { - out->Print("\n"); + out->Print("\n\n"); out->Print("def beta_create_$Service$_server(servicer, pool=None, " "pool_size=None, default_timeout=None, maximum_timeout=None):\n", "Service", service->name()); { IndentScope raii_create_server_indent(out); map<grpc::string, grpc::string> method_implementation_constructors; - map<grpc::string, pair<grpc::string, grpc::string>> - input_message_modules_and_classes; - map<grpc::string, pair<grpc::string, grpc::string>> - output_message_modules_and_classes; + map<grpc::string, grpc::string> input_message_modules_and_classes; + map<grpc::string, grpc::string> output_message_modules_and_classes; for (int i = 0; i < service->method_count(); ++i) { const MethodDescriptor* method = service->method(i); const grpc::string method_implementation_constructor = grpc::string(method->client_streaming() ? "stream_" : "unary_") + grpc::string(method->server_streaming() ? "stream_" : "unary_") + "inline"; - pair<grpc::string, grpc::string> input_message_module_and_class; - if (!GetModuleAndMessagePath(method->input_type(), + grpc::string input_message_module_and_class; + if (!GetModuleAndMessagePath(method->input_type(), service, &input_message_module_and_class)) { return false; } - pair<grpc::string, grpc::string> output_message_module_and_class; - if (!GetModuleAndMessagePath(method->output_type(), + grpc::string output_message_module_and_class; + if (!GetModuleAndMessagePath(method->output_type(), service, &output_message_module_and_class)) { return false; } - // Import the modules that define the messages used in RPCs. - out->Print("import $Module$\n", "Module", - input_message_module_and_class.first); - out->Print("import $Module$\n", "Module", - output_message_module_and_class.first); method_implementation_constructors.insert( make_pair(method->name(), method_implementation_constructor)); input_message_modules_and_classes.insert( @@ -288,13 +318,11 @@ bool PrintBetaServerFactory(const grpc::string& package_qualified_service_name, name_and_input_module_class_pair++) { IndentScope raii_indent(out); out->Print("(\'$PackageQualifiedServiceName$\', \'$MethodName$\'): " - "$InputTypeModule$.$InputTypeClass$.FromString,\n", + "$InputTypeModuleAndClass$.FromString,\n", "PackageQualifiedServiceName", package_qualified_service_name, "MethodName", name_and_input_module_class_pair->first, - "InputTypeModule", - name_and_input_module_class_pair->second.first, - "InputTypeClass", - name_and_input_module_class_pair->second.second); + "InputTypeModuleAndClass", + name_and_input_module_class_pair->second); } out->Print("}\n"); out->Print("response_serializers = {\n"); @@ -305,13 +333,11 @@ bool PrintBetaServerFactory(const grpc::string& package_qualified_service_name, name_and_output_module_class_pair++) { IndentScope raii_indent(out); out->Print("(\'$PackageQualifiedServiceName$\', \'$MethodName$\'): " - "$OutputTypeModule$.$OutputTypeClass$.SerializeToString,\n", + "$OutputTypeModuleAndClass$.SerializeToString,\n", "PackageQualifiedServiceName", package_qualified_service_name, "MethodName", name_and_output_module_class_pair->first, - "OutputTypeModule", - name_and_output_module_class_pair->second.first, - "OutputTypeClass", - name_and_output_module_class_pair->second.second); + "OutputTypeModuleAndClass", + name_and_output_module_class_pair->second); } out->Print("}\n"); out->Print("method_implementations = {\n"); @@ -347,37 +373,30 @@ bool PrintBetaStubFactory(const grpc::string& package_qualified_service_name, map<grpc::string, grpc::string> dict = ListToDict({ "Service", service->name(), }); - out->Print("\n"); + out->Print("\n\n"); out->Print(dict, "def beta_create_$Service$_stub(channel, host=None," " metadata_transformer=None, pool=None, pool_size=None):\n"); { IndentScope raii_create_server_indent(out); map<grpc::string, grpc::string> method_cardinalities; - map<grpc::string, pair<grpc::string, grpc::string>> - input_message_modules_and_classes; - map<grpc::string, pair<grpc::string, grpc::string>> - output_message_modules_and_classes; + map<grpc::string, grpc::string> input_message_modules_and_classes; + map<grpc::string, grpc::string> output_message_modules_and_classes; for (int i = 0; i < service->method_count(); ++i) { const MethodDescriptor* method = service->method(i); const grpc::string method_cardinality = grpc::string(method->client_streaming() ? "STREAM" : "UNARY") + "_" + - grpc::string(method->server_streaming() ? "STREAM" : "UNARY"); - pair<grpc::string, grpc::string> input_message_module_and_class; - if (!GetModuleAndMessagePath(method->input_type(), + grpc::string(method->server_streaming() ? "STREAM" : "UNARY"); + grpc::string input_message_module_and_class; + if (!GetModuleAndMessagePath(method->input_type(), service, &input_message_module_and_class)) { return false; } - pair<grpc::string, grpc::string> output_message_module_and_class; - if (!GetModuleAndMessagePath(method->output_type(), + grpc::string output_message_module_and_class; + if (!GetModuleAndMessagePath(method->output_type(), service, &output_message_module_and_class)) { return false; } - // Import the modules that define the messages used in RPCs. - out->Print("import $Module$\n", "Module", - input_message_module_and_class.first); - out->Print("import $Module$\n", "Module", - output_message_module_and_class.first); method_cardinalities.insert( make_pair(method->name(), method_cardinality)); input_message_modules_and_classes.insert( @@ -393,13 +412,11 @@ bool PrintBetaStubFactory(const grpc::string& package_qualified_service_name, name_and_input_module_class_pair++) { IndentScope raii_indent(out); out->Print("(\'$PackageQualifiedServiceName$\', \'$MethodName$\'): " - "$InputTypeModule$.$InputTypeClass$.SerializeToString,\n", + "$InputTypeModuleAndClass$.SerializeToString,\n", "PackageQualifiedServiceName", package_qualified_service_name, "MethodName", name_and_input_module_class_pair->first, - "InputTypeModule", - name_and_input_module_class_pair->second.first, - "InputTypeClass", - name_and_input_module_class_pair->second.second); + "InputTypeModuleAndClass", + name_and_input_module_class_pair->second); } out->Print("}\n"); out->Print("response_deserializers = {\n"); @@ -410,13 +427,11 @@ bool PrintBetaStubFactory(const grpc::string& package_qualified_service_name, name_and_output_module_class_pair++) { IndentScope raii_indent(out); out->Print("(\'$PackageQualifiedServiceName$\', \'$MethodName$\'): " - "$OutputTypeModule$.$OutputTypeClass$.FromString,\n", + "$OutputTypeModuleAndClass$.FromString,\n", "PackageQualifiedServiceName", package_qualified_service_name, "MethodName", name_and_output_module_class_pair->first, - "OutputTypeModule", - name_and_output_module_class_pair->second.first, - "OutputTypeClass", - name_and_output_module_class_pair->second.second); + "OutputTypeModuleAndClass", + name_and_output_module_class_pair->second); } out->Print("}\n"); out->Print("cardinalities = {\n"); @@ -444,8 +459,6 @@ bool PrintBetaStubFactory(const grpc::string& package_qualified_service_name, bool PrintPreamble(const FileDescriptor* file, const GeneratorConfiguration& config, Printer* out) { - out->Print("import abc\n"); - out->Print("import six\n"); out->Print("from $Package$ import implementations as beta_implementations\n", "Package", config.beta_package_root); out->Print("from $Package$ import interfaces as beta_interfaces\n", diff --git a/src/compiler/ruby_generator.cc b/src/compiler/ruby_generator.cc index 5ac56ad289cb1f8f8e0000bb6601b783beb7727f..936a186beb5a4d097dbaaa9c2e5bb7b6f7560aa1 100644 --- a/src/compiler/ruby_generator.cc +++ b/src/compiler/ruby_generator.cc @@ -98,8 +98,8 @@ void PrintService(const ServiceDescriptor *service, const grpc::string &package, out->Print("self.marshal_class_method = :encode\n"); out->Print("self.unmarshal_class_method = :decode\n"); std::map<grpc::string, grpc::string> pkg_vars = - ListToDict({"service.name", service->name(), "pkg.name", package, }); - out->Print(pkg_vars, "self.service_name = '$pkg.name$.$service.name$'\n"); + ListToDict({"service_full_name", service->full_name()}); + out->Print(pkg_vars, "self.service_name = '$service_full_name$'\n"); out->Print("\n"); for (int i = 0; i < service->method_count(); ++i) { PrintMethod(service->method(i), package, out); diff --git a/src/core/ext/client_config/resolver_registry.c b/src/core/ext/client_config/resolver_registry.c index 07f29bcb27a9b1de6fdbd76243fa7446889c31f0..e7a4abd568c0112b60da65835dd4aafeb40375d2 100644 --- a/src/core/ext/client_config/resolver_registry.c +++ b/src/core/ext/client_config/resolver_registry.c @@ -47,7 +47,6 @@ static int g_number_of_resolvers = 0; static char *g_default_resolver_prefix; void grpc_resolver_registry_init(const char *default_resolver_prefix) { - g_number_of_resolvers = 0; g_default_resolver_prefix = gpr_strdup(default_resolver_prefix); } @@ -57,6 +56,13 @@ void grpc_resolver_registry_shutdown(void) { grpc_resolver_factory_unref(g_all_of_the_resolvers[i]); } gpr_free(g_default_resolver_prefix); + // FIXME(ctiller): this should live in grpc_resolver_registry_init, + // however that would have the client_config plugin call this AFTER we start + // registering resolvers from third party plugins, and so they'd never show + // up. + // We likely need some kind of dependency system for plugins.... what form + // that takes is TBD. + g_number_of_resolvers = 0; } void grpc_register_resolver_type(grpc_resolver_factory *factory) { diff --git a/src/core/ext/client_config/subchannel_call_holder.c b/src/core/ext/client_config/subchannel_call_holder.c index 9918fbdcb4fe3e37c8aa09fbc7344c89f4746666..91fa917661c8527bfc8ec98287fa04f6b71de66b 100644 --- a/src/core/ext/client_config/subchannel_call_holder.c +++ b/src/core/ext/client_config/subchannel_call_holder.c @@ -174,6 +174,7 @@ static void subchannel_ready(grpc_exec_ctx *exec_ctx, void *arg, bool success) { GRPC_SUBCHANNEL_CALL_HOLDER_PICKING_SUBCHANNEL); holder->creation_phase = GRPC_SUBCHANNEL_CALL_HOLDER_NOT_CREATING; if (holder->connected_subchannel == NULL) { + gpr_atm_no_barrier_store(&holder->subchannel_call, 1); fail_locked(exec_ctx, holder); } else if (1 == gpr_atm_acq_load(&holder->subchannel_call)) { /* already cancelled before subchannel became ready */ diff --git a/src/core/ext/lb_policy/grpclb/load_balancer_api.c b/src/core/ext/lb_policy/grpclb/load_balancer_api.c index 459d6d9954dfdece9f56661dff841ab85271640c..59b89997dd96735e4518ed267b0b9a27abf1f76d 100644 --- a/src/core/ext/lb_policy/grpclb/load_balancer_api.c +++ b/src/core/ext/lb_policy/grpclb/load_balancer_api.c @@ -50,7 +50,7 @@ static bool decode_serverlist(pb_istream_t *stream, const pb_field_t *field, decode_serverlist_arg *dec_arg = *arg; if (dec_arg->first_pass != 0) { /* first pass */ grpc_grpclb_server server; - if (!pb_decode(stream, grpc_lb_v0_Server_fields, &server)) { + if (!pb_decode(stream, grpc_lb_v1_Server_fields, &server)) { return false; } dec_arg->num_servers++; @@ -61,7 +61,7 @@ static bool decode_serverlist(pb_istream_t *stream, const pb_field_t *field, dec_arg->servers = gpr_malloc(sizeof(grpc_grpclb_server *) * dec_arg->num_servers); } - if (!pb_decode(stream, grpc_lb_v0_Server_fields, server)) { + if (!pb_decode(stream, grpc_lb_v1_Server_fields, server)) { return false; } dec_arg->servers[dec_arg->i++] = server; @@ -87,13 +87,13 @@ gpr_slice grpc_grpclb_request_encode(const grpc_grpclb_request *request) { pb_ostream_t outputstream; gpr_slice slice; memset(&sizestream, 0, sizeof(pb_ostream_t)); - pb_encode(&sizestream, grpc_lb_v0_LoadBalanceRequest_fields, request); + pb_encode(&sizestream, grpc_lb_v1_LoadBalanceRequest_fields, request); encoded_length = sizestream.bytes_written; slice = gpr_slice_malloc(encoded_length); outputstream = pb_ostream_from_buffer(GPR_SLICE_START_PTR(slice), encoded_length); - GPR_ASSERT(pb_encode(&outputstream, grpc_lb_v0_LoadBalanceRequest_fields, + GPR_ASSERT(pb_encode(&outputstream, grpc_lb_v1_LoadBalanceRequest_fields, request) != 0); return slice; } @@ -109,7 +109,7 @@ grpc_grpclb_response *grpc_grpclb_response_parse(gpr_slice encoded_response) { GPR_SLICE_LENGTH(encoded_response)); grpc_grpclb_response *res = gpr_malloc(sizeof(grpc_grpclb_response)); memset(res, 0, sizeof(*res)); - status = pb_decode(&stream, grpc_lb_v0_LoadBalanceResponse_fields, res); + status = pb_decode(&stream, grpc_lb_v1_LoadBalanceResponse_fields, res); if (!status) { grpc_grpclb_response_destroy(res); return NULL; @@ -132,7 +132,7 @@ grpc_grpclb_serverlist *grpc_grpclb_response_parse_serverlist( res->server_list.servers.funcs.decode = decode_serverlist; res->server_list.servers.arg = &arg; arg.first_pass = 1; - status = pb_decode(&stream, grpc_lb_v0_LoadBalanceResponse_fields, res); + status = pb_decode(&stream, grpc_lb_v1_LoadBalanceResponse_fields, res); if (!status) { grpc_grpclb_response_destroy(res); return NULL; @@ -140,7 +140,7 @@ grpc_grpclb_serverlist *grpc_grpclb_response_parse_serverlist( arg.first_pass = 0; status = - pb_decode(&stream_at_start, grpc_lb_v0_LoadBalanceResponse_fields, res); + pb_decode(&stream_at_start, grpc_lb_v1_LoadBalanceResponse_fields, res); if (!status) { grpc_grpclb_response_destroy(res); return NULL; diff --git a/src/core/ext/lb_policy/grpclb/load_balancer_api.h b/src/core/ext/lb_policy/grpclb/load_balancer_api.h index 968f7d278ae86649d29445f6acbc9cec4f0bb53c..71b5616d0c8b9cc4fc11cd22fc66fb57867ef113 100644 --- a/src/core/ext/lb_policy/grpclb/load_balancer_api.h +++ b/src/core/ext/lb_policy/grpclb/load_balancer_api.h @@ -37,7 +37,7 @@ #include <grpc/support/slice_buffer.h> #include "src/core/ext/client_config/lb_policy_factory.h" -#include "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.h" +#include "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h" #ifdef __cplusplus extern "C" { @@ -45,10 +45,10 @@ extern "C" { #define GRPC_GRPCLB_SERVICE_NAME_MAX_LENGTH 128 -typedef grpc_lb_v0_LoadBalanceRequest grpc_grpclb_request; -typedef grpc_lb_v0_LoadBalanceResponse grpc_grpclb_response; -typedef grpc_lb_v0_Server grpc_grpclb_server; -typedef grpc_lb_v0_Duration grpc_grpclb_duration; +typedef grpc_lb_v1_LoadBalanceRequest grpc_grpclb_request; +typedef grpc_lb_v1_LoadBalanceResponse grpc_grpclb_response; +typedef grpc_lb_v1_Server grpc_grpclb_server; +typedef grpc_lb_v1_Duration grpc_grpclb_duration; typedef struct grpc_grpclb_serverlist { grpc_grpclb_server **servers; size_t num_servers; diff --git a/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.h b/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.h deleted file mode 100644 index 3599f881bb17e328389f01ce9493cd42f4184490..0000000000000000000000000000000000000000 --- a/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.h +++ /dev/null @@ -1,182 +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. - * - */ -/* Automatically generated nanopb header */ -/* Generated by nanopb-0.3.5-dev */ - -#ifndef PB_LOAD_BALANCER_PB_H_INCLUDED -#define PB_LOAD_BALANCER_PB_H_INCLUDED -#include "third_party/nanopb/pb.h" -#if PB_PROTO_HEADER_VERSION != 30 -#error Regenerate this file with the current version of nanopb generator. -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -/* Struct definitions */ -typedef struct _grpc_lb_v0_ClientStats { - bool has_total_requests; - int64_t total_requests; - bool has_client_rpc_errors; - int64_t client_rpc_errors; - bool has_dropped_requests; - int64_t dropped_requests; -} grpc_lb_v0_ClientStats; - -typedef struct _grpc_lb_v0_Duration { - bool has_seconds; - int64_t seconds; - bool has_nanos; - int32_t nanos; -} grpc_lb_v0_Duration; - -typedef struct _grpc_lb_v0_InitialLoadBalanceRequest { - bool has_name; - char name[128]; -} grpc_lb_v0_InitialLoadBalanceRequest; - -typedef PB_BYTES_ARRAY_T(64) grpc_lb_v0_Server_load_balance_token_t; -typedef struct _grpc_lb_v0_Server { - bool has_ip_address; - char ip_address[46]; - bool has_port; - int32_t port; - bool has_load_balance_token; - grpc_lb_v0_Server_load_balance_token_t load_balance_token; - bool has_drop_request; - bool drop_request; -} grpc_lb_v0_Server; - -typedef struct _grpc_lb_v0_InitialLoadBalanceResponse { - bool has_client_config; - char client_config[64]; - bool has_load_balancer_delegate; - char load_balancer_delegate[64]; - bool has_client_stats_report_interval; - grpc_lb_v0_Duration client_stats_report_interval; -} grpc_lb_v0_InitialLoadBalanceResponse; - -typedef struct _grpc_lb_v0_LoadBalanceRequest { - bool has_initial_request; - grpc_lb_v0_InitialLoadBalanceRequest initial_request; - bool has_client_stats; - grpc_lb_v0_ClientStats client_stats; -} grpc_lb_v0_LoadBalanceRequest; - -typedef struct _grpc_lb_v0_ServerList { - pb_callback_t servers; - bool has_expiration_interval; - grpc_lb_v0_Duration expiration_interval; -} grpc_lb_v0_ServerList; - -typedef struct _grpc_lb_v0_LoadBalanceResponse { - bool has_initial_response; - grpc_lb_v0_InitialLoadBalanceResponse initial_response; - bool has_server_list; - grpc_lb_v0_ServerList server_list; -} grpc_lb_v0_LoadBalanceResponse; - -/* Default values for struct fields */ - -/* Initializer values for message structs */ -#define grpc_lb_v0_Duration_init_default {false, 0, false, 0} -#define grpc_lb_v0_LoadBalanceRequest_init_default {false, grpc_lb_v0_InitialLoadBalanceRequest_init_default, false, grpc_lb_v0_ClientStats_init_default} -#define grpc_lb_v0_InitialLoadBalanceRequest_init_default {false, ""} -#define grpc_lb_v0_ClientStats_init_default {false, 0, false, 0, false, 0} -#define grpc_lb_v0_LoadBalanceResponse_init_default {false, grpc_lb_v0_InitialLoadBalanceResponse_init_default, false, grpc_lb_v0_ServerList_init_default} -#define grpc_lb_v0_InitialLoadBalanceResponse_init_default {false, "", false, "", false, grpc_lb_v0_Duration_init_default} -#define grpc_lb_v0_ServerList_init_default {{{NULL}, NULL}, false, grpc_lb_v0_Duration_init_default} -#define grpc_lb_v0_Server_init_default {false, "", false, 0, false, {0, {0}}, false, 0} -#define grpc_lb_v0_Duration_init_zero {false, 0, false, 0} -#define grpc_lb_v0_LoadBalanceRequest_init_zero {false, grpc_lb_v0_InitialLoadBalanceRequest_init_zero, false, grpc_lb_v0_ClientStats_init_zero} -#define grpc_lb_v0_InitialLoadBalanceRequest_init_zero {false, ""} -#define grpc_lb_v0_ClientStats_init_zero {false, 0, false, 0, false, 0} -#define grpc_lb_v0_LoadBalanceResponse_init_zero {false, grpc_lb_v0_InitialLoadBalanceResponse_init_zero, false, grpc_lb_v0_ServerList_init_zero} -#define grpc_lb_v0_InitialLoadBalanceResponse_init_zero {false, "", false, "", false, grpc_lb_v0_Duration_init_zero} -#define grpc_lb_v0_ServerList_init_zero {{{NULL}, NULL}, false, grpc_lb_v0_Duration_init_zero} -#define grpc_lb_v0_Server_init_zero {false, "", false, 0, false, {0, {0}}, false, 0} - -/* Field tags (for use in manual encoding/decoding) */ -#define grpc_lb_v0_ClientStats_total_requests_tag 1 -#define grpc_lb_v0_ClientStats_client_rpc_errors_tag 2 -#define grpc_lb_v0_ClientStats_dropped_requests_tag 3 -#define grpc_lb_v0_Duration_seconds_tag 1 -#define grpc_lb_v0_Duration_nanos_tag 2 -#define grpc_lb_v0_InitialLoadBalanceRequest_name_tag 1 -#define grpc_lb_v0_Server_ip_address_tag 1 -#define grpc_lb_v0_Server_port_tag 2 -#define grpc_lb_v0_Server_load_balance_token_tag 3 -#define grpc_lb_v0_Server_drop_request_tag 4 -#define grpc_lb_v0_InitialLoadBalanceResponse_client_config_tag 1 -#define grpc_lb_v0_InitialLoadBalanceResponse_load_balancer_delegate_tag 2 -#define grpc_lb_v0_InitialLoadBalanceResponse_client_stats_report_interval_tag 3 -#define grpc_lb_v0_LoadBalanceRequest_initial_request_tag 1 -#define grpc_lb_v0_LoadBalanceRequest_client_stats_tag 2 -#define grpc_lb_v0_ServerList_servers_tag 1 -#define grpc_lb_v0_ServerList_expiration_interval_tag 3 -#define grpc_lb_v0_LoadBalanceResponse_initial_response_tag 1 -#define grpc_lb_v0_LoadBalanceResponse_server_list_tag 2 - -/* Struct field encoding specification for nanopb */ -extern const pb_field_t grpc_lb_v0_Duration_fields[3]; -extern const pb_field_t grpc_lb_v0_LoadBalanceRequest_fields[3]; -extern const pb_field_t grpc_lb_v0_InitialLoadBalanceRequest_fields[2]; -extern const pb_field_t grpc_lb_v0_ClientStats_fields[4]; -extern const pb_field_t grpc_lb_v0_LoadBalanceResponse_fields[3]; -extern const pb_field_t grpc_lb_v0_InitialLoadBalanceResponse_fields[4]; -extern const pb_field_t grpc_lb_v0_ServerList_fields[3]; -extern const pb_field_t grpc_lb_v0_Server_fields[5]; - -/* Maximum encoded size of messages (where known) */ -#define grpc_lb_v0_Duration_size 22 -#define grpc_lb_v0_LoadBalanceRequest_size 169 -#define grpc_lb_v0_InitialLoadBalanceRequest_size 131 -#define grpc_lb_v0_ClientStats_size 33 -#define grpc_lb_v0_LoadBalanceResponse_size (165 + grpc_lb_v0_ServerList_size) -#define grpc_lb_v0_InitialLoadBalanceResponse_size 156 -#define grpc_lb_v0_Server_size 127 - -/* Message IDs (where set with "msgid" option) */ -#ifdef PB_MSGID - -#define LOAD_BALANCER_MESSAGES \ - - -#endif - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif diff --git a/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c b/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c similarity index 55% rename from src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c rename to src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c index 97196731810e71f15122f1efd882d5b3cfdeab57..52e11c40bb0dca24b11ad726f485c76db12bbe69 100644 --- a/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c +++ b/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c @@ -33,7 +33,7 @@ /* Automatically generated nanopb constant definitions */ /* Generated by nanopb-0.3.5-dev */ -#include "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.h" +#include "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h" #if PB_PROTO_HEADER_VERSION != 30 #error Regenerate this file with the current version of nanopb generator. @@ -41,54 +41,53 @@ -const pb_field_t grpc_lb_v0_Duration_fields[3] = { - PB_FIELD( 1, INT64 , OPTIONAL, STATIC , FIRST, grpc_lb_v0_Duration, seconds, seconds, 0), - PB_FIELD( 2, INT32 , OPTIONAL, STATIC , OTHER, grpc_lb_v0_Duration, nanos, seconds, 0), +const pb_field_t grpc_lb_v1_Duration_fields[3] = { + PB_FIELD( 1, INT64 , OPTIONAL, STATIC , FIRST, grpc_lb_v1_Duration, seconds, seconds, 0), + PB_FIELD( 2, INT32 , OPTIONAL, STATIC , OTHER, grpc_lb_v1_Duration, nanos, seconds, 0), PB_LAST_FIELD }; -const pb_field_t grpc_lb_v0_LoadBalanceRequest_fields[3] = { - PB_FIELD( 1, MESSAGE , OPTIONAL, STATIC , FIRST, grpc_lb_v0_LoadBalanceRequest, initial_request, initial_request, &grpc_lb_v0_InitialLoadBalanceRequest_fields), - PB_FIELD( 2, MESSAGE , OPTIONAL, STATIC , OTHER, grpc_lb_v0_LoadBalanceRequest, client_stats, initial_request, &grpc_lb_v0_ClientStats_fields), +const pb_field_t grpc_lb_v1_LoadBalanceRequest_fields[3] = { + PB_FIELD( 1, MESSAGE , OPTIONAL, STATIC , FIRST, grpc_lb_v1_LoadBalanceRequest, initial_request, initial_request, &grpc_lb_v1_InitialLoadBalanceRequest_fields), + PB_FIELD( 2, MESSAGE , OPTIONAL, STATIC , OTHER, grpc_lb_v1_LoadBalanceRequest, client_stats, initial_request, &grpc_lb_v1_ClientStats_fields), PB_LAST_FIELD }; -const pb_field_t grpc_lb_v0_InitialLoadBalanceRequest_fields[2] = { - PB_FIELD( 1, STRING , OPTIONAL, STATIC , FIRST, grpc_lb_v0_InitialLoadBalanceRequest, name, name, 0), +const pb_field_t grpc_lb_v1_InitialLoadBalanceRequest_fields[2] = { + PB_FIELD( 1, STRING , OPTIONAL, STATIC , FIRST, grpc_lb_v1_InitialLoadBalanceRequest, name, name, 0), PB_LAST_FIELD }; -const pb_field_t grpc_lb_v0_ClientStats_fields[4] = { - PB_FIELD( 1, INT64 , OPTIONAL, STATIC , FIRST, grpc_lb_v0_ClientStats, total_requests, total_requests, 0), - PB_FIELD( 2, INT64 , OPTIONAL, STATIC , OTHER, grpc_lb_v0_ClientStats, client_rpc_errors, total_requests, 0), - PB_FIELD( 3, INT64 , OPTIONAL, STATIC , OTHER, grpc_lb_v0_ClientStats, dropped_requests, client_rpc_errors, 0), +const pb_field_t grpc_lb_v1_ClientStats_fields[4] = { + PB_FIELD( 1, INT64 , OPTIONAL, STATIC , FIRST, grpc_lb_v1_ClientStats, total_requests, total_requests, 0), + PB_FIELD( 2, INT64 , OPTIONAL, STATIC , OTHER, grpc_lb_v1_ClientStats, client_rpc_errors, total_requests, 0), + PB_FIELD( 3, INT64 , OPTIONAL, STATIC , OTHER, grpc_lb_v1_ClientStats, dropped_requests, client_rpc_errors, 0), PB_LAST_FIELD }; -const pb_field_t grpc_lb_v0_LoadBalanceResponse_fields[3] = { - PB_FIELD( 1, MESSAGE , OPTIONAL, STATIC , FIRST, grpc_lb_v0_LoadBalanceResponse, initial_response, initial_response, &grpc_lb_v0_InitialLoadBalanceResponse_fields), - PB_FIELD( 2, MESSAGE , OPTIONAL, STATIC , OTHER, grpc_lb_v0_LoadBalanceResponse, server_list, initial_response, &grpc_lb_v0_ServerList_fields), +const pb_field_t grpc_lb_v1_LoadBalanceResponse_fields[3] = { + PB_FIELD( 1, MESSAGE , OPTIONAL, STATIC , FIRST, grpc_lb_v1_LoadBalanceResponse, initial_response, initial_response, &grpc_lb_v1_InitialLoadBalanceResponse_fields), + PB_FIELD( 2, MESSAGE , OPTIONAL, STATIC , OTHER, grpc_lb_v1_LoadBalanceResponse, server_list, initial_response, &grpc_lb_v1_ServerList_fields), PB_LAST_FIELD }; -const pb_field_t grpc_lb_v0_InitialLoadBalanceResponse_fields[4] = { - PB_FIELD( 1, STRING , OPTIONAL, STATIC , FIRST, grpc_lb_v0_InitialLoadBalanceResponse, client_config, client_config, 0), - PB_FIELD( 2, STRING , OPTIONAL, STATIC , OTHER, grpc_lb_v0_InitialLoadBalanceResponse, load_balancer_delegate, client_config, 0), - PB_FIELD( 3, MESSAGE , OPTIONAL, STATIC , OTHER, grpc_lb_v0_InitialLoadBalanceResponse, client_stats_report_interval, load_balancer_delegate, &grpc_lb_v0_Duration_fields), +const pb_field_t grpc_lb_v1_InitialLoadBalanceResponse_fields[3] = { + PB_FIELD( 2, STRING , OPTIONAL, STATIC , FIRST, grpc_lb_v1_InitialLoadBalanceResponse, load_balancer_delegate, load_balancer_delegate, 0), + PB_FIELD( 3, MESSAGE , OPTIONAL, STATIC , OTHER, grpc_lb_v1_InitialLoadBalanceResponse, client_stats_report_interval, load_balancer_delegate, &grpc_lb_v1_Duration_fields), PB_LAST_FIELD }; -const pb_field_t grpc_lb_v0_ServerList_fields[3] = { - PB_FIELD( 1, MESSAGE , REPEATED, CALLBACK, FIRST, grpc_lb_v0_ServerList, servers, servers, &grpc_lb_v0_Server_fields), - PB_FIELD( 3, MESSAGE , OPTIONAL, STATIC , OTHER, grpc_lb_v0_ServerList, expiration_interval, servers, &grpc_lb_v0_Duration_fields), +const pb_field_t grpc_lb_v1_ServerList_fields[3] = { + PB_FIELD( 1, MESSAGE , REPEATED, CALLBACK, FIRST, grpc_lb_v1_ServerList, servers, servers, &grpc_lb_v1_Server_fields), + PB_FIELD( 3, MESSAGE , OPTIONAL, STATIC , OTHER, grpc_lb_v1_ServerList, expiration_interval, servers, &grpc_lb_v1_Duration_fields), PB_LAST_FIELD }; -const pb_field_t grpc_lb_v0_Server_fields[5] = { - PB_FIELD( 1, STRING , OPTIONAL, STATIC , FIRST, grpc_lb_v0_Server, ip_address, ip_address, 0), - PB_FIELD( 2, INT32 , OPTIONAL, STATIC , OTHER, grpc_lb_v0_Server, port, ip_address, 0), - PB_FIELD( 3, BYTES , OPTIONAL, STATIC , OTHER, grpc_lb_v0_Server, load_balance_token, port, 0), - PB_FIELD( 4, BOOL , OPTIONAL, STATIC , OTHER, grpc_lb_v0_Server, drop_request, load_balance_token, 0), +const pb_field_t grpc_lb_v1_Server_fields[5] = { + PB_FIELD( 1, STRING , OPTIONAL, STATIC , FIRST, grpc_lb_v1_Server, ip_address, ip_address, 0), + PB_FIELD( 2, INT32 , OPTIONAL, STATIC , OTHER, grpc_lb_v1_Server, port, ip_address, 0), + PB_FIELD( 3, STRING , OPTIONAL, STATIC , OTHER, grpc_lb_v1_Server, load_balance_token, port, 0), + PB_FIELD( 4, BOOL , OPTIONAL, STATIC , OTHER, grpc_lb_v1_Server, drop_request, load_balance_token, 0), PB_LAST_FIELD }; @@ -102,7 +101,7 @@ const pb_field_t grpc_lb_v0_Server_fields[5] = { * numbers or field sizes that are larger than what can fit in 8 or 16 bit * field descriptors. */ -PB_STATIC_ASSERT((pb_membersize(grpc_lb_v0_LoadBalanceRequest, initial_request) < 65536 && pb_membersize(grpc_lb_v0_LoadBalanceRequest, client_stats) < 65536 && pb_membersize(grpc_lb_v0_LoadBalanceResponse, initial_response) < 65536 && pb_membersize(grpc_lb_v0_LoadBalanceResponse, server_list) < 65536 && pb_membersize(grpc_lb_v0_InitialLoadBalanceResponse, client_stats_report_interval) < 65536 && pb_membersize(grpc_lb_v0_ServerList, servers) < 65536 && pb_membersize(grpc_lb_v0_ServerList, expiration_interval) < 65536), YOU_MUST_DEFINE_PB_FIELD_32BIT_FOR_MESSAGES_grpc_lb_v0_Duration_grpc_lb_v0_LoadBalanceRequest_grpc_lb_v0_InitialLoadBalanceRequest_grpc_lb_v0_ClientStats_grpc_lb_v0_LoadBalanceResponse_grpc_lb_v0_InitialLoadBalanceResponse_grpc_lb_v0_ServerList_grpc_lb_v0_Server) +PB_STATIC_ASSERT((pb_membersize(grpc_lb_v1_LoadBalanceRequest, initial_request) < 65536 && pb_membersize(grpc_lb_v1_LoadBalanceRequest, client_stats) < 65536 && pb_membersize(grpc_lb_v1_LoadBalanceResponse, initial_response) < 65536 && pb_membersize(grpc_lb_v1_LoadBalanceResponse, server_list) < 65536 && pb_membersize(grpc_lb_v1_InitialLoadBalanceResponse, client_stats_report_interval) < 65536 && pb_membersize(grpc_lb_v1_ServerList, servers) < 65536 && pb_membersize(grpc_lb_v1_ServerList, expiration_interval) < 65536), YOU_MUST_DEFINE_PB_FIELD_32BIT_FOR_MESSAGES_grpc_lb_v1_Duration_grpc_lb_v1_LoadBalanceRequest_grpc_lb_v1_InitialLoadBalanceRequest_grpc_lb_v1_ClientStats_grpc_lb_v1_LoadBalanceResponse_grpc_lb_v1_InitialLoadBalanceResponse_grpc_lb_v1_ServerList_grpc_lb_v1_Server) #endif #if !defined(PB_FIELD_16BIT) && !defined(PB_FIELD_32BIT) @@ -113,7 +112,7 @@ PB_STATIC_ASSERT((pb_membersize(grpc_lb_v0_LoadBalanceRequest, initial_request) * numbers or field sizes that are larger than what can fit in the default * 8 bit descriptors. */ -PB_STATIC_ASSERT((pb_membersize(grpc_lb_v0_LoadBalanceRequest, initial_request) < 256 && pb_membersize(grpc_lb_v0_LoadBalanceRequest, client_stats) < 256 && pb_membersize(grpc_lb_v0_LoadBalanceResponse, initial_response) < 256 && pb_membersize(grpc_lb_v0_LoadBalanceResponse, server_list) < 256 && pb_membersize(grpc_lb_v0_InitialLoadBalanceResponse, client_stats_report_interval) < 256 && pb_membersize(grpc_lb_v0_ServerList, servers) < 256 && pb_membersize(grpc_lb_v0_ServerList, expiration_interval) < 256), YOU_MUST_DEFINE_PB_FIELD_16BIT_FOR_MESSAGES_grpc_lb_v0_Duration_grpc_lb_v0_LoadBalanceRequest_grpc_lb_v0_InitialLoadBalanceRequest_grpc_lb_v0_ClientStats_grpc_lb_v0_LoadBalanceResponse_grpc_lb_v0_InitialLoadBalanceResponse_grpc_lb_v0_ServerList_grpc_lb_v0_Server) +PB_STATIC_ASSERT((pb_membersize(grpc_lb_v1_LoadBalanceRequest, initial_request) < 256 && pb_membersize(grpc_lb_v1_LoadBalanceRequest, client_stats) < 256 && pb_membersize(grpc_lb_v1_LoadBalanceResponse, initial_response) < 256 && pb_membersize(grpc_lb_v1_LoadBalanceResponse, server_list) < 256 && pb_membersize(grpc_lb_v1_InitialLoadBalanceResponse, client_stats_report_interval) < 256 && pb_membersize(grpc_lb_v1_ServerList, servers) < 256 && pb_membersize(grpc_lb_v1_ServerList, expiration_interval) < 256), YOU_MUST_DEFINE_PB_FIELD_16BIT_FOR_MESSAGES_grpc_lb_v1_Duration_grpc_lb_v1_LoadBalanceRequest_grpc_lb_v1_InitialLoadBalanceRequest_grpc_lb_v1_ClientStats_grpc_lb_v1_LoadBalanceResponse_grpc_lb_v1_InitialLoadBalanceResponse_grpc_lb_v1_ServerList_grpc_lb_v1_Server) #endif diff --git a/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h b/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h new file mode 100644 index 0000000000000000000000000000000000000000..d5dc39ab94f2b48ea36717c1a69f3df3f556da34 --- /dev/null +++ b/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h @@ -0,0 +1,178 @@ +/* + * + * 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. + * + */ +/* Automatically generated nanopb header */ +/* Generated by nanopb-0.3.5-dev */ + +#ifndef PB_LOAD_BALANCER_PB_H_INCLUDED +#define PB_LOAD_BALANCER_PB_H_INCLUDED +#include "third_party/nanopb/pb.h" +#if PB_PROTO_HEADER_VERSION != 30 +#error Regenerate this file with the current version of nanopb generator. +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Struct definitions */ +typedef struct _grpc_lb_v1_ClientStats { + bool has_total_requests; + int64_t total_requests; + bool has_client_rpc_errors; + int64_t client_rpc_errors; + bool has_dropped_requests; + int64_t dropped_requests; +} grpc_lb_v1_ClientStats; + +typedef struct _grpc_lb_v1_Duration { + bool has_seconds; + int64_t seconds; + bool has_nanos; + int32_t nanos; +} grpc_lb_v1_Duration; + +typedef struct _grpc_lb_v1_InitialLoadBalanceRequest { + bool has_name; + char name[128]; +} grpc_lb_v1_InitialLoadBalanceRequest; + +typedef struct _grpc_lb_v1_Server { + bool has_ip_address; + char ip_address[46]; + bool has_port; + int32_t port; + bool has_load_balance_token; + char load_balance_token[64]; + bool has_drop_request; + bool drop_request; +} grpc_lb_v1_Server; + +typedef struct _grpc_lb_v1_InitialLoadBalanceResponse { + bool has_load_balancer_delegate; + char load_balancer_delegate[64]; + bool has_client_stats_report_interval; + grpc_lb_v1_Duration client_stats_report_interval; +} grpc_lb_v1_InitialLoadBalanceResponse; + +typedef struct _grpc_lb_v1_LoadBalanceRequest { + bool has_initial_request; + grpc_lb_v1_InitialLoadBalanceRequest initial_request; + bool has_client_stats; + grpc_lb_v1_ClientStats client_stats; +} grpc_lb_v1_LoadBalanceRequest; + +typedef struct _grpc_lb_v1_ServerList { + pb_callback_t servers; + bool has_expiration_interval; + grpc_lb_v1_Duration expiration_interval; +} grpc_lb_v1_ServerList; + +typedef struct _grpc_lb_v1_LoadBalanceResponse { + bool has_initial_response; + grpc_lb_v1_InitialLoadBalanceResponse initial_response; + bool has_server_list; + grpc_lb_v1_ServerList server_list; +} grpc_lb_v1_LoadBalanceResponse; + +/* Default values for struct fields */ + +/* Initializer values for message structs */ +#define grpc_lb_v1_Duration_init_default {false, 0, false, 0} +#define grpc_lb_v1_LoadBalanceRequest_init_default {false, grpc_lb_v1_InitialLoadBalanceRequest_init_default, false, grpc_lb_v1_ClientStats_init_default} +#define grpc_lb_v1_InitialLoadBalanceRequest_init_default {false, ""} +#define grpc_lb_v1_ClientStats_init_default {false, 0, false, 0, false, 0} +#define grpc_lb_v1_LoadBalanceResponse_init_default {false, grpc_lb_v1_InitialLoadBalanceResponse_init_default, false, grpc_lb_v1_ServerList_init_default} +#define grpc_lb_v1_InitialLoadBalanceResponse_init_default {false, "", false, grpc_lb_v1_Duration_init_default} +#define grpc_lb_v1_ServerList_init_default {{{NULL}, NULL}, false, grpc_lb_v1_Duration_init_default} +#define grpc_lb_v1_Server_init_default {false, "", false, 0, false, "", false, 0} +#define grpc_lb_v1_Duration_init_zero {false, 0, false, 0} +#define grpc_lb_v1_LoadBalanceRequest_init_zero {false, grpc_lb_v1_InitialLoadBalanceRequest_init_zero, false, grpc_lb_v1_ClientStats_init_zero} +#define grpc_lb_v1_InitialLoadBalanceRequest_init_zero {false, ""} +#define grpc_lb_v1_ClientStats_init_zero {false, 0, false, 0, false, 0} +#define grpc_lb_v1_LoadBalanceResponse_init_zero {false, grpc_lb_v1_InitialLoadBalanceResponse_init_zero, false, grpc_lb_v1_ServerList_init_zero} +#define grpc_lb_v1_InitialLoadBalanceResponse_init_zero {false, "", false, grpc_lb_v1_Duration_init_zero} +#define grpc_lb_v1_ServerList_init_zero {{{NULL}, NULL}, false, grpc_lb_v1_Duration_init_zero} +#define grpc_lb_v1_Server_init_zero {false, "", false, 0, false, "", false, 0} + +/* Field tags (for use in manual encoding/decoding) */ +#define grpc_lb_v1_ClientStats_total_requests_tag 1 +#define grpc_lb_v1_ClientStats_client_rpc_errors_tag 2 +#define grpc_lb_v1_ClientStats_dropped_requests_tag 3 +#define grpc_lb_v1_Duration_seconds_tag 1 +#define grpc_lb_v1_Duration_nanos_tag 2 +#define grpc_lb_v1_InitialLoadBalanceRequest_name_tag 1 +#define grpc_lb_v1_Server_ip_address_tag 1 +#define grpc_lb_v1_Server_port_tag 2 +#define grpc_lb_v1_Server_load_balance_token_tag 3 +#define grpc_lb_v1_Server_drop_request_tag 4 +#define grpc_lb_v1_InitialLoadBalanceResponse_load_balancer_delegate_tag 2 +#define grpc_lb_v1_InitialLoadBalanceResponse_client_stats_report_interval_tag 3 +#define grpc_lb_v1_LoadBalanceRequest_initial_request_tag 1 +#define grpc_lb_v1_LoadBalanceRequest_client_stats_tag 2 +#define grpc_lb_v1_ServerList_servers_tag 1 +#define grpc_lb_v1_ServerList_expiration_interval_tag 3 +#define grpc_lb_v1_LoadBalanceResponse_initial_response_tag 1 +#define grpc_lb_v1_LoadBalanceResponse_server_list_tag 2 + +/* Struct field encoding specification for nanopb */ +extern const pb_field_t grpc_lb_v1_Duration_fields[3]; +extern const pb_field_t grpc_lb_v1_LoadBalanceRequest_fields[3]; +extern const pb_field_t grpc_lb_v1_InitialLoadBalanceRequest_fields[2]; +extern const pb_field_t grpc_lb_v1_ClientStats_fields[4]; +extern const pb_field_t grpc_lb_v1_LoadBalanceResponse_fields[3]; +extern const pb_field_t grpc_lb_v1_InitialLoadBalanceResponse_fields[3]; +extern const pb_field_t grpc_lb_v1_ServerList_fields[3]; +extern const pb_field_t grpc_lb_v1_Server_fields[5]; + +/* Maximum encoded size of messages (where known) */ +#define grpc_lb_v1_Duration_size 22 +#define grpc_lb_v1_LoadBalanceRequest_size 169 +#define grpc_lb_v1_InitialLoadBalanceRequest_size 131 +#define grpc_lb_v1_ClientStats_size 33 +#define grpc_lb_v1_LoadBalanceResponse_size (98 + grpc_lb_v1_ServerList_size) +#define grpc_lb_v1_InitialLoadBalanceResponse_size 90 +#define grpc_lb_v1_Server_size 127 + +/* Message IDs (where set with "msgid" option) */ +#ifdef PB_MSGID + +#define LOAD_BALANCER_MESSAGES \ + + +#endif + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif diff --git a/src/core/ext/lb_policy/round_robin/round_robin.c b/src/core/ext/lb_policy/round_robin/round_robin.c index 3f6051b8925145100aaa7a80f71cca62bf11d4f4..dcdc0c6285767e1efd0a6cb3ab0cd70410eb5f54 100644 --- a/src/core/ext/lb_policy/round_robin/round_robin.c +++ b/src/core/ext/lb_policy/round_robin/round_robin.c @@ -306,8 +306,10 @@ static void start_picking(grpc_exec_ctx *exec_ctx, round_robin_lb_policy *p) { size_t i; p->started_picking = 1; - gpr_log(GPR_DEBUG, "LB_POLICY: p=%p num_subchannels=%d", p, - p->num_subchannels); + if (grpc_lb_round_robin_trace) { + gpr_log(GPR_DEBUG, "LB_POLICY: p=%p num_subchannels=%d", p, + p->num_subchannels); + } for (i = 0; i < p->num_subchannels; i++) { subchannel_data *sd = p->subchannels[i]; diff --git a/src/core/ext/transport/chttp2/transport/chttp2_transport.c b/src/core/ext/transport/chttp2/transport/chttp2_transport.c index 8c8593748dd4d619b992abbbcc8a1d369bbd47af..b6886a2201bebbb30e0aa238717ce661bb11fe61 100644 --- a/src/core/ext/transport/chttp2/transport/chttp2_transport.c +++ b/src/core/ext/transport/chttp2/transport/chttp2_transport.c @@ -56,6 +56,8 @@ #define DEFAULT_CONNECTION_WINDOW_TARGET (1024 * 1024) #define MAX_WINDOW 0x7fffffffu +#define DEFAULT_MAX_HEADER_LIST_SIZE (16 * 1024) + #define MAX_CLIENT_STREAM_ID 0x7fffffffu int grpc_http_trace = 0; @@ -65,8 +67,8 @@ int grpc_flowctl_trace = 0; ((grpc_chttp2_transport *)((char *)(tw)-offsetof(grpc_chttp2_transport, \ writing))) -#define TRANSPORT_FROM_PARSING(tw) \ - ((grpc_chttp2_transport *)((char *)(tw)-offsetof(grpc_chttp2_transport, \ +#define TRANSPORT_FROM_PARSING(tp) \ + ((grpc_chttp2_transport *)((char *)(tp)-offsetof(grpc_chttp2_transport, \ parsing))) #define TRANSPORT_FROM_GLOBAL(tg) \ @@ -311,6 +313,8 @@ static void init_transport(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, push_setting(t, GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS, 0); } push_setting(t, GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE, DEFAULT_WINDOW); + push_setting(t, GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE, + DEFAULT_MAX_HEADER_LIST_SIZE); if (channel_args) { for (i = 0; i < channel_args->num_args; i++) { @@ -378,6 +382,18 @@ static void init_transport(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, &t->writing.hpack_compressor, (uint32_t)channel_args->args[i].value.integer); } + } else if (0 == strcmp(channel_args->args[i].key, + GRPC_ARG_MAX_METADATA_SIZE)) { + if (channel_args->args[i].type != GRPC_ARG_INTEGER) { + gpr_log(GPR_ERROR, "%s: must be an integer", + GRPC_ARG_MAX_METADATA_SIZE); + } else if (channel_args->args[i].value.integer < 0) { + gpr_log(GPR_ERROR, "%s: must be non-negative", + GRPC_ARG_MAX_METADATA_SIZE); + } else { + push_setting(t, GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE, + (uint32_t)channel_args->args[i].value.integer); + } } } } @@ -510,7 +526,7 @@ static int init_stream(grpc_exec_ctx *exec_ctx, grpc_transport *gt, [GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE]; *t->accepting_stream = s; grpc_chttp2_stream_map_add(&t->parsing_stream_map, s->global.id, s); - s->global.in_stream_map = 1; + s->global.in_stream_map = true; } grpc_chttp2_run_with_global_lock(exec_ctx, t, s, finish_init_stream_locked, @@ -783,7 +799,8 @@ void grpc_chttp2_add_incoming_goaway( grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *transport_global, uint32_t goaway_error, gpr_slice goaway_text) { char *msg = gpr_dump_slice(goaway_text, GPR_DUMP_HEX | GPR_DUMP_ASCII); - gpr_log(GPR_DEBUG, "got goaway [%d]: %s", goaway_error, msg); + GRPC_CHTTP2_IF_TRACING( + gpr_log(GPR_DEBUG, "got goaway [%d]: %s", goaway_error, msg)); gpr_free(msg); gpr_slice_unref(goaway_text); transport_global->seen_goaway = 1; @@ -833,7 +850,7 @@ static void maybe_start_some_streams( grpc_chttp2_stream_map_add( &TRANSPORT_FROM_GLOBAL(transport_global)->new_stream_map, stream_global->id, STREAM_FROM_GLOBAL(stream_global)); - stream_global->in_stream_map = 1; + stream_global->in_stream_map = true; transport_global->concurrent_stream_count++; grpc_chttp2_become_writable(transport_global, stream_global); } @@ -932,24 +949,38 @@ static void perform_stream_op_locked(grpc_exec_ctx *exec_ctx, stream_global->send_initial_metadata_finished = add_closure_barrier(on_complete); stream_global->send_initial_metadata = op->send_initial_metadata; - if (contains_non_ok_status(transport_global, op->send_initial_metadata)) { - stream_global->seen_error = 1; - grpc_chttp2_list_add_check_read_ops(transport_global, stream_global); - } - if (!stream_global->write_closed) { - if (transport_global->is_client) { - GPR_ASSERT(stream_global->id == 0); - grpc_chttp2_list_add_waiting_for_concurrency(transport_global, - stream_global); - maybe_start_some_streams(exec_ctx, transport_global); + const size_t metadata_size = + grpc_metadata_batch_size(op->send_initial_metadata); + const size_t metadata_peer_limit = + transport_global->settings[GRPC_PEER_SETTINGS] + [GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE]; + if (metadata_size > metadata_peer_limit) { + gpr_log(GPR_DEBUG, + "to-be-sent initial metadata size exceeds peer limit " + "(%lu vs. %lu)", + metadata_size, metadata_peer_limit); + cancel_from_api(exec_ctx, transport_global, stream_global, + GRPC_STATUS_RESOURCE_EXHAUSTED); + } else { + if (contains_non_ok_status(transport_global, op->send_initial_metadata)) { + stream_global->seen_error = true; + grpc_chttp2_list_add_check_read_ops(transport_global, stream_global); + } + if (!stream_global->write_closed) { + if (transport_global->is_client) { + GPR_ASSERT(stream_global->id == 0); + grpc_chttp2_list_add_waiting_for_concurrency(transport_global, + stream_global); + maybe_start_some_streams(exec_ctx, transport_global); + } else { + GPR_ASSERT(stream_global->id != 0); + grpc_chttp2_become_writable(transport_global, stream_global); + } } else { - GPR_ASSERT(stream_global->id != 0); - grpc_chttp2_become_writable(transport_global, stream_global); + grpc_chttp2_complete_closure_step( + exec_ctx, stream_global, + &stream_global->send_initial_metadata_finished, 0); } - } else { - grpc_chttp2_complete_closure_step( - exec_ctx, stream_global, - &stream_global->send_initial_metadata_finished, 0); } } @@ -973,19 +1004,34 @@ static void perform_stream_op_locked(grpc_exec_ctx *exec_ctx, stream_global->send_trailing_metadata_finished = add_closure_barrier(on_complete); stream_global->send_trailing_metadata = op->send_trailing_metadata; - if (contains_non_ok_status(transport_global, op->send_trailing_metadata)) { - stream_global->seen_error = 1; - grpc_chttp2_list_add_check_read_ops(transport_global, stream_global); - } - if (stream_global->write_closed) { - grpc_chttp2_complete_closure_step( - exec_ctx, stream_global, - &stream_global->send_trailing_metadata_finished, - grpc_metadata_batch_is_empty(op->send_trailing_metadata)); - } else if (stream_global->id != 0) { - /* TODO(ctiller): check if there's flow control for any outstanding - bytes before going writable */ - grpc_chttp2_become_writable(transport_global, stream_global); + const size_t metadata_size = + grpc_metadata_batch_size(op->send_trailing_metadata); + const size_t metadata_peer_limit = + transport_global->settings[GRPC_PEER_SETTINGS] + [GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE]; + if (metadata_size > metadata_peer_limit) { + gpr_log(GPR_DEBUG, + "to-be-sent trailing metadata size exceeds peer limit " + "(%lu vs. %lu)", + metadata_size, metadata_peer_limit); + cancel_from_api(exec_ctx, transport_global, stream_global, + GRPC_STATUS_RESOURCE_EXHAUSTED); + } else { + if (contains_non_ok_status(transport_global, + op->send_trailing_metadata)) { + stream_global->seen_error = true; + grpc_chttp2_list_add_check_read_ops(transport_global, stream_global); + } + if (stream_global->write_closed) { + grpc_chttp2_complete_closure_step( + exec_ctx, stream_global, + &stream_global->send_trailing_metadata_finished, + grpc_metadata_batch_is_empty(op->send_trailing_metadata)); + } else if (stream_global->id != 0) { + /* TODO(ctiller): check if there's flow control for any outstanding + bytes before going writable */ + grpc_chttp2_become_writable(transport_global, stream_global); + } } } @@ -1148,6 +1194,16 @@ static void check_read_ops(grpc_exec_ctx *exec_ctx, grpc_chttp2_list_pop_check_read_ops(transport_global, &stream_global)) { if (stream_global->recv_initial_metadata_ready != NULL && stream_global->published_initial_metadata) { + if (stream_global->seen_error) { + while ((bs = grpc_chttp2_incoming_frame_queue_pop( + &stream_global->incoming_frames)) != NULL) { + incoming_byte_stream_destroy_locked(exec_ctx, NULL, NULL, bs); + } + if (stream_global->exceeded_metadata_size) { + cancel_from_api(exec_ctx, transport_global, stream_global, + GRPC_STATUS_RESOURCE_EXHAUSTED); + } + } grpc_chttp2_incoming_metadata_buffer_publish( &stream_global->received_initial_metadata, stream_global->recv_initial_metadata); @@ -1177,10 +1233,15 @@ static void check_read_ops(grpc_exec_ctx *exec_ctx, } if (stream_global->recv_trailing_metadata_finished != NULL && stream_global->read_closed && stream_global->write_closed) { - while (stream_global->seen_error && - (bs = grpc_chttp2_incoming_frame_queue_pop( - &stream_global->incoming_frames)) != NULL) { - incoming_byte_stream_destroy_locked(exec_ctx, NULL, NULL, bs); + if (stream_global->seen_error) { + while ((bs = grpc_chttp2_incoming_frame_queue_pop( + &stream_global->incoming_frames)) != NULL) { + incoming_byte_stream_destroy_locked(exec_ctx, NULL, NULL, bs); + } + if (stream_global->exceeded_metadata_size) { + cancel_from_api(exec_ctx, transport_global, stream_global, + GRPC_STATUS_RESOURCE_EXHAUSTED); + } } if (stream_global->all_incoming_byte_streams_finished) { grpc_chttp2_incoming_metadata_buffer_publish( @@ -1212,7 +1273,7 @@ static void remove_stream(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, s = grpc_chttp2_stream_map_delete(&t->new_stream_map, id); } GPR_ASSERT(s); - s->global.in_stream_map = 0; + s->global.in_stream_map = false; if (t->parsing.incoming_stream == &s->parsing) { t->parsing.incoming_stream = NULL; grpc_chttp2_parsing_become_skip_parser(exec_ctx, &t->parsing); @@ -1256,7 +1317,7 @@ static void cancel_from_api(grpc_exec_ctx *exec_ctx, NULL); } if (status != GRPC_STATUS_OK && !stream_global->seen_error) { - stream_global->seen_error = 1; + stream_global->seen_error = true; grpc_chttp2_list_add_check_read_ops(transport_global, stream_global); } grpc_chttp2_mark_stream_closed(exec_ctx, transport_global, stream_global, 1, @@ -1268,7 +1329,7 @@ void grpc_chttp2_fake_status(grpc_exec_ctx *exec_ctx, grpc_chttp2_stream_global *stream_global, grpc_status_code status, gpr_slice *slice) { if (status != GRPC_STATUS_OK) { - stream_global->seen_error = 1; + stream_global->seen_error = true; grpc_chttp2_list_add_check_read_ops(transport_global, stream_global); } /* stream_global->recv_trailing_metadata_finished gives us a @@ -1292,7 +1353,7 @@ void grpc_chttp2_fake_status(grpc_exec_ctx *exec_ctx, GRPC_MDSTR_GRPC_MESSAGE, grpc_mdstr_from_slice(gpr_slice_ref(*slice)))); } - stream_global->published_trailing_metadata = 1; + stream_global->published_trailing_metadata = true; grpc_chttp2_list_add_check_read_ops(transport_global, stream_global); } if (slice) { @@ -1322,13 +1383,13 @@ void grpc_chttp2_mark_stream_closed( } grpc_chttp2_list_add_check_read_ops(transport_global, stream_global); if (close_reads && !stream_global->read_closed) { - stream_global->read_closed = 1; - stream_global->published_initial_metadata = 1; - stream_global->published_trailing_metadata = 1; + stream_global->read_closed = true; + stream_global->published_initial_metadata = true; + stream_global->published_trailing_metadata = true; decrement_active_streams_locked(exec_ctx, transport_global, stream_global); } if (close_writes && !stream_global->write_closed) { - stream_global->write_closed = 1; + stream_global->write_closed = true; if (TRANSPORT_FROM_GLOBAL(transport_global)->executor.writing_active) { GRPC_CHTTP2_STREAM_REF(stream_global, "finish_writes"); grpc_chttp2_list_add_closed_waiting_for_writing(transport_global, diff --git a/src/core/ext/transport/chttp2/transport/frame_rst_stream.c b/src/core/ext/transport/chttp2/transport/frame_rst_stream.c index 22467e9ddd2a18310f77a5e1ad1b323ee25c4828..7f01105e3ef11e5cf5bc35b71f1e26d03269271c 100644 --- a/src/core/ext/transport/chttp2/transport/frame_rst_stream.c +++ b/src/core/ext/transport/chttp2/transport/frame_rst_stream.c @@ -45,15 +45,20 @@ gpr_slice grpc_chttp2_rst_stream_create(uint32_t id, uint32_t code, stats->framing_bytes += frame_size; uint8_t *p = GPR_SLICE_START_PTR(slice); + // Frame size. *p++ = 0; *p++ = 0; *p++ = 4; + // Frame type. *p++ = GRPC_CHTTP2_FRAME_RST_STREAM; + // Flags. *p++ = 0; + // Stream ID. *p++ = (uint8_t)(id >> 24); *p++ = (uint8_t)(id >> 16); *p++ = (uint8_t)(id >> 8); *p++ = (uint8_t)(id); + // Error code. *p++ = (uint8_t)(code >> 24); *p++ = (uint8_t)(code >> 16); *p++ = (uint8_t)(code >> 8); diff --git a/src/core/ext/transport/chttp2/transport/hpack_encoder.c b/src/core/ext/transport/chttp2/transport/hpack_encoder.c index 555027c8660dba3b442ad9c78b9e7c89395bcd58..ebeee37f0d984b7446cb6e7b16d6426362e76781 100644 --- a/src/core/ext/transport/chttp2/transport/hpack_encoder.c +++ b/src/core/ext/transport/chttp2/transport/hpack_encoder.c @@ -63,6 +63,8 @@ /* don't consider adding anything bigger than this to the hpack table */ #define MAX_DECODER_SPACE_USAGE 512 +extern int grpc_http_trace; + typedef struct { int is_first_frame; /* number of bytes in 'output' when we started the frame - used to calculate @@ -532,7 +534,9 @@ void grpc_chttp2_hpack_compressor_set_max_table_size( } } c->advertise_table_size_change = 1; - gpr_log(GPR_DEBUG, "set max table size from encoder to %d", max_table_size); + if (grpc_http_trace) { + gpr_log(GPR_DEBUG, "set max table size from encoder to %d", max_table_size); + } } void grpc_chttp2_encode_header(grpc_chttp2_hpack_compressor *c, diff --git a/src/core/ext/transport/chttp2/transport/hpack_table.c b/src/core/ext/transport/chttp2/transport/hpack_table.c index 4d64506de29239257b25f18bafc6e6027d88df87..295f31c44f2a14aa3f5a295519378d3ac8b3d238 100644 --- a/src/core/ext/transport/chttp2/transport/hpack_table.c +++ b/src/core/ext/transport/chttp2/transport/hpack_table.c @@ -253,7 +253,9 @@ void grpc_chttp2_hptbl_set_max_bytes(grpc_chttp2_hptbl *tbl, if (tbl->max_bytes == max_bytes) { return; } - gpr_log(GPR_DEBUG, "Update hpack parser max size to %d", max_bytes); + if (grpc_http_trace) { + gpr_log(GPR_DEBUG, "Update hpack parser max size to %d", max_bytes); + } while (tbl->mem_used > max_bytes) { evict1(tbl); } diff --git a/src/core/ext/transport/chttp2/transport/incoming_metadata.c b/src/core/ext/transport/chttp2/transport/incoming_metadata.c index db21744f0c0281a04f31bbf6cc16f55842f7d1c2..3e463a79957b08c4765421809d2e674c7edb4450 100644 --- a/src/core/ext/transport/chttp2/transport/incoming_metadata.c +++ b/src/core/ext/transport/chttp2/transport/incoming_metadata.c @@ -65,6 +65,7 @@ void grpc_chttp2_incoming_metadata_buffer_add( gpr_realloc(buffer->elems, sizeof(*buffer->elems) * buffer->capacity); } buffer->elems[buffer->count++].md = elem; + buffer->size += GRPC_MDELEM_LENGTH(elem); } void grpc_chttp2_incoming_metadata_buffer_set_deadline( diff --git a/src/core/ext/transport/chttp2/transport/incoming_metadata.h b/src/core/ext/transport/chttp2/transport/incoming_metadata.h index 17ecf8e1811ff0a4113e64abbe4f1e0580cf6ec8..df4343b93ed681d05c569cfa9a2fdd18f4c5aa94 100644 --- a/src/core/ext/transport/chttp2/transport/incoming_metadata.h +++ b/src/core/ext/transport/chttp2/transport/incoming_metadata.h @@ -42,6 +42,7 @@ typedef struct { size_t capacity; gpr_timespec deadline; int published; + size_t size; // total size of metadata } grpc_chttp2_incoming_metadata_buffer; /** assumes everything initially zeroed */ diff --git a/src/core/ext/transport/chttp2/transport/internal.h b/src/core/ext/transport/chttp2/transport/internal.h index 8c4fa2d34aca70d9b889673720cecf4daa9e0dd5..5872fd8e0a457527bdd50e32873d70ccbe9410f7 100644 --- a/src/core/ext/transport/chttp2/transport/internal.h +++ b/src/core/ext/transport/chttp2/transport/internal.h @@ -422,23 +422,21 @@ typedef struct { /** number of streams that are currently being read */ gpr_refcount active_streams; - /** when the application requests writes be closed, the write_closed is - 'queued'; when the close is flow controlled into the send path, we are - 'sending' it; when the write has been performed it is 'sent' */ + /** Is this stream closed for writing. */ bool write_closed; - /** is this stream reading half-closed (boolean) */ + /** Is this stream reading half-closed. */ bool read_closed; - /** are all published incoming byte streams closed */ + /** Are all published incoming byte streams closed. */ bool all_incoming_byte_streams_finished; - /** is this stream in the stream map? (boolean) */ + /** Is this stream in the stream map. */ bool in_stream_map; - /** has this stream seen an error? if 1, then pending incoming frames - can be thrown away */ + /** Has this stream seen an error. + If true, then pending incoming frames can be thrown away. */ bool seen_error; + bool exceeded_metadata_size; bool published_initial_metadata; bool published_trailing_metadata; - bool faked_trailing_metadata; grpc_chttp2_incoming_metadata_buffer received_initial_metadata; grpc_chttp2_incoming_metadata_buffer received_trailing_metadata; @@ -481,7 +479,8 @@ struct grpc_chttp2_stream_parsing { /** which metadata did we get (on this parse) */ uint8_t got_metadata_on_parse[2]; /** should we raise the seen_error flag in transport_global */ - uint8_t seen_error; + bool seen_error; + bool exceeded_metadata_size; /** window available for peer to send to us */ int64_t incoming_window; /** parsing state for data frames */ diff --git a/src/core/ext/transport/chttp2/transport/parsing.c b/src/core/ext/transport/chttp2/transport/parsing.c index 2995066e5192610c38c86d5360a6ff568253d5d2..4bd374b7fa7af896287c66a77391972291205934 100644 --- a/src/core/ext/transport/chttp2/transport/parsing.c +++ b/src/core/ext/transport/chttp2/transport/parsing.c @@ -45,6 +45,10 @@ #include "src/core/lib/profiling/timers.h" #include "src/core/lib/transport/static_metadata.h" +#define TRANSPORT_FROM_PARSING(tp) \ + ((grpc_chttp2_transport *)((char *)(tp)-offsetof(grpc_chttp2_transport, \ + parsing))) + static int init_frame_parser(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing); static int init_header_frame_parser( @@ -170,7 +174,9 @@ void grpc_chttp2_publish_reads( while (grpc_chttp2_list_pop_parsing_seen_stream( transport_global, transport_parsing, &stream_global, &stream_parsing)) { if (stream_parsing->seen_error) { - stream_global->seen_error = 1; + stream_global->seen_error = true; + stream_global->exceeded_metadata_size = + stream_parsing->exceeded_metadata_size; grpc_chttp2_list_add_check_read_ops(transport_global, stream_global); } @@ -612,7 +618,7 @@ static void on_initial_header(void *tp, grpc_mdelem *md) { if (md->key == GRPC_MDSTR_GRPC_STATUS && md != GRPC_MDELEM_GRPC_STATUS_0) { /* TODO(ctiller): check for a status like " 0" */ - stream_parsing->seen_error = 1; + stream_parsing->seen_error = true; } if (md->key == GRPC_MDSTR_GRPC_TIMEOUT) { @@ -633,8 +639,26 @@ static void on_initial_header(void *tp, grpc_mdelem *md) { gpr_time_add(gpr_now(GPR_CLOCK_MONOTONIC), *cached_timeout)); GRPC_MDELEM_UNREF(md); } else { - grpc_chttp2_incoming_metadata_buffer_add( - &stream_parsing->metadata_buffer[0], md); + const size_t new_size = + stream_parsing->metadata_buffer[0].size + GRPC_MDELEM_LENGTH(md); + grpc_chttp2_transport_global *transport_global = + &TRANSPORT_FROM_PARSING(transport_parsing)->global; + const size_t metadata_size_limit = + transport_global->settings[GRPC_LOCAL_SETTINGS] + [GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE]; + if (new_size > metadata_size_limit) { + if (!stream_parsing->exceeded_metadata_size) { + gpr_log(GPR_DEBUG, + "received initial metadata size exceeds limit (%lu vs. %lu)", + new_size, metadata_size_limit); + stream_parsing->seen_error = true; + stream_parsing->exceeded_metadata_size = true; + } + GRPC_MDELEM_UNREF(md); + } else { + grpc_chttp2_incoming_metadata_buffer_add( + &stream_parsing->metadata_buffer[0], md); + } } grpc_chttp2_list_add_parsing_seen_stream(transport_parsing, stream_parsing); @@ -658,12 +682,30 @@ static void on_trailing_header(void *tp, grpc_mdelem *md) { if (md->key == GRPC_MDSTR_GRPC_STATUS && md != GRPC_MDELEM_GRPC_STATUS_0) { /* TODO(ctiller): check for a status like " 0" */ - stream_parsing->seen_error = 1; + stream_parsing->seen_error = true; + } + + const size_t new_size = + stream_parsing->metadata_buffer[1].size + GRPC_MDELEM_LENGTH(md); + grpc_chttp2_transport_global *transport_global = + &TRANSPORT_FROM_PARSING(transport_parsing)->global; + const size_t metadata_size_limit = + transport_global->settings[GRPC_LOCAL_SETTINGS] + [GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE]; + if (new_size > metadata_size_limit) { + if (!stream_parsing->exceeded_metadata_size) { + gpr_log(GPR_DEBUG, + "received trailing metadata size exceeds limit (%lu vs. %lu)", + new_size, metadata_size_limit); + stream_parsing->seen_error = true; + stream_parsing->exceeded_metadata_size = true; + } + GRPC_MDELEM_UNREF(md); + } else { + grpc_chttp2_incoming_metadata_buffer_add( + &stream_parsing->metadata_buffer[1], md); } - grpc_chttp2_incoming_metadata_buffer_add(&stream_parsing->metadata_buffer[1], - md); - grpc_chttp2_list_add_parsing_seen_stream(transport_parsing, stream_parsing); GPR_TIMER_END("on_trailing_header", 0); diff --git a/src/core/ext/transport/cronet/client/secure/cronet_channel_create.c b/src/core/ext/transport/cronet/client/secure/cronet_channel_create.c new file mode 100644 index 0000000000000000000000000000000000000000..df1acddcc08ae95a0f17de333f429e6cb5419aa5 --- /dev/null +++ b/src/core/ext/transport/cronet/client/secure/cronet_channel_create.c @@ -0,0 +1,69 @@ +/* + * + * 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 <grpc/impl/codegen/port_platform.h> + +#include <stdio.h> +#include <string.h> + +#include <grpc/support/alloc.h> +#include <grpc/support/log.h> + +#include "src/core/lib/surface/channel.h" +#include "src/core/lib/transport/transport_impl.h" + +// Cronet transport object +typedef struct cronet_transport { + grpc_transport base; // must be first element in this structure + void *engine; + char *host; +} cronet_transport; + +extern grpc_transport_vtable grpc_cronet_vtable; + +GRPCAPI grpc_channel *grpc_cronet_secure_channel_create( + void *engine, const char *target, const grpc_channel_args *args, + void *reserved) { + cronet_transport *ct = gpr_malloc(sizeof(cronet_transport)); + ct->base.vtable = &grpc_cronet_vtable; + ct->engine = engine; + ct->host = gpr_malloc(strlen(target) + 1); + strcpy(ct->host, target); + gpr_log(GPR_DEBUG, + "grpc_create_cronet_transport: cronet_engine = %p, target=%s", engine, + ct->host); + + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + return grpc_channel_create(&exec_ctx, target, args, + GRPC_CLIENT_DIRECT_CHANNEL, (grpc_transport *)ct); +} diff --git a/src/core/ext/transport/cronet/transport/cronet_api_dummy.c b/src/core/ext/transport/cronet/transport/cronet_api_dummy.c new file mode 100644 index 0000000000000000000000000000000000000000..687026c9fde99af4d164103a2bf90c56e7e10ceb --- /dev/null +++ b/src/core/ext/transport/cronet/transport/cronet_api_dummy.c @@ -0,0 +1,85 @@ +/* + * + * 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. + * + */ + +/* This file has empty implementation of all the functions exposed by the cronet +library, so we can build it in all environments */ + +#include <stdbool.h> + +#include <grpc/support/log.h> + +#include "third_party/objective_c/Cronet/cronet_c_for_grpc.h" + +#ifdef GRPC_COMPILE_WITH_CRONET +/* link with the real CRONET library in the build system */ +#else +/* Dummy implementation of cronet API just to test for build-ability */ +cronet_bidirectional_stream* cronet_bidirectional_stream_create( + cronet_engine* engine, void* annotation, + cronet_bidirectional_stream_callback* callback) { + GPR_ASSERT(0); + return NULL; +} + +int cronet_bidirectional_stream_destroy(cronet_bidirectional_stream* stream) { + GPR_ASSERT(0); + return 0; +} + +int cronet_bidirectional_stream_start( + cronet_bidirectional_stream* stream, const char* url, int priority, + const char* method, const cronet_bidirectional_stream_header_array* headers, + bool end_of_stream) { + GPR_ASSERT(0); + return 0; +} + +int cronet_bidirectional_stream_read(cronet_bidirectional_stream* stream, + char* buffer, int capacity) { + GPR_ASSERT(0); + return 0; +} + +int cronet_bidirectional_stream_write(cronet_bidirectional_stream* stream, + const char* buffer, int count, + bool end_of_stream) { + GPR_ASSERT(0); + return 0; +} + +int cronet_bidirectional_stream_cancel(cronet_bidirectional_stream* stream) { + GPR_ASSERT(0); + return 0; +} + +#endif /* GRPC_COMPILE_WITH_CRONET */ diff --git a/src/core/ext/transport/cronet/transport/cronet_transport.c b/src/core/ext/transport/cronet/transport/cronet_transport.c new file mode 100644 index 0000000000000000000000000000000000000000..5bb085195c6abd76e18d9fdf6afd712d78bc321e --- /dev/null +++ b/src/core/ext/transport/cronet/transport/cronet_transport.c @@ -0,0 +1,640 @@ +/* + * + * 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 <string.h> + +#include <grpc/impl/codegen/port_platform.h> +#include <grpc/support/alloc.h> +#include <grpc/support/host_port.h> +#include <grpc/support/log.h> +#include <grpc/support/slice_buffer.h> +#include <grpc/support/string_util.h> +#include <grpc/support/useful.h> + +#include "src/core/ext/transport/chttp2/transport/incoming_metadata.h" +#include "src/core/lib/iomgr/exec_ctx.h" +#include "src/core/lib/support/string.h" +#include "src/core/lib/surface/channel.h" +#include "src/core/lib/transport/metadata_batch.h" +#include "src/core/lib/transport/transport_impl.h" +#include "third_party/objective_c/Cronet/cronet_c_for_grpc.h" + +#define GRPC_HEADER_SIZE_IN_BYTES 5 + +// Global flag that gets set with GRPC_TRACE env variable +int grpc_cronet_trace = 1; + +// Cronet transport object +struct grpc_cronet_transport { + grpc_transport base; /* must be first element in this structure */ + cronet_engine *engine; + char *host; +}; + +typedef struct grpc_cronet_transport grpc_cronet_transport; + +enum send_state { + CRONET_SEND_IDLE = 0, + CRONET_REQ_STARTED, + CRONET_SEND_HEADER, + CRONET_WRITE, + CRONET_WRITE_COMPLETED, +}; + +enum recv_state { + CRONET_RECV_IDLE = 0, + CRONET_RECV_READ_LENGTH, + CRONET_RECV_READ_DATA, + CRONET_RECV_CLOSED, +}; + +static const char *recv_state_name[] = { + "CRONET_RECV_IDLE", "CRONET_RECV_READ_LENGTH", "CRONET_RECV_READ_DATA,", + "CRONET_RECV_CLOSED"}; + +// Enum that identifies calling function. +enum e_caller { + PERFORM_STREAM_OP, + ON_READ_COMPLETE, + ON_RESPONSE_HEADERS_RECEIVED, + ON_RESPONSE_TRAILERS_RECEIVED +}; + +enum callback_id { + CB_SEND_INITIAL_METADATA = 0, + CB_SEND_MESSAGE, + CB_SEND_TRAILING_METADATA, + CB_RECV_MESSAGE, + CB_RECV_INITIAL_METADATA, + CB_RECV_TRAILING_METADATA, + CB_NUM_CALLBACKS +}; + +struct stream_obj { + // we store received bytes here as they trickle in. + gpr_slice_buffer write_slice_buffer; + cronet_bidirectional_stream *cbs; + gpr_slice slice; + gpr_slice_buffer read_slice_buffer; + struct grpc_slice_buffer_stream sbs; + char *read_buffer; + int remaining_read_bytes; + int total_read_bytes; + + char *write_buffer; + size_t write_buffer_size; + + // Hold the URL + char *url; + + bool response_headers_received; + bool read_requested; + bool response_trailers_received; + bool read_closed; + + // Recv message stuff + grpc_byte_buffer **recv_message; + // Initial metadata stuff + grpc_metadata_batch *recv_initial_metadata; + // Trailing metadata stuff + grpc_metadata_batch *recv_trailing_metadata; + grpc_chttp2_incoming_metadata_buffer imb; + + // This mutex protects receive state machine execution + gpr_mu recv_mu; + // we can queue up up to 2 callbacks for each OP + grpc_closure *callback_list[CB_NUM_CALLBACKS][2]; + + // storage for header + cronet_bidirectional_stream_header *headers; + uint32_t num_headers; + cronet_bidirectional_stream_header_array header_array; + // state tracking + enum recv_state cronet_recv_state; + enum send_state cronet_send_state; +}; + +typedef struct stream_obj stream_obj; + +static void next_send_step(stream_obj *s); +static void next_recv_step(stream_obj *s, enum e_caller caller); + +static void set_pollset_do_nothing(grpc_exec_ctx *exec_ctx, grpc_transport *gt, + grpc_stream *gs, grpc_pollset *pollset) {} + +static void enqueue_callbacks(grpc_closure *callback_list[]) { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + if (callback_list[0]) { + grpc_exec_ctx_enqueue(&exec_ctx, callback_list[0], true, NULL); + callback_list[0] = NULL; + } + if (callback_list[1]) { + grpc_exec_ctx_enqueue(&exec_ctx, callback_list[1], true, NULL); + callback_list[1] = NULL; + } + grpc_exec_ctx_finish(&exec_ctx); +} + +static void on_canceled(cronet_bidirectional_stream *stream) { + if (grpc_cronet_trace) { + gpr_log(GPR_DEBUG, "on_canceled %p", stream); + } +} + +static void on_failed(cronet_bidirectional_stream *stream, int net_error) { + if (grpc_cronet_trace) { + gpr_log(GPR_DEBUG, "on_failed %p, error = %d", stream, net_error); + } +} + +static void on_succeeded(cronet_bidirectional_stream *stream) { + if (grpc_cronet_trace) { + gpr_log(GPR_DEBUG, "on_succeeded %p", stream); + } +} + +static void on_response_trailers_received( + cronet_bidirectional_stream *stream, + const cronet_bidirectional_stream_header_array *trailers) { + if (grpc_cronet_trace) { + gpr_log(GPR_DEBUG, "R: on_response_trailers_received"); + } + stream_obj *s = (stream_obj *)stream->annotation; + + memset(&s->imb, 0, sizeof(s->imb)); + grpc_chttp2_incoming_metadata_buffer_init(&s->imb); + unsigned int i = 0; + for (i = 0; i < trailers->count; i++) { + grpc_chttp2_incoming_metadata_buffer_add( + &s->imb, grpc_mdelem_from_metadata_strings( + grpc_mdstr_from_string(trailers->headers[i].key), + grpc_mdstr_from_string(trailers->headers[i].value))); + } + s->response_trailers_received = true; + next_recv_step(s, ON_RESPONSE_TRAILERS_RECEIVED); +} + +static void on_write_completed(cronet_bidirectional_stream *stream, + const char *data) { + if (grpc_cronet_trace) { + gpr_log(GPR_DEBUG, "W: on_write_completed"); + } + stream_obj *s = (stream_obj *)stream->annotation; + enqueue_callbacks(s->callback_list[CB_SEND_MESSAGE]); + s->cronet_send_state = CRONET_WRITE_COMPLETED; + next_send_step(s); +} + +static void process_recv_message(stream_obj *s, const uint8_t *recv_data) { + gpr_slice read_data_slice = gpr_slice_malloc((uint32_t)s->total_read_bytes); + uint8_t *dst_p = GPR_SLICE_START_PTR(read_data_slice); + memcpy(dst_p, recv_data, (size_t)s->total_read_bytes); + gpr_slice_buffer_add(&s->read_slice_buffer, read_data_slice); + grpc_slice_buffer_stream_init(&s->sbs, &s->read_slice_buffer, 0); + *s->recv_message = (grpc_byte_buffer *)&s->sbs; +} + +static int parse_grpc_header(const uint8_t *data) { + const uint8_t *p = data + 1; + int length = 0; + length |= ((uint8_t)*p++) << 24; + length |= ((uint8_t)*p++) << 16; + length |= ((uint8_t)*p++) << 8; + length |= ((uint8_t)*p++); + return length; +} + +static void on_read_completed(cronet_bidirectional_stream *stream, char *data, + int count) { + stream_obj *s = (stream_obj *)stream->annotation; + if (grpc_cronet_trace) { + gpr_log(GPR_DEBUG, "R: on_read_completed count=%d, total=%d, remaining=%d", + count, s->total_read_bytes, s->remaining_read_bytes); + } + if (count > 0) { + GPR_ASSERT(s->recv_message); + s->remaining_read_bytes -= count; + next_recv_step(s, ON_READ_COMPLETE); + } else { + s->read_closed = true; + next_recv_step(s, ON_READ_COMPLETE); + } +} + +static void on_response_headers_received( + cronet_bidirectional_stream *stream, + const cronet_bidirectional_stream_header_array *headers, + const char *negotiated_protocol) { + if (grpc_cronet_trace) { + gpr_log(GPR_DEBUG, "R: on_response_headers_received"); + } + stream_obj *s = (stream_obj *)stream->annotation; + enqueue_callbacks(s->callback_list[CB_RECV_INITIAL_METADATA]); + s->response_headers_received = true; + next_recv_step(s, ON_RESPONSE_HEADERS_RECEIVED); +} + +static void on_request_headers_sent(cronet_bidirectional_stream *stream) { + if (grpc_cronet_trace) { + gpr_log(GPR_DEBUG, "W: on_request_headers_sent"); + } + stream_obj *s = (stream_obj *)stream->annotation; + enqueue_callbacks(s->callback_list[CB_SEND_INITIAL_METADATA]); + s->cronet_send_state = CRONET_SEND_HEADER; + next_send_step(s); +} + +// Callback function pointers (invoked by cronet in response to events) +static cronet_bidirectional_stream_callback callbacks = { + on_request_headers_sent, + on_response_headers_received, + on_read_completed, + on_write_completed, + on_response_trailers_received, + on_succeeded, + on_failed, + on_canceled}; + +static void invoke_closing_callback(stream_obj *s) { + grpc_chttp2_incoming_metadata_buffer_publish(&s->imb, + s->recv_trailing_metadata); + if (s->callback_list[CB_RECV_TRAILING_METADATA]) { + enqueue_callbacks(s->callback_list[CB_RECV_TRAILING_METADATA]); + } +} + +static void set_recv_state(stream_obj *s, enum recv_state state) { + if (grpc_cronet_trace) { + gpr_log(GPR_DEBUG, "next_state = %s", recv_state_name[state]); + } + s->cronet_recv_state = state; +} + +// This is invoked from perform_stream_op, and all on_xxxx callbacks. +static void next_recv_step(stream_obj *s, enum e_caller caller) { + gpr_mu_lock(&s->recv_mu); + switch (s->cronet_recv_state) { + case CRONET_RECV_IDLE: + if (grpc_cronet_trace) { + gpr_log(GPR_DEBUG, "cronet_recv_state = CRONET_RECV_IDLE"); + } + if (caller == PERFORM_STREAM_OP || + caller == ON_RESPONSE_HEADERS_RECEIVED) { + if (s->read_closed && s->response_trailers_received) { + invoke_closing_callback(s); + set_recv_state(s, CRONET_RECV_CLOSED); + } else if (s->response_headers_received == true && + s->read_requested == true) { + set_recv_state(s, CRONET_RECV_READ_LENGTH); + s->total_read_bytes = s->remaining_read_bytes = + GRPC_HEADER_SIZE_IN_BYTES; + GPR_ASSERT(s->read_buffer); + if (grpc_cronet_trace) { + gpr_log(GPR_DEBUG, "R: cronet_bidirectional_stream_read()"); + } + cronet_bidirectional_stream_read(s->cbs, s->read_buffer, + s->remaining_read_bytes); + } + } + break; + case CRONET_RECV_READ_LENGTH: + if (grpc_cronet_trace) { + gpr_log(GPR_DEBUG, "cronet_recv_state = CRONET_RECV_READ_LENGTH"); + } + if (caller == ON_READ_COMPLETE) { + if (s->read_closed) { + invoke_closing_callback(s); + enqueue_callbacks(s->callback_list[CB_RECV_MESSAGE]); + set_recv_state(s, CRONET_RECV_CLOSED); + } else { + GPR_ASSERT(s->remaining_read_bytes == 0); + set_recv_state(s, CRONET_RECV_READ_DATA); + s->total_read_bytes = s->remaining_read_bytes = + parse_grpc_header((const uint8_t *)s->read_buffer); + s->read_buffer = + gpr_realloc(s->read_buffer, (uint32_t)s->remaining_read_bytes); + GPR_ASSERT(s->read_buffer); + if (grpc_cronet_trace) { + gpr_log(GPR_DEBUG, "R: cronet_bidirectional_stream_read()"); + } + cronet_bidirectional_stream_read(s->cbs, (char *)s->read_buffer, + s->remaining_read_bytes); + } + } + break; + case CRONET_RECV_READ_DATA: + if (grpc_cronet_trace) { + gpr_log(GPR_DEBUG, "cronet_recv_state = CRONET_RECV_READ_DATA"); + } + if (caller == ON_READ_COMPLETE) { + if (s->remaining_read_bytes > 0) { + int offset = s->total_read_bytes - s->remaining_read_bytes; + GPR_ASSERT(s->read_buffer); + if (grpc_cronet_trace) { + gpr_log(GPR_DEBUG, "R: cronet_bidirectional_stream_read()"); + } + cronet_bidirectional_stream_read( + s->cbs, (char *)s->read_buffer + offset, s->remaining_read_bytes); + } else { + gpr_slice_buffer_init(&s->read_slice_buffer); + uint8_t *p = (uint8_t *)s->read_buffer; + process_recv_message(s, p); + set_recv_state(s, CRONET_RECV_IDLE); + enqueue_callbacks(s->callback_list[CB_RECV_MESSAGE]); + } + } + break; + case CRONET_RECV_CLOSED: + break; + default: + GPR_ASSERT(0); // Should not reach here + break; + } + gpr_mu_unlock(&s->recv_mu); +} + +// This function takes the data from s->write_slice_buffer and assembles into +// a contiguous byte stream with 5 byte gRPC header prepended. +static void create_grpc_frame(stream_obj *s) { + gpr_slice slice = gpr_slice_buffer_take_first(&s->write_slice_buffer); + uint8_t *raw_data = GPR_SLICE_START_PTR(slice); + size_t length = GPR_SLICE_LENGTH(slice); + s->write_buffer_size = length + GRPC_HEADER_SIZE_IN_BYTES; + s->write_buffer = gpr_realloc(s->write_buffer, s->write_buffer_size); + uint8_t *p = (uint8_t *)s->write_buffer; + // Append 5 byte header + *p++ = 0; + *p++ = (uint8_t)(length >> 24); + *p++ = (uint8_t)(length >> 16); + *p++ = (uint8_t)(length >> 8); + *p++ = (uint8_t)(length); + // append actual data + memcpy(p, raw_data, length); +} + +static void do_write(stream_obj *s) { + gpr_slice_buffer *sb = &s->write_slice_buffer; + GPR_ASSERT(sb->count <= 1); + if (sb->count > 0) { + create_grpc_frame(s); + if (grpc_cronet_trace) { + gpr_log(GPR_DEBUG, "W: cronet_bidirectional_stream_write"); + } + cronet_bidirectional_stream_write(s->cbs, s->write_buffer, + (int)s->write_buffer_size, false); + } +} + +// +static void next_send_step(stream_obj *s) { + switch (s->cronet_send_state) { + case CRONET_SEND_IDLE: + GPR_ASSERT( + s->cbs); // cronet_bidirectional_stream is not initialized yet. + s->cronet_send_state = CRONET_REQ_STARTED; + if (grpc_cronet_trace) { + gpr_log(GPR_DEBUG, "cronet_bidirectional_stream_start to %s", s->url); + } + cronet_bidirectional_stream_start(s->cbs, s->url, 0, "POST", + &s->header_array, false); + // we no longer need the memory that was allocated earlier. + gpr_free(s->header_array.headers); + break; + case CRONET_SEND_HEADER: + do_write(s); + s->cronet_send_state = CRONET_WRITE; + break; + case CRONET_WRITE_COMPLETED: + do_write(s); + break; + default: + GPR_ASSERT(0); + break; + } +} + +static void convert_metadata_to_cronet_headers(grpc_linked_mdelem *head, + const char *host, + stream_obj *s) { + grpc_linked_mdelem *curr = head; + // Walk the linked list and get number of header fields + uint32_t num_headers_available = 0; + while (curr != NULL) { + curr = curr->next; + num_headers_available++; + } + // Allocate enough memory + s->headers = (cronet_bidirectional_stream_header *)gpr_malloc( + sizeof(cronet_bidirectional_stream_header) * num_headers_available); + + // Walk the linked list again, this time copying the header fields. + // s->num_headers + // can be less than num_headers_available, as some headers are not used for + // cronet + curr = head; + s->num_headers = 0; + while (s->num_headers < num_headers_available) { + grpc_mdelem *mdelem = curr->md; + curr = curr->next; + const char *key = grpc_mdstr_as_c_string(mdelem->key); + const char *value = grpc_mdstr_as_c_string(mdelem->value); + if (strcmp(key, ":scheme") == 0 || strcmp(key, ":method") == 0 || + strcmp(key, ":authority") == 0) { + // Cronet populates these fields on its own. + continue; + } + if (strcmp(key, ":path") == 0) { + // Create URL by appending :path value to the hostname + gpr_asprintf(&s->url, "https://%s%s", host, value); + if (grpc_cronet_trace) { + gpr_log(GPR_DEBUG, "extracted URL = %s", s->url); + } + continue; + } + s->headers[s->num_headers].key = key; + s->headers[s->num_headers].value = value; + s->num_headers++; + if (curr == NULL) { + break; + } + } +} + +static void perform_stream_op(grpc_exec_ctx *exec_ctx, grpc_transport *gt, + grpc_stream *gs, grpc_transport_stream_op *op) { + grpc_cronet_transport *ct = (grpc_cronet_transport *)gt; + GPR_ASSERT(ct->engine); + stream_obj *s = (stream_obj *)gs; + if (op->recv_trailing_metadata) { + if (grpc_cronet_trace) { + gpr_log(GPR_DEBUG, + "perform_stream_op - recv_trailing_metadata: on_complete=%p", + op->on_complete); + } + s->recv_trailing_metadata = op->recv_trailing_metadata; + GPR_ASSERT(!s->callback_list[CB_RECV_TRAILING_METADATA][0]); + s->callback_list[CB_RECV_TRAILING_METADATA][0] = op->on_complete; + } + if (op->recv_message) { + if (grpc_cronet_trace) { + gpr_log(GPR_DEBUG, "perform_stream_op - recv_message: on_complete=%p", + op->on_complete); + } + s->recv_message = (grpc_byte_buffer **)op->recv_message; + GPR_ASSERT(!s->callback_list[CB_RECV_MESSAGE][0]); + GPR_ASSERT(!s->callback_list[CB_RECV_MESSAGE][1]); + s->callback_list[CB_RECV_MESSAGE][0] = op->recv_message_ready; + s->callback_list[CB_RECV_MESSAGE][1] = op->on_complete; + s->read_requested = true; + next_recv_step(s, PERFORM_STREAM_OP); + } + if (op->recv_initial_metadata) { + if (grpc_cronet_trace) { + gpr_log(GPR_DEBUG, "perform_stream_op - recv_initial_metadata:=%p", + op->on_complete); + } + s->recv_initial_metadata = op->recv_initial_metadata; + GPR_ASSERT(!s->callback_list[CB_RECV_INITIAL_METADATA][0]); + GPR_ASSERT(!s->callback_list[CB_RECV_INITIAL_METADATA][1]); + s->callback_list[CB_RECV_INITIAL_METADATA][0] = + op->recv_initial_metadata_ready; + s->callback_list[CB_RECV_INITIAL_METADATA][1] = op->on_complete; + } + if (op->send_initial_metadata) { + if (grpc_cronet_trace) { + gpr_log(GPR_DEBUG, + "perform_stream_op - send_initial_metadata: on_complete=%p", + op->on_complete); + } + s->num_headers = 0; + convert_metadata_to_cronet_headers(op->send_initial_metadata->list.head, + ct->host, s); + s->header_array.count = s->num_headers; + s->header_array.capacity = s->num_headers; + s->header_array.headers = s->headers; + GPR_ASSERT(!s->callback_list[CB_SEND_INITIAL_METADATA][0]); + s->callback_list[CB_SEND_INITIAL_METADATA][0] = op->on_complete; + } + if (op->send_message) { + if (grpc_cronet_trace) { + gpr_log(GPR_DEBUG, "perform_stream_op - send_message: on_complete=%p", + op->on_complete); + } + grpc_byte_stream_next(exec_ctx, op->send_message, &s->slice, + op->send_message->length, NULL); + // Check that compression flag is not ON. We don't support compression yet. + // TODO (makdharma): add compression support + GPR_ASSERT(op->send_message->flags == 0); + gpr_slice_buffer_add(&s->write_slice_buffer, s->slice); + if (s->cbs == NULL) { + if (grpc_cronet_trace) { + gpr_log(GPR_DEBUG, "cronet_bidirectional_stream_create"); + } + s->cbs = cronet_bidirectional_stream_create(ct->engine, s, &callbacks); + GPR_ASSERT(s->cbs); + s->read_closed = false; + s->response_trailers_received = false; + s->response_headers_received = false; + s->cronet_send_state = CRONET_SEND_IDLE; + s->cronet_recv_state = CRONET_RECV_IDLE; + } + GPR_ASSERT(!s->callback_list[CB_SEND_MESSAGE][0]); + s->callback_list[CB_SEND_MESSAGE][0] = op->on_complete; + next_send_step(s); + } + if (op->send_trailing_metadata) { + if (grpc_cronet_trace) { + gpr_log(GPR_DEBUG, + "perform_stream_op - send_trailing_metadata: on_complete=%p", + op->on_complete); + } + GPR_ASSERT(!s->callback_list[CB_SEND_TRAILING_METADATA][0]); + s->callback_list[CB_SEND_TRAILING_METADATA][0] = op->on_complete; + if (s->cbs) { + // Send an "empty" write to the far end to signal that we're done. + // This will induce the server to send down trailers. + if (grpc_cronet_trace) { + gpr_log(GPR_DEBUG, "W: cronet_bidirectional_stream_write"); + } + cronet_bidirectional_stream_write(s->cbs, "abc", 0, true); + } else { + // We never created a stream. This was probably an empty request. + invoke_closing_callback(s); + } + } +} + +static int init_stream(grpc_exec_ctx *exec_ctx, grpc_transport *gt, + grpc_stream *gs, grpc_stream_refcount *refcount, + const void *server_data) { + stream_obj *s = (stream_obj *)gs; + memset(s->callback_list, 0, sizeof(s->callback_list)); + s->cbs = NULL; + gpr_mu_init(&s->recv_mu); + s->read_buffer = gpr_malloc(GRPC_HEADER_SIZE_IN_BYTES); + s->write_buffer = gpr_malloc(GRPC_HEADER_SIZE_IN_BYTES); + gpr_slice_buffer_init(&s->write_slice_buffer); + if (grpc_cronet_trace) { + gpr_log(GPR_DEBUG, "cronet_transport - init_stream"); + } + return 0; +} + +static void destroy_stream(grpc_exec_ctx *exec_ctx, grpc_transport *gt, + grpc_stream *gs, void *and_free_memory) { + if (grpc_cronet_trace) { + gpr_log(GPR_DEBUG, "Destroy stream"); + } + stream_obj *s = (stream_obj *)gs; + s->cbs = NULL; + gpr_free(s->read_buffer); + gpr_free(s->write_buffer); + gpr_free(s->url); + gpr_mu_destroy(&s->recv_mu); + if (and_free_memory) { + gpr_free(and_free_memory); + } +} + +static void destroy_transport(grpc_exec_ctx *exec_ctx, grpc_transport *gt) { + grpc_cronet_transport *ct = (grpc_cronet_transport *)gt; + gpr_free(ct->host); + if (grpc_cronet_trace) { + gpr_log(GPR_DEBUG, "Destroy transport"); + } +} + +const grpc_transport_vtable grpc_cronet_vtable = { + sizeof(stream_obj), "cronet_http", init_stream, + set_pollset_do_nothing, perform_stream_op, NULL, + destroy_stream, destroy_transport, NULL}; diff --git a/src/core/lib/channel/channel_args.c b/src/core/lib/channel/channel_args.c index 28d2d78d00f81e015037f41c98be72d0022c7064..893cf0700e54ad39c6de8af8c852d94c61781061 100644 --- a/src/core/lib/channel/channel_args.c +++ b/src/core/lib/channel/channel_args.c @@ -170,7 +170,7 @@ grpc_compression_algorithm grpc_channel_args_get_compression_algorithm( if (a == NULL) return 0; for (i = 0; i < a->num_args; ++i) { if (a->args[i].type == GRPC_ARG_INTEGER && - !strcmp(GRPC_COMPRESSION_ALGORITHM_ARG, a->args[i].key)) { + !strcmp(GRPC_COMPRESSION_CHANNEL_DEFAULT_ALGORITHM, a->args[i].key)) { return (grpc_compression_algorithm)a->args[i].value.integer; break; } @@ -182,7 +182,7 @@ grpc_channel_args *grpc_channel_args_set_compression_algorithm( grpc_channel_args *a, grpc_compression_algorithm algorithm) { grpc_arg tmp; tmp.type = GRPC_ARG_INTEGER; - tmp.key = GRPC_COMPRESSION_ALGORITHM_ARG; + tmp.key = GRPC_COMPRESSION_CHANNEL_DEFAULT_ALGORITHM; tmp.value.integer = algorithm; return grpc_channel_args_copy_and_add(a, &tmp, 1); } @@ -196,7 +196,8 @@ static int find_compression_algorithm_states_bitset(const grpc_channel_args *a, size_t i; for (i = 0; i < a->num_args; ++i) { if (a->args[i].type == GRPC_ARG_INTEGER && - !strcmp(GRPC_COMPRESSION_ALGORITHM_STATE_ARG, a->args[i].key)) { + !strcmp(GRPC_COMPRESSION_CHANNEL_ENABLED_ALGORITHMS_BITSET, + a->args[i].key)) { *states_arg = &a->args[i].value.integer; return 1; /* GPR_TRUE */ } @@ -222,7 +223,7 @@ grpc_channel_args *grpc_channel_args_compression_algorithm_set_state( /* create a new arg */ grpc_arg tmp; tmp.type = GRPC_ARG_INTEGER; - tmp.key = GRPC_COMPRESSION_ALGORITHM_STATE_ARG; + tmp.key = GRPC_COMPRESSION_CHANNEL_ENABLED_ALGORITHMS_BITSET; /* all enabled by default */ tmp.value.integer = (1u << GRPC_COMPRESS_ALGORITHMS_COUNT) - 1; if (state != 0) { diff --git a/src/core/lib/channel/channel_args.h b/src/core/lib/channel/channel_args.h index 0a51780a14ee346bf7d6ae95dd92925e7ba893e2..23c7b7b897b582b0800e1f80717190eedf6e498c 100644 --- a/src/core/lib/channel/channel_args.h +++ b/src/core/lib/channel/channel_args.h @@ -56,10 +56,6 @@ grpc_channel_args *grpc_channel_args_merge(const grpc_channel_args *a, /** Destroy arguments created by \a grpc_channel_args_copy */ void grpc_channel_args_destroy(grpc_channel_args *a); -/** Reads census_enabled settings from channel args. Returns 1 if census_enabled - * is specified in channel args, otherwise returns 0. */ -int grpc_channel_args_is_census_enabled(const grpc_channel_args *a); - /** Returns the compression algorithm set in \a a. */ grpc_compression_algorithm grpc_channel_args_get_compression_algorithm( const grpc_channel_args *a); diff --git a/src/core/lib/channel/compress_filter.c b/src/core/lib/channel/compress_filter.c index b734f92e66b2a857a5dfb78bd72efa9359b2fce8..30b18a727424e72719e829cbb44b0a16e21da9a3 100644 --- a/src/core/lib/channel/compress_filter.c +++ b/src/core/lib/channel/compress_filter.c @@ -47,7 +47,7 @@ #include "src/core/lib/support/string.h" #include "src/core/lib/transport/static_metadata.h" -int grpc_compress_filter_trace = 0; +int grpc_compression_trace = 0; typedef struct call_data { gpr_slice_buffer slices; /**< Buffers up input slices to be compressed */ @@ -171,7 +171,7 @@ static void finish_send_message(grpc_exec_ctx *exec_ctx, did_compress = grpc_msg_compress(calld->compression_algorithm, &calld->slices, &tmp); if (did_compress) { - if (grpc_compress_filter_trace) { + if (grpc_compression_trace) { char *algo_name; const size_t before_size = calld->slices.length; const size_t after_size = tmp.length; @@ -185,12 +185,14 @@ static void finish_send_message(grpc_exec_ctx *exec_ctx, gpr_slice_buffer_swap(&calld->slices, &tmp); calld->send_flags |= GRPC_WRITE_INTERNAL_COMPRESS; } else { - if (grpc_compress_filter_trace) { + if (grpc_compression_trace) { char *algo_name; GPR_ASSERT(grpc_compression_algorithm_name(calld->compression_algorithm, &algo_name)); - gpr_log(GPR_DEBUG, "Algorithm '%s' enabled but decided not to compress.", - algo_name); + gpr_log( + GPR_DEBUG, + "Algorithm '%s' enabled but decided not to compress. Input size: %d", + algo_name, calld->slices.length); } } diff --git a/src/core/lib/channel/compress_filter.h b/src/core/lib/channel/compress_filter.h index cf5879d82ef3fcad2f47b3706b70a0430b3f5925..0ce5d08837dfdec6c890fc97a84d8818c037e86c 100644 --- a/src/core/lib/channel/compress_filter.h +++ b/src/core/lib/channel/compress_filter.h @@ -38,7 +38,7 @@ #define GRPC_COMPRESS_REQUEST_ALGORITHM_KEY "grpc-internal-encoding-request" -extern int grpc_compress_filter_trace; +extern int grpc_compression_trace; /** Compression filter for outgoing data. * diff --git a/src/core/lib/http/parser.c b/src/core/lib/http/parser.c index a7efb5e73ead4434b0102103960674c32b532b7f..09b2ed40d178d7e7b6faf3d5094c380a1ae119cf 100644 --- a/src/core/lib/http/parser.c +++ b/src/core/lib/http/parser.c @@ -161,8 +161,9 @@ static int add_header(grpc_http_parser *parser) { cur++; } if (cur == end) { - if (grpc_http1_trace) + if (grpc_http1_trace) { gpr_log(GPR_ERROR, "Didn't find ':' in header string"); + } goto error; } GPR_ASSERT(cur >= beg); diff --git a/src/core/lib/iomgr/ev_poll_and_epoll_posix.c b/src/core/lib/iomgr/ev_poll_and_epoll_posix.c index 3c8127e1a8c13f60b15a04d346a644fe98d21509..aeb6e286658b113e672883c01d2ce45a7b6438d8 100644 --- a/src/core/lib/iomgr/ev_poll_and_epoll_posix.c +++ b/src/core/lib/iomgr/ev_poll_and_epoll_posix.c @@ -790,7 +790,6 @@ static void pollset_kick(grpc_pollset *p, static void pollset_global_init(void) { gpr_tls_init(&g_current_thread_poller); gpr_tls_init(&g_current_thread_worker); - grpc_wakeup_fd_global_init(); grpc_wakeup_fd_init(&grpc_global_wakeup_fd); } @@ -798,7 +797,6 @@ static void pollset_global_shutdown(void) { grpc_wakeup_fd_destroy(&grpc_global_wakeup_fd); gpr_tls_destroy(&g_current_thread_poller); gpr_tls_destroy(&g_current_thread_worker); - grpc_wakeup_fd_global_destroy(); } static void kick_poller(void) { grpc_wakeup_fd_wakeup(&grpc_global_wakeup_fd); } diff --git a/src/core/lib/iomgr/ev_poll_posix.c b/src/core/lib/iomgr/ev_poll_posix.c new file mode 100644 index 0000000000000000000000000000000000000000..e91ae4021221f1906e8221d293d9621ad8fbdfc3 --- /dev/null +++ b/src/core/lib/iomgr/ev_poll_posix.c @@ -0,0 +1,1212 @@ +/* + * + * Copyright 2015-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 <grpc/support/port_platform.h> + +#ifdef GPR_POSIX_SOCKET + +#include "src/core/lib/iomgr/ev_poll_posix.h" + +#include <assert.h> +#include <errno.h> +#include <poll.h> +#include <string.h> +#include <sys/socket.h> +#include <unistd.h> + +#include <grpc/support/alloc.h> +#include <grpc/support/log.h> +#include <grpc/support/string_util.h> +#include <grpc/support/tls.h> +#include <grpc/support/useful.h> + +#include "src/core/lib/iomgr/iomgr_internal.h" +#include "src/core/lib/iomgr/wakeup_fd_posix.h" +#include "src/core/lib/profiling/timers.h" +#include "src/core/lib/support/block_annotate.h" + +/******************************************************************************* + * FD declarations + */ + +typedef struct grpc_fd_watcher { + struct grpc_fd_watcher *next; + struct grpc_fd_watcher *prev; + grpc_pollset *pollset; + grpc_pollset_worker *worker; + grpc_fd *fd; +} grpc_fd_watcher; + +struct grpc_fd { + int fd; + /* refst format: + bit0: 1=active/0=orphaned + bit1-n: refcount + meaning that mostly we ref by two to avoid altering the orphaned bit, + and just unref by 1 when we're ready to flag the object as orphaned */ + gpr_atm refst; + + gpr_mu mu; + int shutdown; + int closed; + int released; + + /* The watcher list. + + The following watcher related fields are protected by watcher_mu. + + An fd_watcher is an ephemeral object created when an fd wants to + begin polling, and destroyed after the poll. + + It denotes the fd's interest in whether to read poll or write poll + or both or neither on this fd. + + If a watcher is asked to poll for reads or writes, the read_watcher + or write_watcher fields are set respectively. A watcher may be asked + to poll for both, in which case both fields will be set. + + read_watcher and write_watcher may be NULL if no watcher has been + asked to poll for reads or writes. + + If an fd_watcher is not asked to poll for reads or writes, it's added + to a linked list of inactive watchers, rooted at inactive_watcher_root. + If at a later time there becomes need of a poller to poll, one of + the inactive pollers may be kicked out of their poll loops to take + that responsibility. */ + grpc_fd_watcher inactive_watcher_root; + grpc_fd_watcher *read_watcher; + grpc_fd_watcher *write_watcher; + + grpc_closure *read_closure; + grpc_closure *write_closure; + + grpc_closure *on_done_closure; + + grpc_iomgr_object iomgr_object; +}; + +/* Begin polling on an fd. + Registers that the given pollset is interested in this fd - so that if read + or writability interest changes, the pollset can be kicked to pick up that + new interest. + Return value is: + (fd_needs_read? read_mask : 0) | (fd_needs_write? write_mask : 0) + i.e. a combination of read_mask and write_mask determined by the fd's current + interest in said events. + Polling strategies that do not need to alter their behavior depending on the + fd's current interest (such as epoll) do not need to call this function. + MUST NOT be called with a pollset lock taken */ +static uint32_t fd_begin_poll(grpc_fd *fd, grpc_pollset *pollset, + grpc_pollset_worker *worker, uint32_t read_mask, + uint32_t write_mask, grpc_fd_watcher *rec); +/* Complete polling previously started with fd_begin_poll + MUST NOT be called with a pollset lock taken + if got_read or got_write are 1, also does the become_{readable,writable} as + appropriate. */ +static void fd_end_poll(grpc_exec_ctx *exec_ctx, grpc_fd_watcher *rec, + int got_read, int got_write); + +/* Return 1 if this fd is orphaned, 0 otherwise */ +static bool fd_is_orphaned(grpc_fd *fd); + +/* Reference counting for fds */ +/*#define GRPC_FD_REF_COUNT_DEBUG*/ +#ifdef GRPC_FD_REF_COUNT_DEBUG +static void fd_ref(grpc_fd *fd, const char *reason, const char *file, int line); +static void fd_unref(grpc_fd *fd, const char *reason, const char *file, + int line); +#define GRPC_FD_REF(fd, reason) fd_ref(fd, reason, __FILE__, __LINE__) +#define GRPC_FD_UNREF(fd, reason) fd_unref(fd, reason, __FILE__, __LINE__) +#else +static void fd_ref(grpc_fd *fd); +static void fd_unref(grpc_fd *fd); +#define GRPC_FD_REF(fd, reason) fd_ref(fd) +#define GRPC_FD_UNREF(fd, reason) fd_unref(fd) +#endif + +#define CLOSURE_NOT_READY ((grpc_closure *)0) +#define CLOSURE_READY ((grpc_closure *)1) + +/******************************************************************************* + * pollset declarations + */ + +typedef struct grpc_cached_wakeup_fd { + grpc_wakeup_fd fd; + struct grpc_cached_wakeup_fd *next; +} grpc_cached_wakeup_fd; + +struct grpc_pollset_worker { + grpc_cached_wakeup_fd *wakeup_fd; + int reevaluate_polling_on_wakeup; + int kicked_specifically; + struct grpc_pollset_worker *next; + struct grpc_pollset_worker *prev; +}; + +struct grpc_pollset { + gpr_mu mu; + grpc_pollset_worker root_worker; + int in_flight_cbs; + int shutting_down; + int called_shutdown; + int kicked_without_pollers; + grpc_closure *shutdown_done; + grpc_closure_list idle_jobs; + /* all polled fds */ + size_t fd_count; + size_t fd_capacity; + grpc_fd **fds; + /* fds that have been removed from the pollset explicitly */ + size_t del_count; + size_t del_capacity; + grpc_fd **dels; + /* Local cache of eventfds for workers */ + grpc_cached_wakeup_fd *local_wakeup_cache; +}; + +/* Add an fd to a pollset */ +static void pollset_add_fd(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, + struct grpc_fd *fd); + +static void pollset_set_add_fd(grpc_exec_ctx *exec_ctx, + grpc_pollset_set *pollset_set, grpc_fd *fd); + +/* Convert a timespec to milliseconds: + - very small or negative poll times are clamped to zero to do a + non-blocking poll (which becomes spin polling) + - other small values are rounded up to one millisecond + - longer than a millisecond polls are rounded up to the next nearest + millisecond to avoid spinning + - infinite timeouts are converted to -1 */ +static int poll_deadline_to_millis_timeout(gpr_timespec deadline, + gpr_timespec now); + +/* Allow kick to wakeup the currently polling worker */ +#define GRPC_POLLSET_CAN_KICK_SELF 1 +/* Force the wakee to repoll when awoken */ +#define GRPC_POLLSET_REEVALUATE_POLLING_ON_WAKEUP 2 +/* As per pollset_kick, with an extended set of flags (defined above) + -- mostly for fd_posix's use. */ +static void pollset_kick_ext(grpc_pollset *p, + grpc_pollset_worker *specific_worker, + uint32_t flags); + +/* Return 1 if the pollset has active threads in pollset_work (pollset must + * be locked) */ +static int pollset_has_workers(grpc_pollset *pollset); + +/******************************************************************************* + * pollset_set definitions + */ + +struct grpc_pollset_set { + gpr_mu mu; + + size_t pollset_count; + size_t pollset_capacity; + grpc_pollset **pollsets; + + size_t pollset_set_count; + size_t pollset_set_capacity; + struct grpc_pollset_set **pollset_sets; + + size_t fd_count; + size_t fd_capacity; + grpc_fd **fds; +}; + +/******************************************************************************* + * fd_posix.c + */ + +#ifdef GRPC_FD_REF_COUNT_DEBUG +#define REF_BY(fd, n, reason) ref_by(fd, n, reason, __FILE__, __LINE__) +#define UNREF_BY(fd, n, reason) unref_by(fd, n, reason, __FILE__, __LINE__) +static void ref_by(grpc_fd *fd, int n, const char *reason, const char *file, + int line) { + gpr_log(GPR_DEBUG, "FD %d %p ref %d %d -> %d [%s; %s:%d]", fd->fd, fd, n, + gpr_atm_no_barrier_load(&fd->refst), + gpr_atm_no_barrier_load(&fd->refst) + n, reason, file, line); +#else +#define REF_BY(fd, n, reason) ref_by(fd, n) +#define UNREF_BY(fd, n, reason) unref_by(fd, n) +static void ref_by(grpc_fd *fd, int n) { +#endif + GPR_ASSERT(gpr_atm_no_barrier_fetch_add(&fd->refst, n) > 0); +} + +#ifdef GRPC_FD_REF_COUNT_DEBUG +static void unref_by(grpc_fd *fd, int n, const char *reason, const char *file, + int line) { + gpr_atm old; + gpr_log(GPR_DEBUG, "FD %d %p unref %d %d -> %d [%s; %s:%d]", fd->fd, fd, n, + gpr_atm_no_barrier_load(&fd->refst), + gpr_atm_no_barrier_load(&fd->refst) - n, reason, file, line); +#else +static void unref_by(grpc_fd *fd, int n) { + gpr_atm old; +#endif + old = gpr_atm_full_fetch_add(&fd->refst, -n); + if (old == n) { + gpr_mu_destroy(&fd->mu); + grpc_iomgr_unregister_object(&fd->iomgr_object); + gpr_free(fd); + } else { + GPR_ASSERT(old > n); + } +} + +static grpc_fd *fd_create(int fd, const char *name) { + grpc_fd *r = gpr_malloc(sizeof(*r)); + gpr_mu_init(&r->mu); + gpr_atm_rel_store(&r->refst, 1); + r->shutdown = 0; + r->read_closure = CLOSURE_NOT_READY; + r->write_closure = CLOSURE_NOT_READY; + r->fd = fd; + r->inactive_watcher_root.next = r->inactive_watcher_root.prev = + &r->inactive_watcher_root; + r->read_watcher = r->write_watcher = NULL; + r->on_done_closure = NULL; + r->closed = 0; + r->released = 0; + + char *name2; + gpr_asprintf(&name2, "%s fd=%d", name, fd); + grpc_iomgr_register_object(&r->iomgr_object, name2); + gpr_free(name2); +#ifdef GRPC_FD_REF_COUNT_DEBUG + gpr_log(GPR_DEBUG, "FD %d %p create %s", fd, r, name); +#endif + return r; +} + +static bool fd_is_orphaned(grpc_fd *fd) { + return (gpr_atm_acq_load(&fd->refst) & 1) == 0; +} + +static void pollset_kick_locked(grpc_fd_watcher *watcher) { + gpr_mu_lock(&watcher->pollset->mu); + GPR_ASSERT(watcher->worker); + pollset_kick_ext(watcher->pollset, watcher->worker, + GRPC_POLLSET_REEVALUATE_POLLING_ON_WAKEUP); + gpr_mu_unlock(&watcher->pollset->mu); +} + +static void maybe_wake_one_watcher_locked(grpc_fd *fd) { + if (fd->inactive_watcher_root.next != &fd->inactive_watcher_root) { + pollset_kick_locked(fd->inactive_watcher_root.next); + } else if (fd->read_watcher) { + pollset_kick_locked(fd->read_watcher); + } else if (fd->write_watcher) { + pollset_kick_locked(fd->write_watcher); + } +} + +static void wake_all_watchers_locked(grpc_fd *fd) { + grpc_fd_watcher *watcher; + for (watcher = fd->inactive_watcher_root.next; + watcher != &fd->inactive_watcher_root; watcher = watcher->next) { + pollset_kick_locked(watcher); + } + if (fd->read_watcher) { + pollset_kick_locked(fd->read_watcher); + } + if (fd->write_watcher && fd->write_watcher != fd->read_watcher) { + pollset_kick_locked(fd->write_watcher); + } +} + +static int has_watchers(grpc_fd *fd) { + return fd->read_watcher != NULL || fd->write_watcher != NULL || + fd->inactive_watcher_root.next != &fd->inactive_watcher_root; +} + +static void close_fd_locked(grpc_exec_ctx *exec_ctx, grpc_fd *fd) { + fd->closed = 1; + if (!fd->released) { + close(fd->fd); + } + grpc_exec_ctx_enqueue(exec_ctx, fd->on_done_closure, true, NULL); +} + +static int fd_wrapped_fd(grpc_fd *fd) { + if (fd->released || fd->closed) { + return -1; + } else { + return fd->fd; + } +} + +static void fd_orphan(grpc_exec_ctx *exec_ctx, grpc_fd *fd, + grpc_closure *on_done, int *release_fd, + const char *reason) { + fd->on_done_closure = on_done; + fd->released = release_fd != NULL; + if (!fd->released) { + shutdown(fd->fd, SHUT_RDWR); + } else { + *release_fd = fd->fd; + } + gpr_mu_lock(&fd->mu); + REF_BY(fd, 1, reason); /* remove active status, but keep referenced */ + if (!has_watchers(fd)) { + close_fd_locked(exec_ctx, fd); + } else { + wake_all_watchers_locked(fd); + } + gpr_mu_unlock(&fd->mu); + UNREF_BY(fd, 2, reason); /* drop the reference */ +} + +/* increment refcount by two to avoid changing the orphan bit */ +#ifdef GRPC_FD_REF_COUNT_DEBUG +static void fd_ref(grpc_fd *fd, const char *reason, const char *file, + int line) { + ref_by(fd, 2, reason, file, line); +} + +static void fd_unref(grpc_fd *fd, const char *reason, const char *file, + int line) { + unref_by(fd, 2, reason, file, line); +} +#else +static void fd_ref(grpc_fd *fd) { ref_by(fd, 2); } + +static void fd_unref(grpc_fd *fd) { unref_by(fd, 2); } +#endif + +static void notify_on_locked(grpc_exec_ctx *exec_ctx, grpc_fd *fd, + grpc_closure **st, grpc_closure *closure) { + if (*st == CLOSURE_NOT_READY) { + /* not ready ==> switch to a waiting state by setting the closure */ + *st = closure; + } else if (*st == CLOSURE_READY) { + /* already ready ==> queue the closure to run immediately */ + *st = CLOSURE_NOT_READY; + grpc_exec_ctx_enqueue(exec_ctx, closure, !fd->shutdown, NULL); + maybe_wake_one_watcher_locked(fd); + } else { + /* upcallptr was set to a different closure. This is an error! */ + gpr_log(GPR_ERROR, + "User called a notify_on function with a previous callback still " + "pending"); + abort(); + } +} + +/* returns 1 if state becomes not ready */ +static int set_ready_locked(grpc_exec_ctx *exec_ctx, grpc_fd *fd, + grpc_closure **st) { + if (*st == CLOSURE_READY) { + /* duplicate ready ==> ignore */ + return 0; + } else if (*st == CLOSURE_NOT_READY) { + /* not ready, and not waiting ==> flag ready */ + *st = CLOSURE_READY; + return 0; + } else { + /* waiting ==> queue closure */ + grpc_exec_ctx_enqueue(exec_ctx, *st, !fd->shutdown, NULL); + *st = CLOSURE_NOT_READY; + return 1; + } +} + +static void fd_shutdown(grpc_exec_ctx *exec_ctx, grpc_fd *fd) { + gpr_mu_lock(&fd->mu); + GPR_ASSERT(!fd->shutdown); + fd->shutdown = 1; + set_ready_locked(exec_ctx, fd, &fd->read_closure); + set_ready_locked(exec_ctx, fd, &fd->write_closure); + gpr_mu_unlock(&fd->mu); +} + +static void fd_notify_on_read(grpc_exec_ctx *exec_ctx, grpc_fd *fd, + grpc_closure *closure) { + gpr_mu_lock(&fd->mu); + notify_on_locked(exec_ctx, fd, &fd->read_closure, closure); + gpr_mu_unlock(&fd->mu); +} + +static void fd_notify_on_write(grpc_exec_ctx *exec_ctx, grpc_fd *fd, + grpc_closure *closure) { + gpr_mu_lock(&fd->mu); + notify_on_locked(exec_ctx, fd, &fd->write_closure, closure); + gpr_mu_unlock(&fd->mu); +} + +static uint32_t fd_begin_poll(grpc_fd *fd, grpc_pollset *pollset, + grpc_pollset_worker *worker, uint32_t read_mask, + uint32_t write_mask, grpc_fd_watcher *watcher) { + uint32_t mask = 0; + grpc_closure *cur; + int requested; + /* keep track of pollers that have requested our events, in case they change + */ + GRPC_FD_REF(fd, "poll"); + + gpr_mu_lock(&fd->mu); + + /* if we are shutdown, then don't add to the watcher set */ + if (fd->shutdown) { + watcher->fd = NULL; + watcher->pollset = NULL; + watcher->worker = NULL; + gpr_mu_unlock(&fd->mu); + GRPC_FD_UNREF(fd, "poll"); + return 0; + } + + /* if there is nobody polling for read, but we need to, then start doing so */ + cur = fd->read_closure; + requested = cur != CLOSURE_READY; + if (read_mask && fd->read_watcher == NULL && requested) { + fd->read_watcher = watcher; + mask |= read_mask; + } + /* if there is nobody polling for write, but we need to, then start doing so + */ + cur = fd->write_closure; + requested = cur != CLOSURE_READY; + if (write_mask && fd->write_watcher == NULL && requested) { + fd->write_watcher = watcher; + mask |= write_mask; + } + /* if not polling, remember this watcher in case we need someone to later */ + if (mask == 0 && worker != NULL) { + watcher->next = &fd->inactive_watcher_root; + watcher->prev = watcher->next->prev; + watcher->next->prev = watcher->prev->next = watcher; + } + watcher->pollset = pollset; + watcher->worker = worker; + watcher->fd = fd; + gpr_mu_unlock(&fd->mu); + + return mask; +} + +static void fd_end_poll(grpc_exec_ctx *exec_ctx, grpc_fd_watcher *watcher, + int got_read, int got_write) { + int was_polling = 0; + int kick = 0; + grpc_fd *fd = watcher->fd; + + if (fd == NULL) { + return; + } + + gpr_mu_lock(&fd->mu); + + if (watcher == fd->read_watcher) { + /* remove read watcher, kick if we still need a read */ + was_polling = 1; + if (!got_read) { + kick = 1; + } + fd->read_watcher = NULL; + } + if (watcher == fd->write_watcher) { + /* remove write watcher, kick if we still need a write */ + was_polling = 1; + if (!got_write) { + kick = 1; + } + fd->write_watcher = NULL; + } + if (!was_polling && watcher->worker != NULL) { + /* remove from inactive list */ + watcher->next->prev = watcher->prev; + watcher->prev->next = watcher->next; + } + if (got_read) { + if (set_ready_locked(exec_ctx, fd, &fd->read_closure)) { + kick = 1; + } + } + if (got_write) { + if (set_ready_locked(exec_ctx, fd, &fd->write_closure)) { + kick = 1; + } + } + if (kick) { + maybe_wake_one_watcher_locked(fd); + } + if (fd_is_orphaned(fd) && !has_watchers(fd) && !fd->closed) { + close_fd_locked(exec_ctx, fd); + } + gpr_mu_unlock(&fd->mu); + + GRPC_FD_UNREF(fd, "poll"); +} + +/******************************************************************************* + * pollset_posix.c + */ + +GPR_TLS_DECL(g_current_thread_poller); +GPR_TLS_DECL(g_current_thread_worker); + +static void remove_worker(grpc_pollset *p, grpc_pollset_worker *worker) { + worker->prev->next = worker->next; + worker->next->prev = worker->prev; +} + +static int pollset_has_workers(grpc_pollset *p) { + return p->root_worker.next != &p->root_worker; +} + +static grpc_pollset_worker *pop_front_worker(grpc_pollset *p) { + if (pollset_has_workers(p)) { + grpc_pollset_worker *w = p->root_worker.next; + remove_worker(p, w); + return w; + } else { + return NULL; + } +} + +static void push_back_worker(grpc_pollset *p, grpc_pollset_worker *worker) { + worker->next = &p->root_worker; + worker->prev = worker->next->prev; + worker->prev->next = worker->next->prev = worker; +} + +static void push_front_worker(grpc_pollset *p, grpc_pollset_worker *worker) { + worker->prev = &p->root_worker; + worker->next = worker->prev->next; + worker->prev->next = worker->next->prev = worker; +} + +static void pollset_kick_ext(grpc_pollset *p, + grpc_pollset_worker *specific_worker, + uint32_t flags) { + GPR_TIMER_BEGIN("pollset_kick_ext", 0); + + /* pollset->mu already held */ + if (specific_worker != NULL) { + if (specific_worker == GRPC_POLLSET_KICK_BROADCAST) { + GPR_TIMER_BEGIN("pollset_kick_ext.broadcast", 0); + GPR_ASSERT((flags & GRPC_POLLSET_REEVALUATE_POLLING_ON_WAKEUP) == 0); + for (specific_worker = p->root_worker.next; + specific_worker != &p->root_worker; + specific_worker = specific_worker->next) { + grpc_wakeup_fd_wakeup(&specific_worker->wakeup_fd->fd); + } + p->kicked_without_pollers = 1; + GPR_TIMER_END("pollset_kick_ext.broadcast", 0); + } else if (gpr_tls_get(&g_current_thread_worker) != + (intptr_t)specific_worker) { + GPR_TIMER_MARK("different_thread_worker", 0); + if ((flags & GRPC_POLLSET_REEVALUATE_POLLING_ON_WAKEUP) != 0) { + specific_worker->reevaluate_polling_on_wakeup = 1; + } + specific_worker->kicked_specifically = 1; + grpc_wakeup_fd_wakeup(&specific_worker->wakeup_fd->fd); + } else if ((flags & GRPC_POLLSET_CAN_KICK_SELF) != 0) { + GPR_TIMER_MARK("kick_yoself", 0); + if ((flags & GRPC_POLLSET_REEVALUATE_POLLING_ON_WAKEUP) != 0) { + specific_worker->reevaluate_polling_on_wakeup = 1; + } + specific_worker->kicked_specifically = 1; + grpc_wakeup_fd_wakeup(&specific_worker->wakeup_fd->fd); + } + } else if (gpr_tls_get(&g_current_thread_poller) != (intptr_t)p) { + GPR_ASSERT((flags & GRPC_POLLSET_REEVALUATE_POLLING_ON_WAKEUP) == 0); + GPR_TIMER_MARK("kick_anonymous", 0); + specific_worker = pop_front_worker(p); + if (specific_worker != NULL) { + if (gpr_tls_get(&g_current_thread_worker) == (intptr_t)specific_worker) { + GPR_TIMER_MARK("kick_anonymous_not_self", 0); + push_back_worker(p, specific_worker); + specific_worker = pop_front_worker(p); + if ((flags & GRPC_POLLSET_CAN_KICK_SELF) == 0 && + gpr_tls_get(&g_current_thread_worker) == + (intptr_t)specific_worker) { + push_back_worker(p, specific_worker); + specific_worker = NULL; + } + } + if (specific_worker != NULL) { + GPR_TIMER_MARK("finally_kick", 0); + push_back_worker(p, specific_worker); + grpc_wakeup_fd_wakeup(&specific_worker->wakeup_fd->fd); + } + } else { + GPR_TIMER_MARK("kicked_no_pollers", 0); + p->kicked_without_pollers = 1; + } + } + + GPR_TIMER_END("pollset_kick_ext", 0); +} + +static void pollset_kick(grpc_pollset *p, + grpc_pollset_worker *specific_worker) { + pollset_kick_ext(p, specific_worker, 0); +} + +/* global state management */ + +static void pollset_global_init(void) { + gpr_tls_init(&g_current_thread_poller); + gpr_tls_init(&g_current_thread_worker); + grpc_wakeup_fd_init(&grpc_global_wakeup_fd); +} + +static void pollset_global_shutdown(void) { + grpc_wakeup_fd_destroy(&grpc_global_wakeup_fd); + gpr_tls_destroy(&g_current_thread_poller); + gpr_tls_destroy(&g_current_thread_worker); +} + +static void kick_poller(void) { grpc_wakeup_fd_wakeup(&grpc_global_wakeup_fd); } + +/* main interface */ + +static void pollset_init(grpc_pollset *pollset, gpr_mu **mu) { + gpr_mu_init(&pollset->mu); + *mu = &pollset->mu; + pollset->root_worker.next = pollset->root_worker.prev = &pollset->root_worker; + pollset->in_flight_cbs = 0; + pollset->shutting_down = 0; + pollset->called_shutdown = 0; + pollset->kicked_without_pollers = 0; + pollset->idle_jobs.head = pollset->idle_jobs.tail = NULL; + pollset->local_wakeup_cache = NULL; + pollset->kicked_without_pollers = 0; + pollset->fd_count = 0; + pollset->fd_capacity = 0; + pollset->del_count = 0; + pollset->del_capacity = 0; + pollset->fds = NULL; + pollset->dels = NULL; +} + +static void pollset_destroy(grpc_pollset *pollset) { + GPR_ASSERT(pollset->in_flight_cbs == 0); + GPR_ASSERT(!pollset_has_workers(pollset)); + GPR_ASSERT(pollset->idle_jobs.head == pollset->idle_jobs.tail); + while (pollset->local_wakeup_cache) { + grpc_cached_wakeup_fd *next = pollset->local_wakeup_cache->next; + grpc_wakeup_fd_destroy(&pollset->local_wakeup_cache->fd); + gpr_free(pollset->local_wakeup_cache); + pollset->local_wakeup_cache = next; + } + gpr_free(pollset->fds); + gpr_free(pollset->dels); + gpr_mu_destroy(&pollset->mu); +} + +static void pollset_reset(grpc_pollset *pollset) { + GPR_ASSERT(pollset->shutting_down); + GPR_ASSERT(pollset->in_flight_cbs == 0); + GPR_ASSERT(!pollset_has_workers(pollset)); + GPR_ASSERT(pollset->idle_jobs.head == pollset->idle_jobs.tail); + GPR_ASSERT(pollset->fd_count == 0); + GPR_ASSERT(pollset->del_count == 0); + pollset->shutting_down = 0; + pollset->called_shutdown = 0; + pollset->kicked_without_pollers = 0; +} + +static void pollset_add_fd(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, + grpc_fd *fd) { + gpr_mu_lock(&pollset->mu); + size_t i; + /* TODO(ctiller): this is O(num_fds^2); maybe switch to a hash set here */ + for (i = 0; i < pollset->fd_count; i++) { + if (pollset->fds[i] == fd) goto exit; + } + if (pollset->fd_count == pollset->fd_capacity) { + pollset->fd_capacity = + GPR_MAX(pollset->fd_capacity + 8, pollset->fd_count * 3 / 2); + pollset->fds = + gpr_realloc(pollset->fds, sizeof(grpc_fd *) * pollset->fd_capacity); + } + pollset->fds[pollset->fd_count++] = fd; + GRPC_FD_REF(fd, "multipoller"); + pollset_kick(pollset, NULL); +exit: + gpr_mu_unlock(&pollset->mu); +} + +static void finish_shutdown(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset) { + GPR_ASSERT(grpc_closure_list_empty(pollset->idle_jobs)); + size_t i; + for (i = 0; i < pollset->fd_count; i++) { + GRPC_FD_UNREF(pollset->fds[i], "multipoller"); + } + for (i = 0; i < pollset->del_count; i++) { + GRPC_FD_UNREF(pollset->dels[i], "multipoller_del"); + } + pollset->fd_count = 0; + pollset->del_count = 0; + grpc_exec_ctx_enqueue(exec_ctx, pollset->shutdown_done, true, NULL); +} + +static void pollset_work(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, + grpc_pollset_worker **worker_hdl, gpr_timespec now, + gpr_timespec deadline) { + grpc_pollset_worker worker; + *worker_hdl = &worker; + + /* pollset->mu already held */ + int added_worker = 0; + int locked = 1; + int queued_work = 0; + int keep_polling = 0; + GPR_TIMER_BEGIN("pollset_work", 0); + /* this must happen before we (potentially) drop pollset->mu */ + worker.next = worker.prev = NULL; + worker.reevaluate_polling_on_wakeup = 0; + if (pollset->local_wakeup_cache != NULL) { + worker.wakeup_fd = pollset->local_wakeup_cache; + pollset->local_wakeup_cache = worker.wakeup_fd->next; + } else { + worker.wakeup_fd = gpr_malloc(sizeof(*worker.wakeup_fd)); + grpc_wakeup_fd_init(&worker.wakeup_fd->fd); + } + worker.kicked_specifically = 0; + /* If there's work waiting for the pollset to be idle, and the + pollset is idle, then do that work */ + if (!pollset_has_workers(pollset) && + !grpc_closure_list_empty(pollset->idle_jobs)) { + GPR_TIMER_MARK("pollset_work.idle_jobs", 0); + grpc_exec_ctx_enqueue_list(exec_ctx, &pollset->idle_jobs, NULL); + goto done; + } + /* If we're shutting down then we don't execute any extended work */ + if (pollset->shutting_down) { + GPR_TIMER_MARK("pollset_work.shutting_down", 0); + goto done; + } + /* Give do_promote priority so we don't starve it out */ + if (pollset->in_flight_cbs) { + GPR_TIMER_MARK("pollset_work.in_flight_cbs", 0); + gpr_mu_unlock(&pollset->mu); + locked = 0; + goto done; + } + /* Start polling, and keep doing so while we're being asked to + re-evaluate our pollers (this allows poll() based pollers to + ensure they don't miss wakeups) */ + keep_polling = 1; + gpr_tls_set(&g_current_thread_poller, (intptr_t)pollset); + while (keep_polling) { + keep_polling = 0; + if (!pollset->kicked_without_pollers) { + if (!added_worker) { + push_front_worker(pollset, &worker); + added_worker = 1; + gpr_tls_set(&g_current_thread_worker, (intptr_t)&worker); + } + GPR_TIMER_BEGIN("maybe_work_and_unlock", 0); +#define POLLOUT_CHECK (POLLOUT | POLLHUP | POLLERR) +#define POLLIN_CHECK (POLLIN | POLLHUP | POLLERR) + + int timeout; + int r; + size_t i, j, fd_count; + nfds_t pfd_count; + /* TODO(ctiller): inline some elements to avoid an allocation */ + grpc_fd_watcher *watchers; + struct pollfd *pfds; + + timeout = poll_deadline_to_millis_timeout(deadline, now); + /* TODO(ctiller): perform just one malloc here if we exceed the inline + * case */ + pfds = gpr_malloc(sizeof(*pfds) * (pollset->fd_count + 2)); + watchers = gpr_malloc(sizeof(*watchers) * (pollset->fd_count + 2)); + fd_count = 0; + pfd_count = 2; + pfds[0].fd = GRPC_WAKEUP_FD_GET_READ_FD(&grpc_global_wakeup_fd); + pfds[0].events = POLLIN; + pfds[0].revents = 0; + pfds[1].fd = GRPC_WAKEUP_FD_GET_READ_FD(&worker.wakeup_fd->fd); + pfds[1].events = POLLIN; + pfds[1].revents = 0; + for (i = 0; i < pollset->fd_count; i++) { + int remove = fd_is_orphaned(pollset->fds[i]); + for (j = 0; !remove && j < pollset->del_count; j++) { + if (pollset->fds[i] == pollset->dels[j]) remove = 1; + } + if (remove) { + GRPC_FD_UNREF(pollset->fds[i], "multipoller"); + } else { + pollset->fds[fd_count++] = pollset->fds[i]; + watchers[pfd_count].fd = pollset->fds[i]; + GRPC_FD_REF(watchers[pfd_count].fd, "multipoller_start"); + pfds[pfd_count].fd = pollset->fds[i]->fd; + pfds[pfd_count].revents = 0; + pfd_count++; + } + } + for (j = 0; j < pollset->del_count; j++) { + GRPC_FD_UNREF(pollset->dels[j], "multipoller_del"); + } + pollset->del_count = 0; + pollset->fd_count = fd_count; + gpr_mu_unlock(&pollset->mu); + + for (i = 2; i < pfd_count; i++) { + grpc_fd *fd = watchers[i].fd; + pfds[i].events = (short)fd_begin_poll(fd, pollset, &worker, POLLIN, + POLLOUT, &watchers[i]); + GRPC_FD_UNREF(fd, "multipoller_start"); + } + + /* TODO(vpai): Consider first doing a 0 timeout poll here to avoid + even going into the blocking annotation if possible */ + GRPC_SCHEDULING_START_BLOCKING_REGION; + r = grpc_poll_function(pfds, pfd_count, timeout); + GRPC_SCHEDULING_END_BLOCKING_REGION; + + if (r < 0) { + if (errno != EINTR) { + gpr_log(GPR_ERROR, "poll() failed: %s", strerror(errno)); + } + for (i = 2; i < pfd_count; i++) { + fd_end_poll(exec_ctx, &watchers[i], 0, 0); + } + } else if (r == 0) { + for (i = 2; i < pfd_count; i++) { + fd_end_poll(exec_ctx, &watchers[i], 0, 0); + } + } else { + if (pfds[0].revents & POLLIN_CHECK) { + grpc_wakeup_fd_consume_wakeup(&grpc_global_wakeup_fd); + } + if (pfds[1].revents & POLLIN_CHECK) { + grpc_wakeup_fd_consume_wakeup(&worker.wakeup_fd->fd); + } + for (i = 2; i < pfd_count; i++) { + if (watchers[i].fd == NULL) { + fd_end_poll(exec_ctx, &watchers[i], 0, 0); + } else { + fd_end_poll(exec_ctx, &watchers[i], pfds[i].revents & POLLIN_CHECK, + pfds[i].revents & POLLOUT_CHECK); + } + } + } + + gpr_free(pfds); + gpr_free(watchers); + GPR_TIMER_END("maybe_work_and_unlock", 0); + locked = 0; + } else { + GPR_TIMER_MARK("pollset_work.kicked_without_pollers", 0); + pollset->kicked_without_pollers = 0; + } + /* Finished execution - start cleaning up. + Note that we may arrive here from outside the enclosing while() loop. + In that case we won't loop though as we haven't added worker to the + worker list, which means nobody could ask us to re-evaluate polling). */ + done: + if (!locked) { + queued_work |= grpc_exec_ctx_flush(exec_ctx); + gpr_mu_lock(&pollset->mu); + locked = 1; + } + /* If we're forced to re-evaluate polling (via pollset_kick with + GRPC_POLLSET_REEVALUATE_POLLING_ON_WAKEUP) then we land here and force + a loop */ + if (worker.reevaluate_polling_on_wakeup) { + worker.reevaluate_polling_on_wakeup = 0; + pollset->kicked_without_pollers = 0; + if (queued_work || worker.kicked_specifically) { + /* If there's queued work on the list, then set the deadline to be + immediate so we get back out of the polling loop quickly */ + deadline = gpr_inf_past(GPR_CLOCK_MONOTONIC); + } + keep_polling = 1; + } + if (keep_polling) { + now = gpr_now(now.clock_type); + } + } + gpr_tls_set(&g_current_thread_poller, 0); + if (added_worker) { + remove_worker(pollset, &worker); + gpr_tls_set(&g_current_thread_worker, 0); + } + /* release wakeup fd to the local pool */ + worker.wakeup_fd->next = pollset->local_wakeup_cache; + pollset->local_wakeup_cache = worker.wakeup_fd; + /* check shutdown conditions */ + if (pollset->shutting_down) { + if (pollset_has_workers(pollset)) { + pollset_kick(pollset, NULL); + } else if (!pollset->called_shutdown && pollset->in_flight_cbs == 0) { + pollset->called_shutdown = 1; + gpr_mu_unlock(&pollset->mu); + finish_shutdown(exec_ctx, pollset); + grpc_exec_ctx_flush(exec_ctx); + /* Continuing to access pollset here is safe -- it is the caller's + * responsibility to not destroy when it has outstanding calls to + * pollset_work. + * TODO(dklempner): Can we refactor the shutdown logic to avoid this? */ + gpr_mu_lock(&pollset->mu); + } else if (!grpc_closure_list_empty(pollset->idle_jobs)) { + grpc_exec_ctx_enqueue_list(exec_ctx, &pollset->idle_jobs, NULL); + gpr_mu_unlock(&pollset->mu); + grpc_exec_ctx_flush(exec_ctx); + gpr_mu_lock(&pollset->mu); + } + } + *worker_hdl = NULL; + GPR_TIMER_END("pollset_work", 0); +} + +static void pollset_shutdown(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, + grpc_closure *closure) { + GPR_ASSERT(!pollset->shutting_down); + pollset->shutting_down = 1; + pollset->shutdown_done = closure; + pollset_kick(pollset, GRPC_POLLSET_KICK_BROADCAST); + if (!pollset_has_workers(pollset)) { + grpc_exec_ctx_enqueue_list(exec_ctx, &pollset->idle_jobs, NULL); + } + if (!pollset->called_shutdown && pollset->in_flight_cbs == 0 && + !pollset_has_workers(pollset)) { + pollset->called_shutdown = 1; + finish_shutdown(exec_ctx, pollset); + } +} + +static int poll_deadline_to_millis_timeout(gpr_timespec deadline, + gpr_timespec now) { + gpr_timespec timeout; + static const int64_t max_spin_polling_us = 10; + if (gpr_time_cmp(deadline, gpr_inf_future(deadline.clock_type)) == 0) { + return -1; + } + if (gpr_time_cmp(deadline, gpr_time_add(now, gpr_time_from_micros( + max_spin_polling_us, + GPR_TIMESPAN))) <= 0) { + return 0; + } + timeout = gpr_time_sub(deadline, now); + return gpr_time_to_millis(gpr_time_add( + timeout, gpr_time_from_nanos(GPR_NS_PER_MS - 1, GPR_TIMESPAN))); +} + +/******************************************************************************* + * pollset_set_posix.c + */ + +static grpc_pollset_set *pollset_set_create(void) { + grpc_pollset_set *pollset_set = gpr_malloc(sizeof(*pollset_set)); + memset(pollset_set, 0, sizeof(*pollset_set)); + gpr_mu_init(&pollset_set->mu); + return pollset_set; +} + +static void pollset_set_destroy(grpc_pollset_set *pollset_set) { + size_t i; + gpr_mu_destroy(&pollset_set->mu); + for (i = 0; i < pollset_set->fd_count; i++) { + GRPC_FD_UNREF(pollset_set->fds[i], "pollset_set"); + } + gpr_free(pollset_set->pollsets); + gpr_free(pollset_set->pollset_sets); + gpr_free(pollset_set->fds); + gpr_free(pollset_set); +} + +static void pollset_set_add_pollset(grpc_exec_ctx *exec_ctx, + grpc_pollset_set *pollset_set, + grpc_pollset *pollset) { + size_t i, j; + gpr_mu_lock(&pollset_set->mu); + if (pollset_set->pollset_count == pollset_set->pollset_capacity) { + pollset_set->pollset_capacity = + GPR_MAX(8, 2 * pollset_set->pollset_capacity); + pollset_set->pollsets = + gpr_realloc(pollset_set->pollsets, pollset_set->pollset_capacity * + sizeof(*pollset_set->pollsets)); + } + pollset_set->pollsets[pollset_set->pollset_count++] = pollset; + for (i = 0, j = 0; i < pollset_set->fd_count; i++) { + if (fd_is_orphaned(pollset_set->fds[i])) { + GRPC_FD_UNREF(pollset_set->fds[i], "pollset_set"); + } else { + pollset_add_fd(exec_ctx, pollset, pollset_set->fds[i]); + pollset_set->fds[j++] = pollset_set->fds[i]; + } + } + pollset_set->fd_count = j; + gpr_mu_unlock(&pollset_set->mu); +} + +static void pollset_set_del_pollset(grpc_exec_ctx *exec_ctx, + grpc_pollset_set *pollset_set, + grpc_pollset *pollset) { + size_t i; + gpr_mu_lock(&pollset_set->mu); + for (i = 0; i < pollset_set->pollset_count; i++) { + if (pollset_set->pollsets[i] == pollset) { + pollset_set->pollset_count--; + GPR_SWAP(grpc_pollset *, pollset_set->pollsets[i], + pollset_set->pollsets[pollset_set->pollset_count]); + break; + } + } + gpr_mu_unlock(&pollset_set->mu); +} + +static void pollset_set_add_pollset_set(grpc_exec_ctx *exec_ctx, + grpc_pollset_set *bag, + grpc_pollset_set *item) { + size_t i, j; + gpr_mu_lock(&bag->mu); + if (bag->pollset_set_count == bag->pollset_set_capacity) { + bag->pollset_set_capacity = GPR_MAX(8, 2 * bag->pollset_set_capacity); + bag->pollset_sets = + gpr_realloc(bag->pollset_sets, + bag->pollset_set_capacity * sizeof(*bag->pollset_sets)); + } + bag->pollset_sets[bag->pollset_set_count++] = item; + for (i = 0, j = 0; i < bag->fd_count; i++) { + if (fd_is_orphaned(bag->fds[i])) { + GRPC_FD_UNREF(bag->fds[i], "pollset_set"); + } else { + pollset_set_add_fd(exec_ctx, item, bag->fds[i]); + bag->fds[j++] = bag->fds[i]; + } + } + bag->fd_count = j; + gpr_mu_unlock(&bag->mu); +} + +static void pollset_set_del_pollset_set(grpc_exec_ctx *exec_ctx, + grpc_pollset_set *bag, + grpc_pollset_set *item) { + size_t i; + gpr_mu_lock(&bag->mu); + for (i = 0; i < bag->pollset_set_count; i++) { + if (bag->pollset_sets[i] == item) { + bag->pollset_set_count--; + GPR_SWAP(grpc_pollset_set *, bag->pollset_sets[i], + bag->pollset_sets[bag->pollset_set_count]); + break; + } + } + gpr_mu_unlock(&bag->mu); +} + +static void pollset_set_add_fd(grpc_exec_ctx *exec_ctx, + grpc_pollset_set *pollset_set, grpc_fd *fd) { + size_t i; + gpr_mu_lock(&pollset_set->mu); + if (pollset_set->fd_count == pollset_set->fd_capacity) { + pollset_set->fd_capacity = GPR_MAX(8, 2 * pollset_set->fd_capacity); + pollset_set->fds = gpr_realloc( + pollset_set->fds, pollset_set->fd_capacity * sizeof(*pollset_set->fds)); + } + GRPC_FD_REF(fd, "pollset_set"); + pollset_set->fds[pollset_set->fd_count++] = fd; + for (i = 0; i < pollset_set->pollset_count; i++) { + pollset_add_fd(exec_ctx, pollset_set->pollsets[i], fd); + } + for (i = 0; i < pollset_set->pollset_set_count; i++) { + pollset_set_add_fd(exec_ctx, pollset_set->pollset_sets[i], fd); + } + gpr_mu_unlock(&pollset_set->mu); +} + +static void pollset_set_del_fd(grpc_exec_ctx *exec_ctx, + grpc_pollset_set *pollset_set, grpc_fd *fd) { + size_t i; + gpr_mu_lock(&pollset_set->mu); + for (i = 0; i < pollset_set->fd_count; i++) { + if (pollset_set->fds[i] == fd) { + pollset_set->fd_count--; + GPR_SWAP(grpc_fd *, pollset_set->fds[i], + pollset_set->fds[pollset_set->fd_count]); + GRPC_FD_UNREF(fd, "pollset_set"); + break; + } + } + for (i = 0; i < pollset_set->pollset_set_count; i++) { + pollset_set_del_fd(exec_ctx, pollset_set->pollset_sets[i], fd); + } + gpr_mu_unlock(&pollset_set->mu); +} + +/******************************************************************************* + * event engine binding + */ + +static void shutdown_engine(void) { pollset_global_shutdown(); } + +static const grpc_event_engine_vtable vtable = { + .pollset_size = sizeof(grpc_pollset), + + .fd_create = fd_create, + .fd_wrapped_fd = fd_wrapped_fd, + .fd_orphan = fd_orphan, + .fd_shutdown = fd_shutdown, + .fd_notify_on_read = fd_notify_on_read, + .fd_notify_on_write = fd_notify_on_write, + + .pollset_init = pollset_init, + .pollset_shutdown = pollset_shutdown, + .pollset_reset = pollset_reset, + .pollset_destroy = pollset_destroy, + .pollset_work = pollset_work, + .pollset_kick = pollset_kick, + .pollset_add_fd = pollset_add_fd, + + .pollset_set_create = pollset_set_create, + .pollset_set_destroy = pollset_set_destroy, + .pollset_set_add_pollset = pollset_set_add_pollset, + .pollset_set_del_pollset = pollset_set_del_pollset, + .pollset_set_add_pollset_set = pollset_set_add_pollset_set, + .pollset_set_del_pollset_set = pollset_set_del_pollset_set, + .pollset_set_add_fd = pollset_set_add_fd, + .pollset_set_del_fd = pollset_set_del_fd, + + .kick_poller = kick_poller, + + .shutdown_engine = shutdown_engine, +}; + +const grpc_event_engine_vtable *grpc_init_poll_posix(void) { + pollset_global_init(); + return &vtable; +} + +#endif diff --git a/src/core/lib/iomgr/ev_poll_posix.h b/src/core/lib/iomgr/ev_poll_posix.h new file mode 100644 index 0000000000000000000000000000000000000000..291736a2dbe5f626c3c3efeac48dd78642dff0ac --- /dev/null +++ b/src/core/lib/iomgr/ev_poll_posix.h @@ -0,0 +1,41 @@ +/* + * + * Copyright 2015-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. + * + */ + +#ifndef GRPC_CORE_LIB_IOMGR_EV_POLL_POSIX_H +#define GRPC_CORE_LIB_IOMGR_EV_POLL_POSIX_H + +#include "src/core/lib/iomgr/ev_posix.h" + +const grpc_event_engine_vtable *grpc_init_poll_posix(void); + +#endif /* GRPC_CORE_LIB_IOMGR_EV_POLL_POSIX_H */ diff --git a/src/core/lib/iomgr/ev_posix.c b/src/core/lib/iomgr/ev_posix.c index 7df175135206f54c871ef1652247d78ddaa89a40..a7dfc9552d5ab47b370a842a73fb124f3b29d843 100644 --- a/src/core/lib/iomgr/ev_posix.c +++ b/src/core/lib/iomgr/ev_posix.c @@ -37,23 +37,104 @@ #include "src/core/lib/iomgr/ev_posix.h" +#include <string.h> + +#include <grpc/support/alloc.h> #include <grpc/support/log.h> +#include <grpc/support/string_util.h> +#include <grpc/support/useful.h> #include "src/core/lib/iomgr/ev_poll_and_epoll_posix.h" +#include "src/core/lib/iomgr/ev_poll_posix.h" +#include "src/core/lib/support/env.h" + +/** Default poll() function - a pointer so that it can be overridden by some + * tests */ +grpc_poll_function_type grpc_poll_function = poll; static const grpc_event_engine_vtable *g_event_engine; -grpc_poll_function_type grpc_poll_function = poll; +typedef const grpc_event_engine_vtable *(*event_engine_factory_fn)(void); + +typedef struct { + const char *name; + event_engine_factory_fn factory; +} event_engine_factory; + +static const event_engine_factory g_factories[] = { + {"poll", grpc_init_poll_posix}, {"legacy", grpc_init_poll_and_epoll_posix}, +}; + +static void add(const char *beg, const char *end, char ***ss, size_t *ns) { + size_t n = *ns; + size_t np = n + 1; + char *s; + size_t len; + GPR_ASSERT(end >= beg); + len = (size_t)(end - beg); + s = gpr_malloc(len + 1); + memcpy(s, beg, len); + s[len] = 0; + *ss = gpr_realloc(*ss, sizeof(char **) * np); + (*ss)[n] = s; + *ns = np; +} + +static void split(const char *s, char ***ss, size_t *ns) { + const char *c = strchr(s, ','); + if (c == NULL) { + add(s, s + strlen(s), ss, ns); + } else { + add(s, c, ss, ns); + split(c + 1, ss, ns); + } +} + +static bool is(const char *want, const char *have) { + return 0 == strcmp(want, "all") || 0 == strcmp(want, have); +} + +static void try_engine(const char *engine) { + for (size_t i = 0; i < GPR_ARRAY_SIZE(g_factories); i++) { + if (is(engine, g_factories[i].name)) { + if ((g_event_engine = g_factories[i].factory())) { + gpr_log(GPR_DEBUG, "Using polling engine: %s", g_factories[i].name); + return; + } + } + } +} void grpc_event_engine_init(void) { - if ((g_event_engine = grpc_init_poll_and_epoll_posix())) { - return; + char *s = gpr_getenv("GRPC_POLL_STRATEGY"); + if (s == NULL) { + s = gpr_strdup("all"); + } + + char **strings = NULL; + size_t nstrings = 0; + split(s, &strings, &nstrings); + + for (size_t i = 0; g_event_engine == NULL && i < nstrings; i++) { + try_engine(strings[i]); + } + + for (size_t i = 0; i < nstrings; i++) { + gpr_free(strings[i]); + } + gpr_free(strings); + gpr_free(s); + + if (g_event_engine == NULL) { + gpr_log(GPR_ERROR, "No event engine could be initialized"); + abort(); } - gpr_log(GPR_ERROR, "No event engine could be initialized"); - abort(); } -void grpc_event_engine_shutdown(void) { g_event_engine->shutdown_engine(); } +void grpc_event_engine_shutdown(void) { + g_event_engine->shutdown_engine(); + g_event_engine = NULL; +} grpc_fd *grpc_fd_create(int fd, const char *name) { return g_event_engine->fd_create(fd, name); diff --git a/src/core/lib/iomgr/exec_ctx.c b/src/core/lib/iomgr/exec_ctx.c index 2146c7dd1f71f2b74bd884abe5054e4deb5f7fb5..e4514790732ca2b076151c274238bce38e4efc59 100644 --- a/src/core/lib/iomgr/exec_ctx.c +++ b/src/core/lib/iomgr/exec_ctx.c @@ -39,6 +39,22 @@ #include "src/core/lib/profiling/timers.h" +bool grpc_exec_ctx_ready_to_finish(grpc_exec_ctx *exec_ctx) { + if (!exec_ctx->cached_ready_to_finish) { + exec_ctx->cached_ready_to_finish = exec_ctx->check_ready_to_finish( + exec_ctx, exec_ctx->check_ready_to_finish_arg); + } + return exec_ctx->cached_ready_to_finish; +} + +bool grpc_never_ready_to_finish(grpc_exec_ctx *exec_ctx, void *arg_ignored) { + return false; +} + +bool grpc_always_ready_to_finish(grpc_exec_ctx *exec_ctx, void *arg_ignored) { + return true; +} + #ifndef GRPC_EXECUTION_CONTEXT_SANITIZER bool grpc_exec_ctx_flush(grpc_exec_ctx *exec_ctx) { bool did_something = 0; @@ -61,6 +77,7 @@ bool grpc_exec_ctx_flush(grpc_exec_ctx *exec_ctx) { } void grpc_exec_ctx_finish(grpc_exec_ctx *exec_ctx) { + exec_ctx->cached_ready_to_finish = true; grpc_exec_ctx_flush(exec_ctx); } diff --git a/src/core/lib/iomgr/exec_ctx.h b/src/core/lib/iomgr/exec_ctx.h index 976cc4034758284be8924b7b42e1d7b632ed595c..9d47a262f8c1e1ea0e3f2a4f5fe24c581aaff05c 100644 --- a/src/core/lib/iomgr/exec_ctx.h +++ b/src/core/lib/iomgr/exec_ctx.h @@ -53,6 +53,9 @@ typedef struct grpc_workqueue grpc_workqueue; * - track a list of work that needs to be delayed until the top of the * call stack (this provides a convenient mechanism to run callbacks * without worrying about locking issues) + * - provide a decision maker (via grpc_exec_ctx_ready_to_finish) that provides + * signal as to whether a borrowed thread should continue to do work or + * should actively try to finish up and get this thread back to its owner * * CONVENTIONS: * Instance of this must ALWAYS be constructed on the stack, never @@ -63,18 +66,26 @@ typedef struct grpc_workqueue grpc_workqueue; */ struct grpc_exec_ctx { grpc_closure_list closure_list; + bool cached_ready_to_finish; + void *check_ready_to_finish_arg; + bool (*check_ready_to_finish)(grpc_exec_ctx *exec_ctx, void *arg); }; -#define GRPC_EXEC_CTX_INIT \ - { GRPC_CLOSURE_LIST_INIT } +#define GRPC_EXEC_CTX_INIT_WITH_FINISH_CHECK(finish_check, finish_check_arg) \ + { GRPC_CLOSURE_LIST_INIT, false, finish_check_arg, finish_check } #else struct grpc_exec_ctx { - int unused; + bool cached_ready_to_finish; + void *check_ready_to_finish_arg; + bool (*check_ready_to_finish)(grpc_exec_ctx *exec_ctx, void *arg); }; -#define GRPC_EXEC_CTX_INIT \ - { 0 } +#define GRPC_EXEC_CTX_INIT_WITH_FINISH_CHECK(finish_check, finish_check_arg) \ + { false, finish_check_arg, finish_check } #endif +#define GRPC_EXEC_CTX_INIT \ + GRPC_EXEC_CTX_INIT_WITH_FINISH_CHECK(grpc_never_ready_to_finish, NULL) + /** Flush any work that has been enqueued onto this grpc_exec_ctx. * Caller must guarantee that no interfering locks are held. * Returns true if work was performed, false otherwise. */ @@ -86,6 +97,14 @@ void grpc_exec_ctx_finish(grpc_exec_ctx *exec_ctx); void grpc_exec_ctx_enqueue(grpc_exec_ctx *exec_ctx, grpc_closure *closure, bool success, grpc_workqueue *offload_target_or_null); +/** Returns true if we'd like to leave this execution context as soon as + possible: useful for deciding whether to do something more or not depending + on outside context */ +bool grpc_exec_ctx_ready_to_finish(grpc_exec_ctx *exec_ctx); +/** A finish check that is never ready to finish */ +bool grpc_never_ready_to_finish(grpc_exec_ctx *exec_ctx, void *arg_ignored); +/** A finish check that is always ready to finish */ +bool grpc_always_ready_to_finish(grpc_exec_ctx *exec_ctx, void *arg_ignored); /** Add a list of closures to be executed at the next flush/finish point. * Leaves \a list empty. */ void grpc_exec_ctx_enqueue_list(grpc_exec_ctx *exec_ctx, diff --git a/src/core/lib/iomgr/iomgr_posix.c b/src/core/lib/iomgr/iomgr_posix.c index 016c501f754fe4b9b23d4a39084ab14517e51148..cede97f4c6004d398fbeb7ac6d45a254dea2cc65 100644 --- a/src/core/lib/iomgr/iomgr_posix.c +++ b/src/core/lib/iomgr/iomgr_posix.c @@ -41,12 +41,16 @@ #include "src/core/lib/iomgr/tcp_posix.h" void grpc_iomgr_platform_init(void) { + grpc_wakeup_fd_global_init(); grpc_event_engine_init(); grpc_register_tracer("tcp", &grpc_tcp_trace); } void grpc_iomgr_platform_flush(void) {} -void grpc_iomgr_platform_shutdown(void) { grpc_event_engine_shutdown(); } +void grpc_iomgr_platform_shutdown(void) { + grpc_event_engine_shutdown(); + grpc_wakeup_fd_global_destroy(); +} #endif /* GRPC_POSIX_SOCKET */ diff --git a/src/core/lib/iomgr/tcp_posix.c b/src/core/lib/iomgr/tcp_posix.c index 7210aef5d5c2ea6b51f901c5e7969aa4e6fb3c51..e2869224f1f0ff3fc75daa54abccf9dd2cdbb4f7 100644 --- a/src/core/lib/iomgr/tcp_posix.c +++ b/src/core/lib/iomgr/tcp_posix.c @@ -164,7 +164,7 @@ static void call_read_cb(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp, int success) { for (i = 0; i < tcp->incoming_buffer->count; i++) { char *dump = gpr_dump_slice(tcp->incoming_buffer->slices[i], GPR_DUMP_HEX | GPR_DUMP_ASCII); - gpr_log(GPR_DEBUG, "READ %p: %s", tcp, dump); + gpr_log(GPR_DEBUG, "READ %p (peer=%s): %s", tcp, tcp->peer_string, dump); gpr_free(dump); } } @@ -398,7 +398,7 @@ static void tcp_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, for (i = 0; i < buf->count; i++) { char *data = gpr_dump_slice(buf->slices[i], GPR_DUMP_HEX | GPR_DUMP_ASCII); - gpr_log(GPR_DEBUG, "WRITE %p: %s", tcp, data); + gpr_log(GPR_DEBUG, "WRITE %p (peer=%s): %s", tcp, tcp->peer_string, data); gpr_free(data); } } diff --git a/src/core/lib/iomgr/udp_server.c b/src/core/lib/iomgr/udp_server.c index df6cf956d90a5a0bc9edb9ecd001b49e03a4bfda..98ffccd59b7fddad1e15d4ff3a70cdb5e271bb94 100644 --- a/src/core/lib/iomgr/udp_server.c +++ b/src/core/lib/iomgr/udp_server.c @@ -81,6 +81,7 @@ typedef struct { grpc_closure read_closure; grpc_closure destroyed_closure; grpc_udp_server_read_cb read_cb; + grpc_udp_server_orphan_cb orphan_cb; } server_port; /* the overall server */ @@ -168,6 +169,10 @@ static void deactivated_all_ports(grpc_exec_ctx *exec_ctx, grpc_udp_server *s) { server_port *sp = &s->ports[i]; sp->destroyed_closure.cb = destroyed_port; sp->destroyed_closure.cb_arg = s; + + GPR_ASSERT(sp->orphan_cb); + sp->orphan_cb(sp->emfd); + grpc_fd_orphan(exec_ctx, sp->emfd, &sp->destroyed_closure, NULL, "udp_listener_shutdown"); } @@ -268,7 +273,8 @@ static void on_read(grpc_exec_ctx *exec_ctx, void *arg, bool success) { static int add_socket_to_server(grpc_udp_server *s, int fd, const struct sockaddr *addr, size_t addr_len, - grpc_udp_server_read_cb read_cb) { + grpc_udp_server_read_cb read_cb, + grpc_udp_server_orphan_cb orphan_cb) { server_port *sp; int port; char *addr_str; @@ -292,6 +298,7 @@ static int add_socket_to_server(grpc_udp_server *s, int fd, memcpy(sp->addr.untyped, addr, addr_len); sp->addr_len = addr_len; sp->read_cb = read_cb; + sp->orphan_cb = orphan_cb; GPR_ASSERT(sp->emfd); gpr_mu_unlock(&s->mu); gpr_free(name); @@ -301,7 +308,8 @@ static int add_socket_to_server(grpc_udp_server *s, int fd, } int grpc_udp_server_add_port(grpc_udp_server *s, const void *addr, - size_t addr_len, grpc_udp_server_read_cb read_cb) { + size_t addr_len, grpc_udp_server_read_cb read_cb, + grpc_udp_server_orphan_cb orphan_cb) { int allocated_port1 = -1; int allocated_port2 = -1; unsigned i; @@ -348,7 +356,8 @@ int grpc_udp_server_add_port(grpc_udp_server *s, const void *addr, addr = (struct sockaddr *)&wild6; addr_len = sizeof(wild6); fd = grpc_create_dualstack_socket(addr, SOCK_DGRAM, IPPROTO_UDP, &dsmode); - allocated_port1 = add_socket_to_server(s, fd, addr, addr_len, read_cb); + allocated_port1 = + add_socket_to_server(s, fd, addr, addr_len, read_cb, orphan_cb); if (fd >= 0 && dsmode == GRPC_DSMODE_DUALSTACK) { goto done; } @@ -370,7 +379,8 @@ int grpc_udp_server_add_port(grpc_udp_server *s, const void *addr, addr = (struct sockaddr *)&addr4_copy; addr_len = sizeof(addr4_copy); } - allocated_port2 = add_socket_to_server(s, fd, addr, addr_len, read_cb); + allocated_port2 = + add_socket_to_server(s, fd, addr, addr_len, read_cb, orphan_cb); done: gpr_free(allocated_addr); diff --git a/src/core/lib/iomgr/udp_server.h b/src/core/lib/iomgr/udp_server.h index d8cf957a22ac1cbae3f4b4477477db112b50338f..33c5ce11cda556a75222fdd16b2be29b384c7920 100644 --- a/src/core/lib/iomgr/udp_server.h +++ b/src/core/lib/iomgr/udp_server.h @@ -48,6 +48,9 @@ typedef struct grpc_udp_server grpc_udp_server; typedef void (*grpc_udp_server_read_cb)(grpc_exec_ctx *exec_ctx, grpc_fd *emfd, struct grpc_server *server); +/* Called when the grpc_fd is about to be orphaned (and the FD closed). */ +typedef void (*grpc_udp_server_orphan_cb)(grpc_fd *emfd); + /* Create a server, initially not bound to any ports */ grpc_udp_server *grpc_udp_server_create(void); @@ -69,7 +72,8 @@ int grpc_udp_server_get_fd(grpc_udp_server *s, unsigned index); /* TODO(ctiller): deprecate this, and make grpc_udp_server_add_ports to handle all of the multiple socket port matching logic in one place */ int grpc_udp_server_add_port(grpc_udp_server *s, const void *addr, - size_t addr_len, grpc_udp_server_read_cb read_cb); + size_t addr_len, grpc_udp_server_read_cb read_cb, + grpc_udp_server_orphan_cb orphan_cb); void grpc_udp_server_destroy(grpc_exec_ctx *exec_ctx, grpc_udp_server *server, grpc_closure *on_done); diff --git a/src/core/lib/support/string_util_win32.c b/src/core/lib/support/string_util_win32.c index f3cb0c050f91dab88d6be0b8049b7555ca812ac0..0d7bcdb5aacc9f34c08754090ae7657e1dc95d7f 100644 --- a/src/core/lib/support/string_util_win32.c +++ b/src/core/lib/support/string_util_win32.c @@ -83,7 +83,7 @@ char *gpr_format_message(int messageid) { DWORD status = FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, (DWORD)messageid, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + NULL, (DWORD)messageid, MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT), (LPTSTR)(&tmessage), 0, NULL); if (status == 0) return gpr_strdup("Unable to retrieve error string"); message = gpr_tchar_to_char(tmessage); diff --git a/src/core/lib/surface/byte_buffer_reader.c b/src/core/lib/surface/byte_buffer_reader.c index 809fd5f1fa672e6b0e11e7860f11ab49ef2a8e9b..c97079f6385bfbb96375bf4d6950ec6cecdd3b0c 100644 --- a/src/core/lib/surface/byte_buffer_reader.c +++ b/src/core/lib/surface/byte_buffer_reader.c @@ -62,12 +62,19 @@ void grpc_byte_buffer_reader_init(grpc_byte_buffer_reader *reader, case GRPC_BB_RAW: gpr_slice_buffer_init(&decompressed_slices_buffer); if (is_compressed(reader->buffer_in)) { - grpc_msg_decompress(reader->buffer_in->data.raw.compression, - &reader->buffer_in->data.raw.slice_buffer, - &decompressed_slices_buffer); - reader->buffer_out = - grpc_raw_byte_buffer_create(decompressed_slices_buffer.slices, - decompressed_slices_buffer.count); + if (grpc_msg_decompress(reader->buffer_in->data.raw.compression, + &reader->buffer_in->data.raw.slice_buffer, + &decompressed_slices_buffer) == 0) { + gpr_log(GPR_ERROR, + "Unexpected error decompressing data for algorithm with enum " + "value '%d'. Reading data as if it were uncompressed.", + reader->buffer_in->data.raw.compression); + reader->buffer_out = reader->buffer_in; + } else { /* all fine */ + reader->buffer_out = + grpc_raw_byte_buffer_create(decompressed_slices_buffer.slices, + decompressed_slices_buffer.count); + } gpr_slice_buffer_destroy(&decompressed_slices_buffer); } else { /* not compressed, use the input buffer as output */ reader->buffer_out = reader->buffer_in; diff --git a/src/core/lib/surface/call.c b/src/core/lib/surface/call.c index e5ebc654f9b7f4fc8674e1060c62df40c7518981..370360b8f60494406679d7a5437e94da5abdea80 100644 --- a/src/core/lib/surface/call.c +++ b/src/core/lib/surface/call.c @@ -261,6 +261,8 @@ grpc_call *grpc_call_create(grpc_channel *channel, grpc_call *parent_call, call->channel = channel; call->cq = cq; call->parent = parent_call; + /* Always support no compression */ + GPR_BITSET(&call->encodings_accepted_by_peer, GRPC_COMPRESS_NONE); call->is_client = server_transport_data == NULL; if (call->is_client) { GPR_ASSERT(add_initial_metadata_count < MAX_SEND_EXTRA_METADATA_COUNT); @@ -408,6 +410,7 @@ static void set_status_code(grpc_call *call, status_source source, static void set_compression_algorithm(grpc_call *call, grpc_compression_algorithm algo) { + GPR_ASSERT(algo < GRPC_COMPRESS_ALGORITHMS_COUNT); call->compression_algorithm = algo; } @@ -828,12 +831,16 @@ static uint32_t decode_status(grpc_mdelem *md) { return status; } -static uint32_t decode_compression(grpc_mdelem *md) { +static grpc_compression_algorithm decode_compression(grpc_mdelem *md) { grpc_compression_algorithm algorithm = grpc_compression_algorithm_from_mdstr(md->value); if (algorithm == GRPC_COMPRESS_ALGORITHMS_COUNT) { const char *md_c_str = grpc_mdstr_as_c_string(md->value); - gpr_log(GPR_ERROR, "Invalid compression algorithm: '%s'", md_c_str); + gpr_log(GPR_ERROR, + "Invalid incoming compression algorithm: '%s'. Interpreting " + "incoming data as uncompressed.", + md_c_str); + return GRPC_COMPRESS_NONE; } return algorithm; } @@ -1087,6 +1094,24 @@ static void receiving_initial_metadata_ready(grpc_exec_ctx *exec_ctx, &call->metadata_batch[1 /* is_receiving */][0 /* is_trailing */]; grpc_metadata_batch_filter(md, recv_initial_filter, call); + /* make sure the received grpc-encoding is amongst the ones listed in + * grpc-accept-encoding */ + + GPR_ASSERT(call->encodings_accepted_by_peer != 0); + if (!GPR_BITGET(call->encodings_accepted_by_peer, + call->compression_algorithm)) { + extern int grpc_compression_trace; + if (grpc_compression_trace) { + char *algo_name; + grpc_compression_algorithm_name(call->compression_algorithm, + &algo_name); + gpr_log(GPR_ERROR, + "Compression algorithm (grpc-encoding = '%s') not present in " + "the bitset of accepted encodings (grpc-accept-encodings: " + "'0x%x')", + algo_name, call->encodings_accepted_by_peer); + } + } if (gpr_time_cmp(md->deadline, gpr_inf_future(md->deadline.clock_type)) != 0 && !call->is_client) { @@ -1474,7 +1499,8 @@ grpc_call_error grpc_call_start_batch(grpc_call *call, const grpc_op *ops, grpc_call_error err; GRPC_API_TRACE( - "grpc_call_start_batch(call=%p, ops=%p, nops=%lu, tag=%p, reserved=%p)", + "grpc_call_start_batch(call=%p, ops=%p, nops=%lu, tag=%p, " + "reserved=%p)", 5, (call, ops, (unsigned long)nops, tag, reserved)); if (reserved != NULL) { diff --git a/src/core/lib/surface/init.c b/src/core/lib/surface/init.c index 57c6897626a909e9c2fc09400fe978b276d7715f..1c8b7090156847075c9053e33d208c8be11fefb2 100644 --- a/src/core/lib/surface/init.c +++ b/src/core/lib/surface/init.c @@ -164,7 +164,7 @@ void grpc_init(void) { grpc_register_tracer("channel_stack_builder", &grpc_trace_channel_stack_builder); grpc_register_tracer("http1", &grpc_http1_trace); - grpc_register_tracer("compression", &grpc_compress_filter_trace); + grpc_register_tracer("compression", &grpc_compression_trace); grpc_security_pre_init(); grpc_iomgr_init(); grpc_executor_init(); diff --git a/src/core/lib/surface/version.c b/src/core/lib/surface/version.c index fe954cbefb6196249367adbb725392a6be4387a2..aca76d2bb79a0516bafa3c2c9645d912a9f7b322 100644 --- a/src/core/lib/surface/version.c +++ b/src/core/lib/surface/version.c @@ -36,4 +36,4 @@ #include <grpc/grpc.h> -const char *grpc_version_string(void) { return "0.14.0-dev"; } +const char *grpc_version_string(void) { return "0.15.0-dev"; } diff --git a/src/core/lib/transport/metadata.h b/src/core/lib/transport/metadata.h index 713d9e6782ca293122bb216d35e3e5143ec5c14c..6d82f4d68194ec8ddbb1d71687d972781312acf3 100644 --- a/src/core/lib/transport/metadata.h +++ b/src/core/lib/transport/metadata.h @@ -147,6 +147,10 @@ const char *grpc_mdstr_as_c_string(grpc_mdstr *s); #define GRPC_MDSTR_LENGTH(s) (GPR_SLICE_LENGTH(s->slice)) +/* We add 32 bytes of padding as per RFC-7540 section 6.5.2. */ +#define GRPC_MDELEM_LENGTH(e) \ + (GRPC_MDSTR_LENGTH((e)->key) + GRPC_MDSTR_LENGTH((e)->value) + 32) + int grpc_mdstr_is_legal_header(grpc_mdstr *s); int grpc_mdstr_is_legal_nonbin_header(grpc_mdstr *s); int grpc_mdstr_is_bin_suffixed(grpc_mdstr *s); diff --git a/src/core/lib/transport/metadata_batch.c b/src/core/lib/transport/metadata_batch.c index 4567221a48f62093efb6e2702d9e3a0540d18346..e4398abeb7801ef215d229b517c2a162817db82a 100644 --- a/src/core/lib/transport/metadata_batch.c +++ b/src/core/lib/transport/metadata_batch.c @@ -192,3 +192,12 @@ int grpc_metadata_batch_is_empty(grpc_metadata_batch *batch) { gpr_time_cmp(gpr_inf_future(batch->deadline.clock_type), batch->deadline) == 0; } + +size_t grpc_metadata_batch_size(grpc_metadata_batch *batch) { + size_t size = 0; + for (grpc_linked_mdelem *elem = batch->list.head; elem != NULL; + elem = elem->next) { + size += GRPC_MDELEM_LENGTH(elem->md); + } + return size; +} diff --git a/src/core/lib/transport/metadata_batch.h b/src/core/lib/transport/metadata_batch.h index b62668876e4469b614b9e7fa315f0d3d9c6456af..7af823f7ca4701d494141cdf871ed8b7be6209bc 100644 --- a/src/core/lib/transport/metadata_batch.h +++ b/src/core/lib/transport/metadata_batch.h @@ -66,6 +66,9 @@ void grpc_metadata_batch_destroy(grpc_metadata_batch *batch); void grpc_metadata_batch_clear(grpc_metadata_batch *batch); int grpc_metadata_batch_is_empty(grpc_metadata_batch *batch); +/* Returns the transport size of the batch. */ +size_t grpc_metadata_batch_size(grpc_metadata_batch *batch); + /** Moves the metadata information from \a src to \a dst. Upon return, \a src is * zeroed. */ void grpc_metadata_batch_move(grpc_metadata_batch *dst, diff --git a/src/cpp/common/channel_arguments.cc b/src/cpp/common/channel_arguments.cc index db3558f192aed1457b4c187932812879f0404a3c..f297ae85870154966c7e4e429b10d5b21198abb7 100644 --- a/src/cpp/common/channel_arguments.cc +++ b/src/cpp/common/channel_arguments.cc @@ -85,7 +85,7 @@ void ChannelArguments::Swap(ChannelArguments& other) { void ChannelArguments::SetCompressionAlgorithm( grpc_compression_algorithm algorithm) { - SetInt(GRPC_COMPRESSION_ALGORITHM_ARG, algorithm); + SetInt(GRPC_COMPRESSION_CHANNEL_DEFAULT_ALGORITHM, algorithm); } // Note: a second call to this will add in front the result of the first call. diff --git a/src/cpp/common/core_codegen.cc b/src/cpp/common/core_codegen.cc index 33a8f755e69850f7ef458c6ae2dcfae155b0502a..8e8d42eb294eaed8e575171d7abd9bf43913e1fb 100644 --- a/src/cpp/common/core_codegen.cc +++ b/src/cpp/common/core_codegen.cc @@ -48,124 +48,6 @@ #include "src/core/lib/profiling/timers.h" -namespace { - -const int kGrpcBufferWriterMaxBufferLength = 8192; - -class GrpcBufferWriter GRPC_FINAL - : public ::grpc::protobuf::io::ZeroCopyOutputStream { - public: - explicit GrpcBufferWriter(grpc_byte_buffer** bp, int block_size) - : block_size_(block_size), byte_count_(0), have_backup_(false) { - *bp = grpc_raw_byte_buffer_create(NULL, 0); - slice_buffer_ = &(*bp)->data.raw.slice_buffer; - } - - ~GrpcBufferWriter() GRPC_OVERRIDE { - if (have_backup_) { - gpr_slice_unref(backup_slice_); - } - } - - bool Next(void** data, int* size) GRPC_OVERRIDE { - if (have_backup_) { - slice_ = backup_slice_; - have_backup_ = false; - } else { - slice_ = gpr_slice_malloc(block_size_); - } - *data = GPR_SLICE_START_PTR(slice_); - // On win x64, int is only 32bit - GPR_ASSERT(GPR_SLICE_LENGTH(slice_) <= INT_MAX); - byte_count_ += * size = (int)GPR_SLICE_LENGTH(slice_); - gpr_slice_buffer_add(slice_buffer_, slice_); - return true; - } - - void BackUp(int count) GRPC_OVERRIDE { - gpr_slice_buffer_pop(slice_buffer_); - if (count == block_size_) { - backup_slice_ = slice_; - } else { - backup_slice_ = - gpr_slice_split_tail(&slice_, GPR_SLICE_LENGTH(slice_) - count); - gpr_slice_buffer_add(slice_buffer_, slice_); - } - have_backup_ = true; - byte_count_ -= count; - } - - grpc::protobuf::int64 ByteCount() const GRPC_OVERRIDE { return byte_count_; } - - private: - const int block_size_; - int64_t byte_count_; - gpr_slice_buffer* slice_buffer_; - bool have_backup_; - gpr_slice backup_slice_; - gpr_slice slice_; -}; - -class GrpcBufferReader GRPC_FINAL - : public ::grpc::protobuf::io::ZeroCopyInputStream { - public: - explicit GrpcBufferReader(grpc_byte_buffer* buffer) - : byte_count_(0), backup_count_(0) { - grpc_byte_buffer_reader_init(&reader_, buffer); - } - ~GrpcBufferReader() GRPC_OVERRIDE { - grpc_byte_buffer_reader_destroy(&reader_); - } - - bool Next(const void** data, int* size) GRPC_OVERRIDE { - if (backup_count_ > 0) { - *data = GPR_SLICE_START_PTR(slice_) + GPR_SLICE_LENGTH(slice_) - - backup_count_; - GPR_ASSERT(backup_count_ <= INT_MAX); - *size = (int)backup_count_; - backup_count_ = 0; - return true; - } - if (!grpc_byte_buffer_reader_next(&reader_, &slice_)) { - return false; - } - gpr_slice_unref(slice_); - *data = GPR_SLICE_START_PTR(slice_); - // On win x64, int is only 32bit - GPR_ASSERT(GPR_SLICE_LENGTH(slice_) <= INT_MAX); - byte_count_ += * size = (int)GPR_SLICE_LENGTH(slice_); - return true; - } - - void BackUp(int count) GRPC_OVERRIDE { backup_count_ = count; } - - bool Skip(int count) GRPC_OVERRIDE { - const void* data; - int size; - while (Next(&data, &size)) { - if (size >= count) { - BackUp(size - count); - return true; - } - // size < count; - count -= size; - } - // error or we have too large count; - return false; - } - - grpc::protobuf::int64 ByteCount() const GRPC_OVERRIDE { - return byte_count_ - backup_count_; - } - - private: - int64_t byte_count_; - int64_t backup_count_; - grpc_byte_buffer_reader reader_; - gpr_slice slice_; -}; -} // namespace - namespace grpc { grpc_completion_queue* CoreCodegen::grpc_completion_queue_create( @@ -192,6 +74,44 @@ void CoreCodegen::grpc_byte_buffer_destroy(grpc_byte_buffer* bb) { ::grpc_byte_buffer_destroy(bb); } +void CoreCodegen::grpc_byte_buffer_reader_init(grpc_byte_buffer_reader* reader, + grpc_byte_buffer* buffer) { + ::grpc_byte_buffer_reader_init(reader, buffer); +} + +void CoreCodegen::grpc_byte_buffer_reader_destroy( + grpc_byte_buffer_reader* reader) { + ::grpc_byte_buffer_reader_destroy(reader); +} + +int CoreCodegen::grpc_byte_buffer_reader_next(grpc_byte_buffer_reader* reader, + gpr_slice* slice) { + return ::grpc_byte_buffer_reader_next(reader, slice); +} + +grpc_byte_buffer* CoreCodegen::grpc_raw_byte_buffer_create(gpr_slice* slice, + size_t nslices) { + return ::grpc_raw_byte_buffer_create(slice, nslices); +} + +gpr_slice CoreCodegen::gpr_slice_malloc(size_t length) { + return ::gpr_slice_malloc(length); +} + +void CoreCodegen::gpr_slice_unref(gpr_slice slice) { ::gpr_slice_unref(slice); } + +gpr_slice CoreCodegen::gpr_slice_split_tail(gpr_slice* s, size_t split) { + return ::gpr_slice_split_tail(s, split); +} + +void CoreCodegen::gpr_slice_buffer_add(gpr_slice_buffer* sb, gpr_slice slice) { + ::gpr_slice_buffer_add(sb, slice); +} + +void CoreCodegen::gpr_slice_buffer_pop(gpr_slice_buffer* sb) { + ::gpr_slice_buffer_pop(sb); +} + void CoreCodegen::grpc_metadata_array_init(grpc_metadata_array* array) { ::grpc_metadata_array_init(array); } @@ -200,6 +120,10 @@ void CoreCodegen::grpc_metadata_array_destroy(grpc_metadata_array* array) { ::grpc_metadata_array_destroy(array); } +const Status& CoreCodegen::ok() { return grpc::Status::OK; } + +const Status& CoreCodegen::cancelled() { return grpc::Status::CANCELLED; } + gpr_timespec CoreCodegen::gpr_inf_future(gpr_clock_type type) { return ::gpr_inf_future(type); } @@ -209,48 +133,4 @@ void CoreCodegen::assert_fail(const char* failed_assertion) { abort(); } -Status CoreCodegen::SerializeProto(const grpc::protobuf::Message& msg, - grpc_byte_buffer** bp) { - GPR_TIMER_SCOPE("SerializeProto", 0); - int byte_size = msg.ByteSize(); - if (byte_size <= kGrpcBufferWriterMaxBufferLength) { - gpr_slice slice = gpr_slice_malloc(byte_size); - GPR_ASSERT(GPR_SLICE_END_PTR(slice) == - msg.SerializeWithCachedSizesToArray(GPR_SLICE_START_PTR(slice))); - *bp = grpc_raw_byte_buffer_create(&slice, 1); - gpr_slice_unref(slice); - return Status::OK; - } else { - GrpcBufferWriter writer(bp, kGrpcBufferWriterMaxBufferLength); - return msg.SerializeToZeroCopyStream(&writer) - ? Status::OK - : Status(StatusCode::INTERNAL, "Failed to serialize message"); - } -} - -Status CoreCodegen::DeserializeProto(grpc_byte_buffer* buffer, - grpc::protobuf::Message* msg, - int max_message_size) { - GPR_TIMER_SCOPE("DeserializeProto", 0); - if (buffer == nullptr) { - return Status(StatusCode::INTERNAL, "No payload"); - } - Status result = Status::OK; - { - GrpcBufferReader reader(buffer); - ::grpc::protobuf::io::CodedInputStream decoder(&reader); - if (max_message_size > 0) { - decoder.SetTotalBytesLimit(max_message_size, max_message_size); - } - if (!msg->ParseFromCodedStream(&decoder)) { - result = Status(StatusCode::INTERNAL, msg->InitializationErrorString()); - } - if (!decoder.ConsumedEntireMessage()) { - result = Status(StatusCode::INTERNAL, "Did not read entire message"); - } - } - grpc_byte_buffer_destroy(buffer); - return result; -} - } // namespace grpc diff --git a/src/cpp/common/core_codegen.h b/src/cpp/common/core_codegen.h index e15cb4c34aa2fae40a69e0f7b43b6c38c76c950e..656b11e7e72f6b6004e2f7045e7083f60bf3e1ed 100644 --- a/src/cpp/common/core_codegen.h +++ b/src/cpp/common/core_codegen.h @@ -42,13 +42,6 @@ namespace grpc { /// Implementation of the core codegen interface. class CoreCodegen : public CoreCodegenInterface { private: - Status SerializeProto(const grpc::protobuf::Message& msg, - grpc_byte_buffer** bp) override; - - Status DeserializeProto(grpc_byte_buffer* buffer, - grpc::protobuf::Message* msg, - int max_message_size) override; - grpc_completion_queue* grpc_completion_queue_create(void* reserved) override; void grpc_completion_queue_destroy(grpc_completion_queue* cq) override; grpc_event grpc_completion_queue_pluck(grpc_completion_queue* cq, void* tag, @@ -60,11 +53,30 @@ class CoreCodegen : public CoreCodegenInterface { void grpc_byte_buffer_destroy(grpc_byte_buffer* bb) override; + void grpc_byte_buffer_reader_init(grpc_byte_buffer_reader* reader, + grpc_byte_buffer* buffer) override; + void grpc_byte_buffer_reader_destroy( + grpc_byte_buffer_reader* reader) override; + int grpc_byte_buffer_reader_next(grpc_byte_buffer_reader* reader, + gpr_slice* slice) override; + + grpc_byte_buffer* grpc_raw_byte_buffer_create(gpr_slice* slice, + size_t nslices) override; + + gpr_slice gpr_slice_malloc(size_t length) override; + void gpr_slice_unref(gpr_slice slice) override; + gpr_slice gpr_slice_split_tail(gpr_slice* s, size_t split) override; + void gpr_slice_buffer_add(gpr_slice_buffer* sb, gpr_slice slice) override; + void gpr_slice_buffer_pop(gpr_slice_buffer* sb) override; + void grpc_metadata_array_init(grpc_metadata_array* array) override; void grpc_metadata_array_destroy(grpc_metadata_array* array) override; gpr_timespec gpr_inf_future(gpr_clock_type type) override; + virtual const Status& ok() override; + virtual const Status& cancelled() override; + void assert_fail(const char* failed_assertion) override; }; diff --git a/src/cpp/server/server.cc b/src/cpp/server/server.cc index fafe31e84c111c250408baed612504cd5836b4ed..f955a314944c6a761d3b893b4e07d8e1fb937883 100644 --- a/src/cpp/server/server.cc +++ b/src/cpp/server/server.cc @@ -33,6 +33,7 @@ #include <grpc++/server.h> +#include <sstream> #include <utility> #include <grpc++/completion_queue.h> @@ -41,6 +42,7 @@ #include <grpc++/impl/grpc_library.h> #include <grpc++/impl/method_handler_impl.h> #include <grpc++/impl/rpc_service_method.h> +#include <grpc++/impl/server_initializer.h> #include <grpc++/impl/service_type.h> #include <grpc++/security/server_credentials.h> #include <grpc++/server_context.h> @@ -284,7 +286,8 @@ Server::Server(ThreadPoolInterface* thread_pool, bool thread_pool_owned, has_generic_service_(false), server_(nullptr), thread_pool_(thread_pool), - thread_pool_owned_(thread_pool_owned) { + thread_pool_owned_(thread_pool_owned), + server_initializer_(new ServerInitializer(this)) { g_gli_initializer.summon(); gpr_once_init(&g_once_init_callbacks, InitGlobalCallbacks); global_callbacks_ = g_callbacks; @@ -341,6 +344,7 @@ bool Server::RegisterService(const grpc::string* host, Service* service) { "Can only register an asynchronous service against one server."); service->server_ = this; } + const char* method_name = nullptr; for (auto it = service->methods_.begin(); it != service->methods_.end(); ++it) { if (it->get() == nullptr) { // Handled by generic service if any. @@ -360,6 +364,17 @@ bool Server::RegisterService(const grpc::string* host, Service* service) { } else { sync_methods_->emplace_back(method, tag); } + method_name = method->name(); + } + + // Parse service name. + if (method_name != nullptr) { + std::stringstream ss(method_name); + grpc::string service_name; + if (std::getline(ss, service_name, '/') && + std::getline(ss, service_name, '/')) { + services_.push_back(service_name); + } } return true; } @@ -598,4 +613,6 @@ void Server::RunRpc() { } } +ServerInitializer* Server::initializer() { return server_initializer_.get(); } + } // namespace grpc diff --git a/src/cpp/server/server_builder.cc b/src/cpp/server/server_builder.cc index 68cc38258cf91a376020eb8b95685ab07464e6d3..61f0f6ae2ace14260ba3112e6d2b55f84b0193f0 100644 --- a/src/cpp/server/server_builder.cc +++ b/src/cpp/server/server_builder.cc @@ -41,9 +41,23 @@ namespace grpc { +static std::vector<std::unique_ptr<ServerBuilderPlugin> (*)()>* + g_plugin_factory_list; +static gpr_once once_init_plugin_list = GPR_ONCE_INIT; + +static void do_plugin_list_init(void) { + g_plugin_factory_list = + new std::vector<std::unique_ptr<ServerBuilderPlugin> (*)()>(); +} + ServerBuilder::ServerBuilder() : max_message_size_(-1), generic_service_(nullptr) { grpc_compression_options_init(&compression_options_); + gpr_once_init(&once_init_plugin_list, do_plugin_list_init); + for (auto factory : (*g_plugin_factory_list)) { + std::unique_ptr<ServerBuilderPlugin> plugin = factory(); + plugins_[plugin->name()] = std::move(plugin); + } } std::unique_ptr<ServerCompletionQueue> ServerBuilder::AddCompletionQueue() { @@ -96,14 +110,24 @@ std::unique_ptr<Server> ServerBuilder::BuildAndStart() { ChannelArguments args; for (auto option = options_.begin(); option != options_.end(); ++option) { (*option)->UpdateArguments(&args); + (*option)->UpdatePlugins(&plugins_); + } + if (thread_pool == nullptr) { + for (auto plugin = plugins_.begin(); plugin != plugins_.end(); plugin++) { + if ((*plugin).second->has_sync_methods()) { + thread_pool.reset(CreateDefaultThreadPool()); + break; + } + } } if (max_message_size_ > 0) { args.SetInt(GRPC_ARG_MAX_MESSAGE_LENGTH, max_message_size_); } - args.SetInt(GRPC_COMPRESSION_ALGORITHM_STATE_ARG, + args.SetInt(GRPC_COMPRESSION_CHANNEL_ENABLED_ALGORITHMS_BITSET, compression_options_.enabled_algorithms_bitset); std::unique_ptr<Server> server( new Server(thread_pool.release(), true, max_message_size_, &args)); + ServerInitializer* initializer = server->initializer(); for (auto cq = cqs_.begin(); cq != cqs_.end(); ++cq) { grpc_server_register_completion_queue(server->server_, (*cq)->cq(), nullptr); @@ -114,6 +138,9 @@ std::unique_ptr<Server> ServerBuilder::BuildAndStart() { return nullptr; } } + for (auto plugin = plugins_.begin(); plugin != plugins_.end(); plugin++) { + (*plugin).second->InitServer(initializer); + } if (generic_service_) { server->RegisterAsyncGenericService(generic_service_); } else { @@ -137,7 +164,16 @@ std::unique_ptr<Server> ServerBuilder::BuildAndStart() { if (!server->Start(cqs_data, cqs_.size())) { return nullptr; } + for (auto plugin = plugins_.begin(); plugin != plugins_.end(); plugin++) { + (*plugin).second->Finish(initializer); + } return server; } +void ServerBuilder::InternalAddPluginFactory( + std::unique_ptr<ServerBuilderPlugin> (*CreatePlugin)()) { + gpr_once_init(&once_init_plugin_list, do_plugin_list_init); + (*g_plugin_factory_list).push_back(CreatePlugin); +} + } // namespace grpc diff --git a/src/csharp/Grpc.Core.Tests/ChannelTest.cs b/src/csharp/Grpc.Core.Tests/ChannelTest.cs index 6330f50faed9095a7e6d98869f1fc0ca0bad98bb..850d70ce926edab8477e9e065b00d87f84321b34 100644 --- a/src/csharp/Grpc.Core.Tests/ChannelTest.cs +++ b/src/csharp/Grpc.Core.Tests/ChannelTest.cs @@ -32,6 +32,7 @@ #endregion using System; +using System.Threading.Tasks; using Grpc.Core; using Grpc.Core.Internal; using Grpc.Core.Utils; @@ -89,5 +90,43 @@ namespace Grpc.Core.Tests channel.ShutdownAsync().Wait(); Assert.ThrowsAsync(typeof(InvalidOperationException), async () => await channel.ShutdownAsync()); } + + [Test] + public async Task ShutdownTokenCancelledAfterShutdown() + { + var channel = new Channel("localhost", ChannelCredentials.Insecure); + Assert.IsFalse(channel.ShutdownToken.IsCancellationRequested); + var shutdownTask = channel.ShutdownAsync(); + Assert.IsTrue(channel.ShutdownToken.IsCancellationRequested); + await shutdownTask; + } + + [Test] + public async Task StateIsFatalFailureAfterShutdown() + { + var channel = new Channel("localhost", ChannelCredentials.Insecure); + await channel.ShutdownAsync(); + Assert.AreEqual(ChannelState.FatalFailure, channel.State); + } + + [Test] + public async Task ShutdownFinishesWaitForStateChangedAsync() + { + var channel = new Channel("localhost", ChannelCredentials.Insecure); + var stateChangedTask = channel.WaitForStateChangedAsync(ChannelState.Idle); + var shutdownTask = channel.ShutdownAsync(); + await stateChangedTask; + await shutdownTask; + } + + [Test] + public async Task OperationsThrowAfterShutdown() + { + var channel = new Channel("localhost", ChannelCredentials.Insecure); + await channel.ShutdownAsync(); + Assert.ThrowsAsync(typeof(ObjectDisposedException), async () => await channel.WaitForStateChangedAsync(ChannelState.Idle)); + Assert.Throws(typeof(ObjectDisposedException), () => { var x = channel.ResolvedTarget; }); + Assert.ThrowsAsync(typeof(TaskCanceledException), async () => await channel.ConnectAsync()); + } } } diff --git a/src/csharp/Grpc.Core.Tests/Internal/AsyncCallServerTest.cs b/src/csharp/Grpc.Core.Tests/Internal/AsyncCallServerTest.cs index 058371521d63ff19d7b6b69b2ea0c4bcb1cdcab1..0e204761f61c0513e25a0a4c0a99090cc3266d3d 100644 --- a/src/csharp/Grpc.Core.Tests/Internal/AsyncCallServerTest.cs +++ b/src/csharp/Grpc.Core.Tests/Internal/AsyncCallServerTest.cs @@ -168,7 +168,7 @@ namespace Grpc.Core.Internal.Tests var responseStream = new ServerResponseStream<string, string>(asyncCallServer); var writeTask = responseStream.WriteAsync("request1"); - var writeStatusTask = asyncCallServer.SendStatusFromServerAsync(Status.DefaultSuccess, new Metadata()); + var writeStatusTask = asyncCallServer.SendStatusFromServerAsync(Status.DefaultSuccess, new Metadata(), null); fakeCall.SendCompletionHandler(true); fakeCall.SendStatusFromServerHandler(true); diff --git a/src/csharp/Grpc.Core.Tests/Internal/AsyncCallTest.cs b/src/csharp/Grpc.Core.Tests/Internal/AsyncCallTest.cs index abe9d4a2e628f74ae0ff0ccf985539e76558e4e5..777a1c8c500d9487b221b24142cd6b21a87ec52c 100644 --- a/src/csharp/Grpc.Core.Tests/Internal/AsyncCallTest.cs +++ b/src/csharp/Grpc.Core.Tests/Internal/AsyncCallTest.cs @@ -181,13 +181,14 @@ namespace Grpc.Core.Internal.Tests } [Test] - public void ClientStreaming_WriteFailure() + public void ClientStreaming_WriteCompletionFailure() { var resultTask = asyncCall.ClientStreamingCallAsync(); var requestStream = new ClientRequestStream<string, string>(asyncCall); var writeTask = requestStream.WriteAsync("request1"); fakeCall.SendCompletionHandler(false); + // TODO: maybe IOException or waiting for RPCException is more appropriate here. Assert.ThrowsAsync(typeof(InvalidOperationException), async () => await writeTask); fakeCall.UnaryResponseClientHandler(true, @@ -199,7 +200,7 @@ namespace Grpc.Core.Internal.Tests } [Test] - public void ClientStreaming_WriteAfterReceivingStatusFails() + public void ClientStreaming_WriteAfterReceivingStatusThrowsRpcException() { var resultTask = asyncCall.ClientStreamingCallAsync(); var requestStream = new ClientRequestStream<string, string>(asyncCall); @@ -210,7 +211,44 @@ namespace Grpc.Core.Internal.Tests new Metadata()); AssertUnaryResponseSuccess(asyncCall, fakeCall, resultTask); + var ex = Assert.Throws<RpcException>(() => requestStream.WriteAsync("request1")); + Assert.AreEqual(Status.DefaultSuccess, ex.Status); + } + + [Test] + public void ClientStreaming_WriteAfterReceivingStatusThrowsRpcException2() + { + var resultTask = asyncCall.ClientStreamingCallAsync(); + var requestStream = new ClientRequestStream<string, string>(asyncCall); + + fakeCall.UnaryResponseClientHandler(true, + new ClientSideStatus(new Status(StatusCode.OutOfRange, ""), new Metadata()), + CreateResponsePayload(), + new Metadata()); + + AssertUnaryResponseError(asyncCall, fakeCall, resultTask, StatusCode.OutOfRange); + var ex = Assert.Throws<RpcException>(() => requestStream.WriteAsync("request1")); + Assert.AreEqual(StatusCode.OutOfRange, ex.Status.StatusCode); + } + + [Test] + public void ClientStreaming_WriteAfterCompleteThrowsInvalidOperationException() + { + var resultTask = asyncCall.ClientStreamingCallAsync(); + var requestStream = new ClientRequestStream<string, string>(asyncCall); + + requestStream.CompleteAsync(); + Assert.Throws(typeof(InvalidOperationException), () => requestStream.WriteAsync("request1")); + + fakeCall.SendCompletionHandler(true); + + fakeCall.UnaryResponseClientHandler(true, + new ClientSideStatus(Status.DefaultSuccess, new Metadata()), + CreateResponsePayload(), + new Metadata()); + + AssertUnaryResponseSuccess(asyncCall, fakeCall, resultTask); } [Test] @@ -229,7 +267,7 @@ namespace Grpc.Core.Internal.Tests } [Test] - public void ClientStreaming_WriteAfterCancellationRequestFails() + public void ClientStreaming_WriteAfterCancellationRequestThrowsOperationCancelledException() { var resultTask = asyncCall.ClientStreamingCallAsync(); var requestStream = new ClientRequestStream<string, string>(asyncCall); @@ -340,7 +378,7 @@ namespace Grpc.Core.Internal.Tests } [Test] - public void DuplexStreaming_WriteAfterReceivingStatusFails() + public void DuplexStreaming_WriteAfterReceivingStatusThrowsRpcException() { asyncCall.StartDuplexStreamingCall(); var requestStream = new ClientRequestStream<string, string>(asyncCall); @@ -352,7 +390,8 @@ namespace Grpc.Core.Internal.Tests AssertStreamingResponseSuccess(asyncCall, fakeCall, readTask); - Assert.ThrowsAsync(typeof(InvalidOperationException), async () => await requestStream.WriteAsync("request1")); + var ex = Assert.ThrowsAsync<RpcException>(async () => await requestStream.WriteAsync("request1")); + Assert.AreEqual(Status.DefaultSuccess, ex.Status); } [Test] @@ -372,7 +411,7 @@ namespace Grpc.Core.Internal.Tests } [Test] - public void DuplexStreaming_WriteAfterCancellationRequestFails() + public void DuplexStreaming_WriteAfterCancellationRequestThrowsOperationCancelledException() { asyncCall.StartDuplexStreamingCall(); var requestStream = new ClientRequestStream<string, string>(asyncCall); diff --git a/src/csharp/Grpc.Core.Tests/Internal/FakeNativeCall.cs b/src/csharp/Grpc.Core.Tests/Internal/FakeNativeCall.cs index 1bec258ca291b5b605cc18dc97a1c81ada25efc4..909112a47c5effae1ccf2f729e4f3cb27a130b02 100644 --- a/src/csharp/Grpc.Core.Tests/Internal/FakeNativeCall.cs +++ b/src/csharp/Grpc.Core.Tests/Internal/FakeNativeCall.cs @@ -165,7 +165,8 @@ namespace Grpc.Core.Internal.Tests SendCompletionHandler = callback; } - public void StartSendStatusFromServer(SendCompletionHandler callback, Status status, MetadataArraySafeHandle metadataArray, bool sendEmptyInitialMetadata) + public void StartSendStatusFromServer(SendCompletionHandler callback, Status status, MetadataArraySafeHandle metadataArray, bool sendEmptyInitialMetadata, + byte[] optionalPayload, WriteFlags writeFlags) { SendStatusFromServerHandler = callback; } diff --git a/src/csharp/Grpc.Core/Channel.cs b/src/csharp/Grpc.Core/Channel.cs index 89981b1849bf56baff66639913f7ebff694148a2..93a6e6a3d95fee3456c07b0c1c42f4e9ab29ee27 100644 --- a/src/csharp/Grpc.Core/Channel.cs +++ b/src/csharp/Grpc.Core/Channel.cs @@ -32,6 +32,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading; using System.Threading.Tasks; using Grpc.Core.Internal; @@ -51,6 +52,7 @@ namespace Grpc.Core readonly object myLock = new object(); readonly AtomicCounter activeCallCounter = new AtomicCounter(); + readonly CancellationTokenSource shutdownTokenSource = new CancellationTokenSource(); readonly string target; readonly GrpcEnvironment environment; @@ -101,12 +103,13 @@ namespace Grpc.Core /// <summary> /// Gets current connectivity state of this channel. + /// After channel is has been shutdown, <c>ChannelState.FatalFailure</c> will be returned. /// </summary> public ChannelState State { get { - return handle.CheckConnectivityState(false); + return GetConnectivityState(false); } } @@ -154,6 +157,17 @@ namespace Grpc.Core } } + /// <summary> + /// Returns a token that gets cancelled once <c>ShutdownAsync</c> is invoked. + /// </summary> + public CancellationToken ShutdownToken + { + get + { + return this.shutdownTokenSource.Token; + } + } + /// <summary> /// Allows explicitly requesting channel to connect without starting an RPC. /// Returned task completes once state Ready was seen. If the deadline is reached, @@ -164,7 +178,7 @@ namespace Grpc.Core /// <param name="deadline">The deadline. <c>null</c> indicates no deadline.</param> public async Task ConnectAsync(DateTime? deadline = null) { - var currentState = handle.CheckConnectivityState(true); + var currentState = GetConnectivityState(true); while (currentState != ChannelState.Ready) { if (currentState == ChannelState.FatalFailure) @@ -172,7 +186,7 @@ namespace Grpc.Core throw new OperationCanceledException("Channel has reached FatalFailure state."); } await WaitForStateChangedAsync(currentState, deadline).ConfigureAwait(false); - currentState = handle.CheckConnectivityState(false); + currentState = GetConnectivityState(false); } } @@ -188,6 +202,8 @@ namespace Grpc.Core shutdownRequested = true; } + shutdownTokenSource.Cancel(); + var activeCallCount = activeCallCounter.Count; if (activeCallCount > 0) { @@ -231,6 +247,18 @@ namespace Grpc.Core activeCallCounter.Decrement(); } + private ChannelState GetConnectivityState(bool tryToConnect) + { + try + { + return handle.CheckConnectivityState(tryToConnect); + } + catch (ObjectDisposedException) + { + return ChannelState.FatalFailure; + } + } + private static void EnsureUserAgentChannelOption(Dictionary<string, ChannelOption> options) { var key = ChannelOptions.PrimaryUserAgentString; diff --git a/src/csharp/Grpc.Core/GrpcEnvironment.cs b/src/csharp/Grpc.Core/GrpcEnvironment.cs index a5c78cc9d7e692ff9fb76342dbfd79720e5bf374..bee0ef1d62e08f1f7222fc0e704fce363e151c76 100644 --- a/src/csharp/Grpc.Core/GrpcEnvironment.cs +++ b/src/csharp/Grpc.Core/GrpcEnvironment.cs @@ -45,11 +45,12 @@ namespace Grpc.Core /// </summary> public class GrpcEnvironment { - const int THREAD_POOL_SIZE = 4; + const int MinDefaultThreadPoolSize = 4; static object staticLock = new object(); static GrpcEnvironment instance; static int refCount; + static int? customThreadPoolSize; static ILogger logger = new ConsoleLogger(); @@ -122,6 +123,23 @@ namespace Grpc.Core logger = customLogger; } + /// <summary> + /// Sets the number of threads in the gRPC thread pool that polls for internal RPC events. + /// Can be only invoke before the <c>GrpcEnviroment</c> is started and cannot be changed afterwards. + /// Setting thread pool size is an advanced setting and you should only use it if you know what you are doing. + /// Most users should rely on the default value provided by gRPC library. + /// Note: this method is part of an experimental API that can change or be removed without any prior notice. + /// </summary> + public static void SetThreadPoolSize(int threadCount) + { + lock (staticLock) + { + GrpcPreconditions.CheckState(instance == null, "Can only be set before GrpcEnvironment is initialized"); + GrpcPreconditions.CheckArgument(threadCount > 0, "threadCount needs to be a positive number"); + customThreadPoolSize = threadCount; + } + } + /// <summary> /// Creates gRPC environment. /// </summary> @@ -129,7 +147,7 @@ namespace Grpc.Core { GrpcNativeInit(); completionRegistry = new CompletionRegistry(this); - threadPool = new GrpcThreadPool(this, THREAD_POOL_SIZE); + threadPool = new GrpcThreadPool(this, GetThreadPoolSizeOrDefault()); threadPool.Start(); } @@ -200,5 +218,17 @@ namespace Grpc.Core debugStats.CheckOK(); } + + private int GetThreadPoolSizeOrDefault() + { + if (customThreadPoolSize.HasValue) + { + return customThreadPoolSize.Value; + } + // In systems with many cores, use half of the cores for GrpcThreadPool + // and the other half for .NET thread pool. This heuristic definitely needs + // more work, but seems to work reasonably well for a start. + return Math.Max(MinDefaultThreadPoolSize, Environment.ProcessorCount / 2); + } } } diff --git a/src/csharp/Grpc.Core/Internal/AsyncCall.cs b/src/csharp/Grpc.Core/Internal/AsyncCall.cs index f522174bd0f9fe4748fd3b0fcb42e99ec1e39631..55351869b5c9948b76b65d71ee215efc9d2c8640 100644 --- a/src/csharp/Grpc.Core/Internal/AsyncCall.cs +++ b/src/csharp/Grpc.Core/Internal/AsyncCall.cs @@ -57,7 +57,7 @@ namespace Grpc.Core.Internal // Completion of a pending unary response if not null. TaskCompletionSource<TResponse> unaryResponseTcs; - // Indicates that steaming call has finished. + // Indicates that response streaming call has finished. TaskCompletionSource<object> streamingCallFinishedTcs = new TaskCompletionSource<object>(); // Response headers set here once received. @@ -443,6 +443,19 @@ namespace Grpc.Core.Internal } } + protected override void CheckSendingAllowed(bool allowFinished) + { + base.CheckSendingAllowed(true); + + // throwing RpcException if we already received status on client + // side makes the most sense. + // Note that this throws even for StatusCode.OK. + if (!allowFinished && finishedStatus.HasValue) + { + throw new RpcException(finishedStatus.Value.Status); + } + } + /// <summary> /// Handles receive status completion for calls with streaming response. /// </summary> diff --git a/src/csharp/Grpc.Core/Internal/AsyncCallBase.cs b/src/csharp/Grpc.Core/Internal/AsyncCallBase.cs index 42234dcac217d819a68f4f0b57570b76b6e1f660..4de23706b28e5989e6288eb48d3fff7193be363a 100644 --- a/src/csharp/Grpc.Core/Internal/AsyncCallBase.cs +++ b/src/csharp/Grpc.Core/Internal/AsyncCallBase.cs @@ -213,7 +213,7 @@ namespace Grpc.Core.Internal { } - protected void CheckSendingAllowed(bool allowFinished) + protected virtual void CheckSendingAllowed(bool allowFinished) { GrpcPreconditions.CheckState(started); CheckNotCancelled(); diff --git a/src/csharp/Grpc.Core/Internal/AsyncCallServer.cs b/src/csharp/Grpc.Core/Internal/AsyncCallServer.cs index eafe2ccab8713bc47cf890d24b9f22bb32142d70..b1566b44a7ccd212b015b65532493d0280743998 100644 --- a/src/csharp/Grpc.Core/Internal/AsyncCallServer.cs +++ b/src/csharp/Grpc.Core/Internal/AsyncCallServer.cs @@ -139,8 +139,11 @@ namespace Grpc.Core.Internal /// Sends call result status, indicating we are done with writes. /// Sending a status different from StatusCode.OK will also implicitly cancel the call. /// </summary> - public Task SendStatusFromServerAsync(Status status, Metadata trailers) + public Task SendStatusFromServerAsync(Status status, Metadata trailers, Tuple<TResponse, WriteFlags> optionalWrite) { + byte[] payload = optionalWrite != null ? UnsafeSerialize(optionalWrite.Item1) : null; + var writeFlags = optionalWrite != null ? optionalWrite.Item2 : default(WriteFlags); + lock (myLock) { GrpcPreconditions.CheckState(started); @@ -149,11 +152,16 @@ namespace Grpc.Core.Internal using (var metadataArray = MetadataArraySafeHandle.Create(trailers)) { - call.StartSendStatusFromServer(HandleSendStatusFromServerFinished, status, metadataArray, !initialMetadataSent); + call.StartSendStatusFromServer(HandleSendStatusFromServerFinished, status, metadataArray, !initialMetadataSent, + payload, writeFlags); } halfcloseRequested = true; initialMetadataSent = true; sendStatusFromServerTcs = new TaskCompletionSource<object>(); + if (optionalWrite != null) + { + streamingWritesCounter++; + } return sendStatusFromServerTcs.Task; } } diff --git a/src/csharp/Grpc.Core/Internal/CallSafeHandle.cs b/src/csharp/Grpc.Core/Internal/CallSafeHandle.cs index 500653ba5d3def399e0f48c27bfbec0c8fb5ef58..244b97d4a47de04739e05ce5f7e054394c3b9cf7 100644 --- a/src/csharp/Grpc.Core/Internal/CallSafeHandle.cs +++ b/src/csharp/Grpc.Core/Internal/CallSafeHandle.cs @@ -135,13 +135,16 @@ namespace Grpc.Core.Internal } } - public void StartSendStatusFromServer(SendCompletionHandler callback, Status status, MetadataArraySafeHandle metadataArray, bool sendEmptyInitialMetadata) + public void StartSendStatusFromServer(SendCompletionHandler callback, Status status, MetadataArraySafeHandle metadataArray, bool sendEmptyInitialMetadata, + byte[] optionalPayload, WriteFlags writeFlags) { using (completionQueue.NewScope()) { var ctx = BatchContextSafeHandle.Create(); + var optionalPayloadLength = optionalPayload != null ? new UIntPtr((ulong)optionalPayload.Length) : UIntPtr.Zero; completionRegistry.RegisterBatchCompletion(ctx, (success, context) => callback(success)); - Native.grpcsharp_call_send_status_from_server(this, ctx, status.StatusCode, status.Detail, metadataArray, sendEmptyInitialMetadata).CheckOk(); + Native.grpcsharp_call_send_status_from_server(this, ctx, status.StatusCode, status.Detail, metadataArray, sendEmptyInitialMetadata, + optionalPayload, optionalPayloadLength, writeFlags).CheckOk(); } } diff --git a/src/csharp/Grpc.Core/Internal/INativeCall.cs b/src/csharp/Grpc.Core/Internal/INativeCall.cs index cbef5991396e41d2825d5b65f9ce70df435bbe1e..cd3719cb50c58d813de0faacd0e678173bdecd16 100644 --- a/src/csharp/Grpc.Core/Internal/INativeCall.cs +++ b/src/csharp/Grpc.Core/Internal/INativeCall.cs @@ -78,7 +78,7 @@ namespace Grpc.Core.Internal void StartSendCloseFromClient(SendCompletionHandler callback); - void StartSendStatusFromServer(SendCompletionHandler callback, Grpc.Core.Status status, MetadataArraySafeHandle metadataArray, bool sendEmptyInitialMetadata); + void StartSendStatusFromServer(SendCompletionHandler callback, Grpc.Core.Status status, MetadataArraySafeHandle metadataArray, bool sendEmptyInitialMetadata, byte[] optionalPayload, Grpc.Core.WriteFlags writeFlags); void StartServerSide(ReceivedCloseOnServerHandler callback); } diff --git a/src/csharp/Grpc.Core/Internal/NativeMethods.cs b/src/csharp/Grpc.Core/Internal/NativeMethods.cs index 9ee0ba3bc0578f37efeaaad4ac738d500ea8a3c7..c277c73ef04ed92c818e7c786722d224124fc82c 100644 --- a/src/csharp/Grpc.Core/Internal/NativeMethods.cs +++ b/src/csharp/Grpc.Core/Internal/NativeMethods.cs @@ -421,20 +421,21 @@ namespace Grpc.Core.Internal public delegate GRPCCallError grpcsharp_call_cancel_delegate(CallSafeHandle call); public delegate GRPCCallError grpcsharp_call_cancel_with_status_delegate(CallSafeHandle call, StatusCode status, string description); public delegate GRPCCallError grpcsharp_call_start_unary_delegate(CallSafeHandle call, - BatchContextSafeHandle ctx, byte[] send_buffer, UIntPtr send_buffer_len, MetadataArraySafeHandle metadataArray, WriteFlags writeFlags); + BatchContextSafeHandle ctx, byte[] sendBuffer, UIntPtr sendBufferLen, MetadataArraySafeHandle metadataArray, WriteFlags writeFlags); public delegate GRPCCallError grpcsharp_call_start_client_streaming_delegate(CallSafeHandle call, BatchContextSafeHandle ctx, MetadataArraySafeHandle metadataArray); public delegate GRPCCallError grpcsharp_call_start_server_streaming_delegate(CallSafeHandle call, - BatchContextSafeHandle ctx, byte[] send_buffer, UIntPtr send_buffer_len, + BatchContextSafeHandle ctx, byte[] sendBuffer, UIntPtr sendBufferLen, MetadataArraySafeHandle metadataArray, WriteFlags writeFlags); public delegate GRPCCallError grpcsharp_call_start_duplex_streaming_delegate(CallSafeHandle call, BatchContextSafeHandle ctx, MetadataArraySafeHandle metadataArray); public delegate GRPCCallError grpcsharp_call_send_message_delegate(CallSafeHandle call, - BatchContextSafeHandle ctx, byte[] send_buffer, UIntPtr send_buffer_len, WriteFlags writeFlags, bool sendEmptyInitialMetadata); + BatchContextSafeHandle ctx, byte[] sendBuffer, UIntPtr sendBufferLen, WriteFlags writeFlags, bool sendEmptyInitialMetadata); public delegate GRPCCallError grpcsharp_call_send_close_from_client_delegate(CallSafeHandle call, BatchContextSafeHandle ctx); public delegate GRPCCallError grpcsharp_call_send_status_from_server_delegate(CallSafeHandle call, - BatchContextSafeHandle ctx, StatusCode statusCode, string statusMessage, MetadataArraySafeHandle metadataArray, bool sendEmptyInitialMetadata); + BatchContextSafeHandle ctx, StatusCode statusCode, string statusMessage, MetadataArraySafeHandle metadataArray, bool sendEmptyInitialMetadata, + byte[] optionalSendBuffer, UIntPtr optionalSendBufferLen, WriteFlags writeFlags); public delegate GRPCCallError grpcsharp_call_recv_message_delegate(CallSafeHandle call, BatchContextSafeHandle ctx); public delegate GRPCCallError grpcsharp_call_recv_initial_metadata_delegate(CallSafeHandle call, @@ -593,7 +594,7 @@ namespace Grpc.Core.Internal [DllImport("grpc_csharp_ext.dll")] public static extern GRPCCallError grpcsharp_call_start_unary(CallSafeHandle call, - BatchContextSafeHandle ctx, byte[] send_buffer, UIntPtr send_buffer_len, MetadataArraySafeHandle metadataArray, WriteFlags writeFlags); + BatchContextSafeHandle ctx, byte[] sendBuffer, UIntPtr sendBufferLen, MetadataArraySafeHandle metadataArray, WriteFlags writeFlags); [DllImport("grpc_csharp_ext.dll")] public static extern GRPCCallError grpcsharp_call_start_client_streaming(CallSafeHandle call, @@ -601,7 +602,7 @@ namespace Grpc.Core.Internal [DllImport("grpc_csharp_ext.dll")] public static extern GRPCCallError grpcsharp_call_start_server_streaming(CallSafeHandle call, - BatchContextSafeHandle ctx, byte[] send_buffer, UIntPtr send_buffer_len, + BatchContextSafeHandle ctx, byte[] sendBuffer, UIntPtr sendBufferLen, MetadataArraySafeHandle metadataArray, WriteFlags writeFlags); [DllImport("grpc_csharp_ext.dll")] @@ -610,7 +611,7 @@ namespace Grpc.Core.Internal [DllImport("grpc_csharp_ext.dll")] public static extern GRPCCallError grpcsharp_call_send_message(CallSafeHandle call, - BatchContextSafeHandle ctx, byte[] send_buffer, UIntPtr send_buffer_len, WriteFlags writeFlags, bool sendEmptyInitialMetadata); + BatchContextSafeHandle ctx, byte[] sendBuffer, UIntPtr sendBufferLen, WriteFlags writeFlags, bool sendEmptyInitialMetadata); [DllImport("grpc_csharp_ext.dll")] public static extern GRPCCallError grpcsharp_call_send_close_from_client(CallSafeHandle call, @@ -618,7 +619,8 @@ namespace Grpc.Core.Internal [DllImport("grpc_csharp_ext.dll")] public static extern GRPCCallError grpcsharp_call_send_status_from_server(CallSafeHandle call, - BatchContextSafeHandle ctx, StatusCode statusCode, string statusMessage, MetadataArraySafeHandle metadataArray, bool sendEmptyInitialMetadata); + BatchContextSafeHandle ctx, StatusCode statusCode, string statusMessage, MetadataArraySafeHandle metadataArray, bool sendEmptyInitialMetadata, + byte[] optionalSendBuffer, UIntPtr optionalSendBufferLen, WriteFlags writeFlags); [DllImport("grpc_csharp_ext.dll")] public static extern GRPCCallError grpcsharp_call_recv_message(CallSafeHandle call, diff --git a/src/csharp/Grpc.Core/Internal/ServerCallHandler.cs b/src/csharp/Grpc.Core/Internal/ServerCallHandler.cs index 00d82d51e82cdbb10f6e4b7b691c39f7e45c1f03..85b7a4b01e90067ad4d435cd47ff5cfd3020671d 100644 --- a/src/csharp/Grpc.Core/Internal/ServerCallHandler.cs +++ b/src/csharp/Grpc.Core/Internal/ServerCallHandler.cs @@ -75,27 +75,32 @@ namespace Grpc.Core.Internal var responseStream = new ServerResponseStream<TRequest, TResponse>(asyncCall); Status status; + Tuple<TResponse,WriteFlags> responseTuple = null; var context = HandlerUtils.NewContext(newRpc, asyncCall.Peer, responseStream, asyncCall.CancellationToken); try { GrpcPreconditions.CheckArgument(await requestStream.MoveNext().ConfigureAwait(false)); var request = requestStream.Current; - var result = await handler(request, context).ConfigureAwait(false); + var response = await handler(request, context).ConfigureAwait(false); status = context.Status; - await responseStream.WriteAsync(result).ConfigureAwait(false); + responseTuple = Tuple.Create(response, HandlerUtils.GetWriteFlags(context.WriteOptions)); } catch (Exception e) { - Logger.Error(e, "Exception occured in handler."); + if (!(e is RpcException)) + { + Logger.Warning(e, "Exception occured in handler."); + } status = HandlerUtils.StatusFromException(e); } try { - await asyncCall.SendStatusFromServerAsync(status, context.ResponseTrailers).ConfigureAwait(false); + await asyncCall.SendStatusFromServerAsync(status, context.ResponseTrailers, responseTuple).ConfigureAwait(false); } - catch (OperationCanceledException) + catch (Exception) { - // Call has been already cancelled. + asyncCall.Cancel(); + throw; } await finishedTask.ConfigureAwait(false); } @@ -139,17 +144,21 @@ namespace Grpc.Core.Internal } catch (Exception e) { - Logger.Error(e, "Exception occured in handler."); + if (!(e is RpcException)) + { + Logger.Warning(e, "Exception occured in handler."); + } status = HandlerUtils.StatusFromException(e); } try { - await asyncCall.SendStatusFromServerAsync(status, context.ResponseTrailers).ConfigureAwait(false); + await asyncCall.SendStatusFromServerAsync(status, context.ResponseTrailers, null).ConfigureAwait(false); } - catch (OperationCanceledException) + catch (Exception) { - // Call has been already cancelled. + asyncCall.Cancel(); + throw; } await finishedTask.ConfigureAwait(false); } @@ -183,33 +192,31 @@ namespace Grpc.Core.Internal var responseStream = new ServerResponseStream<TRequest, TResponse>(asyncCall); Status status; + Tuple<TResponse,WriteFlags> responseTuple = null; var context = HandlerUtils.NewContext(newRpc, asyncCall.Peer, responseStream, asyncCall.CancellationToken); try { - var result = await handler(requestStream, context).ConfigureAwait(false); + var response = await handler(requestStream, context).ConfigureAwait(false); status = context.Status; - try - { - await responseStream.WriteAsync(result).ConfigureAwait(false); - } - catch (OperationCanceledException) - { - status = Status.DefaultCancelled; - } + responseTuple = Tuple.Create(response, HandlerUtils.GetWriteFlags(context.WriteOptions)); } catch (Exception e) { - Logger.Error(e, "Exception occured in handler."); + if (!(e is RpcException)) + { + Logger.Warning(e, "Exception occured in handler."); + } status = HandlerUtils.StatusFromException(e); } try { - await asyncCall.SendStatusFromServerAsync(status, context.ResponseTrailers).ConfigureAwait(false); + await asyncCall.SendStatusFromServerAsync(status, context.ResponseTrailers, responseTuple).ConfigureAwait(false); } - catch (OperationCanceledException) + catch (Exception) { - // Call has been already cancelled. + asyncCall.Cancel(); + throw; } await finishedTask.ConfigureAwait(false); } @@ -251,16 +258,20 @@ namespace Grpc.Core.Internal } catch (Exception e) { - Logger.Error(e, "Exception occured in handler."); + if (!(e is RpcException)) + { + Logger.Warning(e, "Exception occured in handler."); + } status = HandlerUtils.StatusFromException(e); } try { - await asyncCall.SendStatusFromServerAsync(status, context.ResponseTrailers).ConfigureAwait(false); + await asyncCall.SendStatusFromServerAsync(status, context.ResponseTrailers, null).ConfigureAwait(false); } - catch (OperationCanceledException) + catch (Exception) { - // Call has been already cancelled. + asyncCall.Cancel(); + throw; } await finishedTask.ConfigureAwait(false); } @@ -278,7 +289,7 @@ namespace Grpc.Core.Internal asyncCall.Initialize(newRpc.Call); var finishedTask = asyncCall.ServerSideCallAsync(); - await asyncCall.SendStatusFromServerAsync(new Status(StatusCode.Unimplemented, ""), Metadata.Empty).ConfigureAwait(false); + await asyncCall.SendStatusFromServerAsync(new Status(StatusCode.Unimplemented, ""), Metadata.Empty, null).ConfigureAwait(false); await finishedTask.ConfigureAwait(false); } } @@ -297,6 +308,11 @@ namespace Grpc.Core.Internal return new Status(StatusCode.Unknown, "Exception was thrown by handler."); } + public static WriteFlags GetWriteFlags(WriteOptions writeOptions) + { + return writeOptions != null ? writeOptions.Flags : default(WriteFlags); + } + public static ServerCallContext NewContext<TRequest, TResponse>(ServerRpcNew newRpc, string peer, ServerResponseStream<TRequest, TResponse> serverResponseStream, CancellationToken cancellationToken) where TRequest : class where TResponse : class diff --git a/src/csharp/Grpc.Core/Server.cs b/src/csharp/Grpc.Core/Server.cs index 5b61b7f060f0d162c4494c293a45f047d9164d91..d538a4671f6dcafdc6f7086b13e040ee70517972 100644 --- a/src/csharp/Grpc.Core/Server.cs +++ b/src/csharp/Grpc.Core/Server.cs @@ -48,6 +48,7 @@ namespace Grpc.Core /// </summary> public class Server { + const int InitialAllowRpcTokenCount = 10; static readonly ILogger Logger = GrpcEnvironment.Logger.ForType<Server>(); readonly AtomicCounter activeCallCounter = new AtomicCounter(); @@ -65,7 +66,7 @@ namespace Grpc.Core readonly TaskCompletionSource<object> shutdownTcs = new TaskCompletionSource<object>(); bool startRequested; - bool shutdownRequested; + volatile bool shutdownRequested; /// <summary> /// Create a new server. @@ -129,7 +130,13 @@ namespace Grpc.Core startRequested = true; handle.Start(); - AllowOneRpc(); + + // Starting with more than one AllowOneRpc tokens can significantly increase + // unary RPC throughput. + for (int i = 0; i < InitialAllowRpcTokenCount; i++) + { + AllowOneRpc(); + } } } @@ -239,12 +246,9 @@ namespace Grpc.Core /// </summary> private void AllowOneRpc() { - lock (myLock) + if (!shutdownRequested) { - if (!shutdownRequested) - { - handle.RequestCall(HandleNewServerRpc, environment); - } + handle.RequestCall(HandleNewServerRpc, environment); } } @@ -283,6 +287,8 @@ namespace Grpc.Core /// </summary> private void HandleNewServerRpc(bool success, BatchContextSafeHandle ctx) { + Task.Run(() => AllowOneRpc()); + if (success) { ServerRpcNew newRpc = ctx.GetServerRpcNew(this); @@ -290,11 +296,9 @@ namespace Grpc.Core // after server shutdown, the callback returns with null call if (!newRpc.Call.IsInvalid) { - Task.Run(async () => await HandleCallAsync(newRpc)).ConfigureAwait(false); + HandleCallAsync(newRpc); // we don't need to await. } } - - AllowOneRpc(); } /// <summary> diff --git a/src/csharp/Grpc.Core/VersionInfo.cs b/src/csharp/Grpc.Core/VersionInfo.cs index f7a9cb9c1cb66f36a1ffbaa2042d44ae418e02c0..e1609341d9acd4d7b2a02d032cf239155df8b91d 100644 --- a/src/csharp/Grpc.Core/VersionInfo.cs +++ b/src/csharp/Grpc.Core/VersionInfo.cs @@ -48,11 +48,11 @@ namespace Grpc.Core /// <summary> /// Current <c>AssemblyFileVersion</c> of gRPC C# assemblies /// </summary> - public const string CurrentAssemblyFileVersion = "0.14.0.0"; + public const string CurrentAssemblyFileVersion = "0.15.0.0"; /// <summary> /// Current version of gRPC C# /// </summary> - public const string CurrentVersion = "0.14.0-dev"; + public const string CurrentVersion = "0.15.0-dev"; } } diff --git a/src/csharp/Grpc.Examples.Tests/Grpc.Examples.Tests.csproj b/src/csharp/Grpc.Examples.Tests/Grpc.Examples.Tests.csproj index cfe668b6bed8e0c21e47dee3c954f5ada4101710..3fd28c65282c914a8f6ef9146a6968931276566d 100644 --- a/src/csharp/Grpc.Examples.Tests/Grpc.Examples.Tests.csproj +++ b/src/csharp/Grpc.Examples.Tests/Grpc.Examples.Tests.csproj @@ -37,7 +37,7 @@ <ItemGroup> <Reference Include="System" /> <Reference Include="Google.Protobuf"> - <HintPath>..\packages\Google.Protobuf.3.0.0-beta2\lib\portable-net45+netcore45+wpa81+wp8\Google.Protobuf.dll</HintPath> + <HintPath>..\packages\Google.Protobuf.3.0.0-beta3\lib\portable-net45+netcore45+wpa81+wp8\Google.Protobuf.dll</HintPath> </Reference> <Reference Include="nunit.framework"> <HintPath>..\packages\NUnit.3.2.0\lib\net45\nunit.framework.dll</HintPath> diff --git a/src/csharp/Grpc.Examples.Tests/MathClientServerTests.cs b/src/csharp/Grpc.Examples.Tests/MathClientServerTests.cs index 875202b9509192833096c524d3aee42cf37340db..ee11105efe7f8018f4003a21e63a92b3cf9888f2 100644 --- a/src/csharp/Grpc.Examples.Tests/MathClientServerTests.cs +++ b/src/csharp/Grpc.Examples.Tests/MathClientServerTests.cs @@ -92,7 +92,7 @@ namespace Math.Tests public void DivByZero() { var ex = Assert.Throws<RpcException>(() => client.Div(new DivArgs { Dividend = 0, Divisor = 0 })); - Assert.AreEqual(StatusCode.Unknown, ex.Status.StatusCode); + Assert.AreEqual(StatusCode.InvalidArgument, ex.Status.StatusCode); } [Test] diff --git a/src/csharp/Grpc.Examples.Tests/packages.config b/src/csharp/Grpc.Examples.Tests/packages.config index ce030f9d777dd9a949a5d972e61e928c65c78d24..668601af8e772a6773682ada7e0b24bdd7463721 100644 --- a/src/csharp/Grpc.Examples.Tests/packages.config +++ b/src/csharp/Grpc.Examples.Tests/packages.config @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <packages> - <package id="Google.Protobuf" version="3.0.0-beta2" targetFramework="net45" /> + <package id="Google.Protobuf" version="3.0.0-beta3" targetFramework="net45" /> <package id="Ix-Async" version="1.2.5" targetFramework="net45" /> <package id="NUnit" version="3.2.0" targetFramework="net45" /> <package id="NUnitLite" version="3.2.0" targetFramework="net45" /> diff --git a/src/csharp/Grpc.Examples/Grpc.Examples.csproj b/src/csharp/Grpc.Examples/Grpc.Examples.csproj index f0a0aa3a266fb2b9d9bacb7844757ebc60560937..30170ab03c740de8c9667a18f99955e66cd25a9f 100644 --- a/src/csharp/Grpc.Examples/Grpc.Examples.csproj +++ b/src/csharp/Grpc.Examples/Grpc.Examples.csproj @@ -39,7 +39,7 @@ <ItemGroup> <Reference Include="Google.Protobuf, Version=3.0.0.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> - <HintPath>..\packages\Google.Protobuf.3.0.0-beta2\lib\portable-net45+netcore45+wpa81+wp8\Google.Protobuf.dll</HintPath> + <HintPath>..\packages\Google.Protobuf.3.0.0-beta3\lib\portable-net45+netcore45+wpa81+wp8\Google.Protobuf.dll</HintPath> </Reference> <Reference Include="nunit.framework"> <HintPath>..\packages\NUnit.3.2.0\lib\net45\nunit.framework.dll</HintPath> diff --git a/src/csharp/Grpc.Examples/Math.cs b/src/csharp/Grpc.Examples/Math.cs index 33c4f8d9c0486cd248d1d0c95e22ef1ae6c9b90a..a17228c8c5e66669feb768f49d1685664a762d74 100644 --- a/src/csharp/Grpc.Examples/Math.cs +++ b/src/csharp/Grpc.Examples/Math.cs @@ -34,12 +34,12 @@ namespace Math { "Mw==")); descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, new pbr::FileDescriptor[] { }, - new pbr::GeneratedCodeInfo(null, new pbr::GeneratedCodeInfo[] { - new pbr::GeneratedCodeInfo(typeof(global::Math.DivArgs), global::Math.DivArgs.Parser, new[]{ "Dividend", "Divisor" }, null, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Math.DivReply), global::Math.DivReply.Parser, new[]{ "Quotient", "Remainder" }, null, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Math.FibArgs), global::Math.FibArgs.Parser, new[]{ "Limit" }, null, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Math.Num), global::Math.Num.Parser, new[]{ "Num_" }, null, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Math.FibReply), global::Math.FibReply.Parser, new[]{ "Count" }, null, null, null) + new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] { + new pbr::GeneratedClrTypeInfo(typeof(global::Math.DivArgs), global::Math.DivArgs.Parser, new[]{ "Dividend", "Divisor" }, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Math.DivReply), global::Math.DivReply.Parser, new[]{ "Quotient", "Remainder" }, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Math.FibArgs), global::Math.FibArgs.Parser, new[]{ "Limit" }, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Math.Num), global::Math.Num.Parser, new[]{ "Num_" }, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Math.FibReply), global::Math.FibReply.Parser, new[]{ "Count" }, null, null, null) })); } #endregion diff --git a/src/csharp/Grpc.Examples/MathExamples.cs b/src/csharp/Grpc.Examples/MathExamples.cs index 6075420974889cd4cf26e08cb8c088a8e6ff5d12..d260830b94d1229710e467c36c697023b1760539 100644 --- a/src/csharp/Grpc.Examples/MathExamples.cs +++ b/src/csharp/Grpc.Examples/MathExamples.cs @@ -32,6 +32,7 @@ using System; using System.Collections.Generic; using System.Threading.Tasks; +using Grpc.Core; using Grpc.Core.Utils; namespace Math @@ -109,5 +110,42 @@ namespace Math DivReply result = await client.DivAsync(new DivArgs { Dividend = sum.Num_, Divisor = numbers.Count }); Console.WriteLine("Avg Result: " + result); } + + /// <summary> + /// Shows how to handle a call ending with non-OK status. + /// </summary> + public static async Task HandleErrorExample(Math.MathClient client) + { + try + { + DivReply result = await client.DivAsync(new DivArgs { Dividend = 5, Divisor = 0 }); + } + catch (RpcException ex) + { + Console.WriteLine(string.Format("RPC ended with status {0}", ex.Status)); + } + } + + /// <summary> + /// Shows how to send request headers and how to access response headers + /// and response trailers. + /// </summary> + public static async Task MetadataExample(Math.MathClient client) + { + var requestHeaders = new Metadata + { + { "custom-header", "custom-value" } + }; + + var call = client.DivAsync(new DivArgs { Dividend = 5, Divisor = 0 }, requestHeaders); + + // Get response headers + Metadata responseHeaders = await call.ResponseHeadersAsync; + + var result = await call; + + // Get response trailers after the call has finished. + Metadata responseTrailers = call.GetTrailers(); + } } } diff --git a/src/csharp/Grpc.Examples/MathGrpc.cs b/src/csharp/Grpc.Examples/MathGrpc.cs index 2d3034d28b5ffc76b15fbdae076836f25937e622..d700a18778bb7a0ea18c1d162117bdebcdbe1150 100644 --- a/src/csharp/Grpc.Examples/MathGrpc.cs +++ b/src/csharp/Grpc.Examples/MathGrpc.cs @@ -151,25 +151,25 @@ namespace Math { /// Div divides args.dividend by args.divisor and returns the quotient and /// remainder. /// </summary> - Task<global::Math.DivReply> Div(global::Math.DivArgs request, ServerCallContext context); + global::System.Threading.Tasks.Task<global::Math.DivReply> Div(global::Math.DivArgs request, ServerCallContext context); /// <summary> /// DivMany accepts an arbitrary number of division args from the client stream /// and sends back the results in the reply stream. The stream continues until /// the client closes its end; the server does the same after sending all the /// replies. The stream ends immediately if either end aborts. /// </summary> - Task DivMany(IAsyncStreamReader<global::Math.DivArgs> requestStream, IServerStreamWriter<global::Math.DivReply> responseStream, ServerCallContext context); + global::System.Threading.Tasks.Task DivMany(IAsyncStreamReader<global::Math.DivArgs> requestStream, IServerStreamWriter<global::Math.DivReply> responseStream, ServerCallContext context); /// <summary> /// Fib generates numbers in the Fibonacci sequence. If args.limit > 0, Fib /// generates up to limit numbers; otherwise it continues until the call is /// canceled. Unlike Fib above, Fib has no final FibReply. /// </summary> - Task Fib(global::Math.FibArgs request, IServerStreamWriter<global::Math.Num> responseStream, ServerCallContext context); + global::System.Threading.Tasks.Task Fib(global::Math.FibArgs request, IServerStreamWriter<global::Math.Num> responseStream, ServerCallContext context); /// <summary> /// Sum sums a stream of numbers, returning the final result once the stream /// is closed. /// </summary> - Task<global::Math.Num> Sum(IAsyncStreamReader<global::Math.Num> requestStream, ServerCallContext context); + global::System.Threading.Tasks.Task<global::Math.Num> Sum(IAsyncStreamReader<global::Math.Num> requestStream, ServerCallContext context); } /// <summary>Base class for server-side implementations of Math</summary> @@ -179,7 +179,7 @@ namespace Math { /// Div divides args.dividend by args.divisor and returns the quotient and /// remainder. /// </summary> - public virtual Task<global::Math.DivReply> Div(global::Math.DivArgs request, ServerCallContext context) + public virtual global::System.Threading.Tasks.Task<global::Math.DivReply> Div(global::Math.DivArgs request, ServerCallContext context) { throw new RpcException(new Status(StatusCode.Unimplemented, "")); } @@ -190,7 +190,7 @@ namespace Math { /// the client closes its end; the server does the same after sending all the /// replies. The stream ends immediately if either end aborts. /// </summary> - public virtual Task DivMany(IAsyncStreamReader<global::Math.DivArgs> requestStream, IServerStreamWriter<global::Math.DivReply> responseStream, ServerCallContext context) + public virtual global::System.Threading.Tasks.Task DivMany(IAsyncStreamReader<global::Math.DivArgs> requestStream, IServerStreamWriter<global::Math.DivReply> responseStream, ServerCallContext context) { throw new RpcException(new Status(StatusCode.Unimplemented, "")); } @@ -200,7 +200,7 @@ namespace Math { /// generates up to limit numbers; otherwise it continues until the call is /// canceled. Unlike Fib above, Fib has no final FibReply. /// </summary> - public virtual Task Fib(global::Math.FibArgs request, IServerStreamWriter<global::Math.Num> responseStream, ServerCallContext context) + public virtual global::System.Threading.Tasks.Task Fib(global::Math.FibArgs request, IServerStreamWriter<global::Math.Num> responseStream, ServerCallContext context) { throw new RpcException(new Status(StatusCode.Unimplemented, "")); } @@ -209,7 +209,7 @@ namespace Math { /// Sum sums a stream of numbers, returning the final result once the stream /// is closed. /// </summary> - public virtual Task<global::Math.Num> Sum(IAsyncStreamReader<global::Math.Num> requestStream, ServerCallContext context) + public virtual global::System.Threading.Tasks.Task<global::Math.Num> Sum(IAsyncStreamReader<global::Math.Num> requestStream, ServerCallContext context) { throw new RpcException(new Status(StatusCode.Unimplemented, "")); } diff --git a/src/csharp/Grpc.Examples/MathServiceImpl.cs b/src/csharp/Grpc.Examples/MathServiceImpl.cs index 79c56e57a85a220cb6d833f552134f361e2ab6d9..a28020f62f31b172f6130eb599361a03ed3bfec5 100644 --- a/src/csharp/Grpc.Examples/MathServiceImpl.cs +++ b/src/csharp/Grpc.Examples/MathServiceImpl.cs @@ -52,23 +52,15 @@ namespace Math public override async Task Fib(FibArgs request, IServerStreamWriter<Num> responseStream, ServerCallContext context) { - if (request.Limit <= 0) - { - // keep streaming the sequence until cancelled. - IEnumerator<Num> fibEnumerator = FibInternal(long.MaxValue).GetEnumerator(); - while (!context.CancellationToken.IsCancellationRequested && fibEnumerator.MoveNext()) - { - await responseStream.WriteAsync(fibEnumerator.Current); - await Task.Delay(100); - } - } + var limit = request.Limit > 0 ? request.Limit : long.MaxValue; + var fibEnumerator = FibInternal(limit).GetEnumerator(); - if (request.Limit > 0) + // Keep streaming the sequence until the call is cancelled. + // Use CancellationToken from ServerCallContext to detect the cancellation. + while (!context.CancellationToken.IsCancellationRequested && fibEnumerator.MoveNext()) { - foreach (var num in FibInternal(request.Limit)) - { - await responseStream.WriteAsync(num); - } + await responseStream.WriteAsync(fibEnumerator.Current); + await Task.Delay(100); } } @@ -89,6 +81,13 @@ namespace Math static DivReply DivInternal(DivArgs args) { + if (args.Divisor == 0) + { + // One can finish the RPC with non-ok status by throwing RpcException instance. + // Alternatively, resulting status can be set using ServerCallContext.Status + throw new RpcException(new Status(StatusCode.InvalidArgument, "Division by zero")); + } + long quotient = args.Dividend / args.Divisor; long remainder = args.Dividend % args.Divisor; return new DivReply { Quotient = quotient, Remainder = remainder }; diff --git a/src/csharp/Grpc.Examples/packages.config b/src/csharp/Grpc.Examples/packages.config index a424cd2ea023b12e0ce5f3ac1ba0d877bf42d934..a70dcbd4c6834abdd91daa6a8d75b0be0e293ebd 100644 --- a/src/csharp/Grpc.Examples/packages.config +++ b/src/csharp/Grpc.Examples/packages.config @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <packages> - <package id="Google.Protobuf" version="3.0.0-beta2" targetFramework="net45" /> + <package id="Google.Protobuf" version="3.0.0-beta3" targetFramework="net45" /> <package id="Ix-Async" version="1.2.5" targetFramework="net45" /> <package id="NUnit" version="3.2.0" targetFramework="net45" /> </packages> \ No newline at end of file diff --git a/src/csharp/Grpc.HealthCheck.Tests/Grpc.HealthCheck.Tests.csproj b/src/csharp/Grpc.HealthCheck.Tests/Grpc.HealthCheck.Tests.csproj index 0bea9c03e7a1aeddd66da5900770fc53bfd65c2f..a5ee4fdb46c1285b99513dbe5824de679e6f7fd6 100644 --- a/src/csharp/Grpc.HealthCheck.Tests/Grpc.HealthCheck.Tests.csproj +++ b/src/csharp/Grpc.HealthCheck.Tests/Grpc.HealthCheck.Tests.csproj @@ -45,7 +45,7 @@ <Reference Include="System.Data" /> <Reference Include="System.Xml" /> <Reference Include="Google.Protobuf"> - <HintPath>..\packages\Google.Protobuf.3.0.0-beta2\lib\portable-net45+netcore45+wpa81+wp8\Google.Protobuf.dll</HintPath> + <HintPath>..\packages\Google.Protobuf.3.0.0-beta3\lib\portable-net45+netcore45+wpa81+wp8\Google.Protobuf.dll</HintPath> </Reference> <Reference Include="nunit.framework"> <HintPath>..\packages\NUnit.3.2.0\lib\net45\nunit.framework.dll</HintPath> diff --git a/src/csharp/Grpc.HealthCheck.Tests/HealthClientServerTest.cs b/src/csharp/Grpc.HealthCheck.Tests/HealthClientServerTest.cs index fb292945a6e626f594e3b873ac3bf0bbc6ecf3d7..070674bae9ddb5ef10280562bc4bccf17618edac 100644 --- a/src/csharp/Grpc.HealthCheck.Tests/HealthClientServerTest.cs +++ b/src/csharp/Grpc.HealthCheck.Tests/HealthClientServerTest.cs @@ -79,16 +79,17 @@ namespace Grpc.HealthCheck.Tests [Test] public void ServiceIsRunning() { - serviceImpl.SetStatus("", HealthCheckResponse.Types.ServingStatus.SERVING); + serviceImpl.SetStatus("", HealthCheckResponse.Types.ServingStatus.Serving); var response = client.Check(new HealthCheckRequest { Service = "" }); - Assert.AreEqual(HealthCheckResponse.Types.ServingStatus.SERVING, response.Status); + Assert.AreEqual(HealthCheckResponse.Types.ServingStatus.Serving, response.Status); } [Test] public void ServiceDoesntExist() { - Assert.Throws(Is.TypeOf(typeof(RpcException)).And.Property("Status").Property("StatusCode").EqualTo(StatusCode.NotFound), () => client.Check(new HealthCheckRequest { Service = "nonexistent.service" })); + var ex = Assert.Throws<RpcException>(() => client.Check(new HealthCheckRequest { Service = "nonexistent.service" })); + Assert.AreEqual(StatusCode.NotFound, ex.Status.StatusCode); } // TODO(jtattermusch): add test with timeout once timeouts are supported diff --git a/src/csharp/Grpc.HealthCheck.Tests/HealthServiceImplTest.cs b/src/csharp/Grpc.HealthCheck.Tests/HealthServiceImplTest.cs index a4b79e3a7d61a3f9499d02836544ca495efbe5ae..15703604bae6259f36306ce5cccc34359f32b7e9 100644 --- a/src/csharp/Grpc.HealthCheck.Tests/HealthServiceImplTest.cs +++ b/src/csharp/Grpc.HealthCheck.Tests/HealthServiceImplTest.cs @@ -50,38 +50,39 @@ namespace Grpc.HealthCheck.Tests public void SetStatus() { var impl = new HealthServiceImpl(); - impl.SetStatus("", HealthCheckResponse.Types.ServingStatus.SERVING); - Assert.AreEqual(HealthCheckResponse.Types.ServingStatus.SERVING, GetStatusHelper(impl, "")); + impl.SetStatus("", HealthCheckResponse.Types.ServingStatus.Serving); + Assert.AreEqual(HealthCheckResponse.Types.ServingStatus.Serving, GetStatusHelper(impl, "")); - impl.SetStatus("", HealthCheckResponse.Types.ServingStatus.NOT_SERVING); - Assert.AreEqual(HealthCheckResponse.Types.ServingStatus.NOT_SERVING, GetStatusHelper(impl, "")); + impl.SetStatus("", HealthCheckResponse.Types.ServingStatus.NotServing); + Assert.AreEqual(HealthCheckResponse.Types.ServingStatus.NotServing, GetStatusHelper(impl, "")); - impl.SetStatus("", HealthCheckResponse.Types.ServingStatus.UNKNOWN); - Assert.AreEqual(HealthCheckResponse.Types.ServingStatus.UNKNOWN, GetStatusHelper(impl, "")); + impl.SetStatus("", HealthCheckResponse.Types.ServingStatus.Unknown); + Assert.AreEqual(HealthCheckResponse.Types.ServingStatus.Unknown, GetStatusHelper(impl, "")); - impl.SetStatus("grpc.test.TestService", HealthCheckResponse.Types.ServingStatus.SERVING); - Assert.AreEqual(HealthCheckResponse.Types.ServingStatus.SERVING, GetStatusHelper(impl, "grpc.test.TestService")); + impl.SetStatus("grpc.test.TestService", HealthCheckResponse.Types.ServingStatus.Serving); + Assert.AreEqual(HealthCheckResponse.Types.ServingStatus.Serving, GetStatusHelper(impl, "grpc.test.TestService")); } [Test] public void ClearStatus() { var impl = new HealthServiceImpl(); - impl.SetStatus("", HealthCheckResponse.Types.ServingStatus.SERVING); - impl.SetStatus("grpc.test.TestService", HealthCheckResponse.Types.ServingStatus.UNKNOWN); + impl.SetStatus("", HealthCheckResponse.Types.ServingStatus.Serving); + impl.SetStatus("grpc.test.TestService", HealthCheckResponse.Types.ServingStatus.Unknown); impl.ClearStatus(""); - Assert.Throws(Is.TypeOf(typeof(RpcException)).And.Property("Status").Property("StatusCode").EqualTo(StatusCode.NotFound), () => GetStatusHelper(impl, "")); - Assert.AreEqual(HealthCheckResponse.Types.ServingStatus.UNKNOWN, GetStatusHelper(impl, "grpc.test.TestService")); + var ex = Assert.Throws<RpcException>(() => GetStatusHelper(impl, "")); + Assert.AreEqual(StatusCode.NotFound, ex.Status.StatusCode); + Assert.AreEqual(HealthCheckResponse.Types.ServingStatus.Unknown, GetStatusHelper(impl, "grpc.test.TestService")); } [Test] public void ClearAll() { var impl = new HealthServiceImpl(); - impl.SetStatus("", HealthCheckResponse.Types.ServingStatus.SERVING); - impl.SetStatus("grpc.test.TestService", HealthCheckResponse.Types.ServingStatus.UNKNOWN); + impl.SetStatus("", HealthCheckResponse.Types.ServingStatus.Serving); + impl.SetStatus("grpc.test.TestService", HealthCheckResponse.Types.ServingStatus.Unknown); impl.ClearAll(); Assert.Throws(typeof(RpcException), () => GetStatusHelper(impl, "")); @@ -92,7 +93,7 @@ namespace Grpc.HealthCheck.Tests public void NullsRejected() { var impl = new HealthServiceImpl(); - Assert.Throws(typeof(ArgumentNullException), () => impl.SetStatus(null, HealthCheckResponse.Types.ServingStatus.SERVING)); + Assert.Throws(typeof(ArgumentNullException), () => impl.SetStatus(null, HealthCheckResponse.Types.ServingStatus.Serving)); Assert.Throws(typeof(ArgumentNullException), () => impl.ClearStatus(null)); } diff --git a/src/csharp/Grpc.HealthCheck.Tests/packages.config b/src/csharp/Grpc.HealthCheck.Tests/packages.config index 8066d8fcebd60c562cc80a4f5b58ecd2038ba866..2bcfec8829b2c5ad2b43d9d7e528d26db613e151 100644 --- a/src/csharp/Grpc.HealthCheck.Tests/packages.config +++ b/src/csharp/Grpc.HealthCheck.Tests/packages.config @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <packages> - <package id="Google.Protobuf" version="3.0.0-beta2" targetFramework="net45" /> + <package id="Google.Protobuf" version="3.0.0-beta3" targetFramework="net45" /> <package id="NUnit" version="3.2.0" targetFramework="net45" /> <package id="NUnitLite" version="3.2.0" targetFramework="net45" /> </packages> \ No newline at end of file diff --git a/src/csharp/Grpc.HealthCheck/Grpc.HealthCheck.csproj b/src/csharp/Grpc.HealthCheck/Grpc.HealthCheck.csproj index 498528aa18c597110942d5d4f5a5b49b077a20b0..2697b74f59ebd523aa40691f847afff6172c7846 100644 --- a/src/csharp/Grpc.HealthCheck/Grpc.HealthCheck.csproj +++ b/src/csharp/Grpc.HealthCheck/Grpc.HealthCheck.csproj @@ -40,7 +40,7 @@ <ItemGroup> <Reference Include="Google.Protobuf, Version=3.0.0.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> - <HintPath>..\packages\Google.Protobuf.3.0.0-beta2\lib\portable-net45+netcore45+wpa81+wp8\Google.Protobuf.dll</HintPath> + <HintPath>..\packages\Google.Protobuf.3.0.0-beta3\lib\portable-net45+netcore45+wpa81+wp8\Google.Protobuf.dll</HintPath> </Reference> <Reference Include="System" /> <Reference Include="System.Core" /> diff --git a/src/csharp/Grpc.HealthCheck/Health.cs b/src/csharp/Grpc.HealthCheck/Health.cs index d0d0c0b519665376069e283e7ae90f347c4b127a..100ad187d7dfb77756427c0b8ce6f7fcc98424ed 100644 --- a/src/csharp/Grpc.HealthCheck/Health.cs +++ b/src/csharp/Grpc.HealthCheck/Health.cs @@ -33,9 +33,9 @@ namespace Grpc.Health.V1 { "Ag5HcnBjLkhlYWx0aC5WMWIGcHJvdG8z")); descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, new pbr::FileDescriptor[] { }, - new pbr::GeneratedCodeInfo(null, new pbr::GeneratedCodeInfo[] { - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Health.V1.HealthCheckRequest), global::Grpc.Health.V1.HealthCheckRequest.Parser, new[]{ "Service" }, null, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Health.V1.HealthCheckResponse), global::Grpc.Health.V1.HealthCheckResponse.Parser, new[]{ "Status" }, null, new[]{ typeof(global::Grpc.Health.V1.HealthCheckResponse.Types.ServingStatus) }, null) + new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] { + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Health.V1.HealthCheckRequest), global::Grpc.Health.V1.HealthCheckRequest.Parser, new[]{ "Service" }, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Health.V1.HealthCheckResponse), global::Grpc.Health.V1.HealthCheckResponse.Parser, new[]{ "Status" }, null, new[]{ typeof(global::Grpc.Health.V1.HealthCheckResponse.Types.ServingStatus) }, null) })); } #endregion @@ -75,7 +75,7 @@ namespace Grpc.Health.V1 { public string Service { get { return service_; } set { - service_ = pb::Preconditions.CheckNotNull(value, "value"); + service_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); } } @@ -174,7 +174,7 @@ namespace Grpc.Health.V1 { /// <summary>Field number for the "status" field.</summary> public const int StatusFieldNumber = 1; - private global::Grpc.Health.V1.HealthCheckResponse.Types.ServingStatus status_ = global::Grpc.Health.V1.HealthCheckResponse.Types.ServingStatus.UNKNOWN; + private global::Grpc.Health.V1.HealthCheckResponse.Types.ServingStatus status_ = 0; public global::Grpc.Health.V1.HealthCheckResponse.Types.ServingStatus Status { get { return status_; } set { @@ -199,7 +199,7 @@ namespace Grpc.Health.V1 { public override int GetHashCode() { int hash = 1; - if (Status != global::Grpc.Health.V1.HealthCheckResponse.Types.ServingStatus.UNKNOWN) hash ^= Status.GetHashCode(); + if (Status != 0) hash ^= Status.GetHashCode(); return hash; } @@ -208,7 +208,7 @@ namespace Grpc.Health.V1 { } public void WriteTo(pb::CodedOutputStream output) { - if (Status != global::Grpc.Health.V1.HealthCheckResponse.Types.ServingStatus.UNKNOWN) { + if (Status != 0) { output.WriteRawTag(8); output.WriteEnum((int) Status); } @@ -216,7 +216,7 @@ namespace Grpc.Health.V1 { public int CalculateSize() { int size = 0; - if (Status != global::Grpc.Health.V1.HealthCheckResponse.Types.ServingStatus.UNKNOWN) { + if (Status != 0) { size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) Status); } return size; @@ -226,7 +226,7 @@ namespace Grpc.Health.V1 { if (other == null) { return; } - if (other.Status != global::Grpc.Health.V1.HealthCheckResponse.Types.ServingStatus.UNKNOWN) { + if (other.Status != 0) { Status = other.Status; } } @@ -251,9 +251,9 @@ namespace Grpc.Health.V1 { [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] public static partial class Types { public enum ServingStatus { - UNKNOWN = 0, - SERVING = 1, - NOT_SERVING = 2, + [pbr::OriginalName("UNKNOWN")] Unknown = 0, + [pbr::OriginalName("SERVING")] Serving = 1, + [pbr::OriginalName("NOT_SERVING")] NotServing = 2, } } diff --git a/src/csharp/Grpc.HealthCheck/HealthGrpc.cs b/src/csharp/Grpc.HealthCheck/HealthGrpc.cs index 967d1170bedfcdb2e8f0c9810fe640fd628eb2a9..51c6a39b1d8fa7bd1ea908fcaea3aa2222423127 100644 --- a/src/csharp/Grpc.HealthCheck/HealthGrpc.cs +++ b/src/csharp/Grpc.HealthCheck/HealthGrpc.cs @@ -72,13 +72,13 @@ namespace Grpc.Health.V1 { [System.Obsolete("Service implementations should inherit from the generated abstract base class instead.")] public interface IHealth { - Task<global::Grpc.Health.V1.HealthCheckResponse> Check(global::Grpc.Health.V1.HealthCheckRequest request, ServerCallContext context); + global::System.Threading.Tasks.Task<global::Grpc.Health.V1.HealthCheckResponse> Check(global::Grpc.Health.V1.HealthCheckRequest request, ServerCallContext context); } /// <summary>Base class for server-side implementations of Health</summary> public abstract class HealthBase { - public virtual Task<global::Grpc.Health.V1.HealthCheckResponse> Check(global::Grpc.Health.V1.HealthCheckRequest request, ServerCallContext context) + public virtual global::System.Threading.Tasks.Task<global::Grpc.Health.V1.HealthCheckResponse> Check(global::Grpc.Health.V1.HealthCheckRequest request, ServerCallContext context) { throw new RpcException(new Status(StatusCode.Unimplemented, "")); } diff --git a/src/csharp/Grpc.HealthCheck/packages.config b/src/csharp/Grpc.HealthCheck/packages.config index 358a978ba9168de3ae4e8cf5e3050a1656096dd9..a52d9e508ff85be1a1f516e5e7efff23ad6e55a2 100644 --- a/src/csharp/Grpc.HealthCheck/packages.config +++ b/src/csharp/Grpc.HealthCheck/packages.config @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <packages> - <package id="Google.Protobuf" version="3.0.0-beta2" targetFramework="net45" /> + <package id="Google.Protobuf" version="3.0.0-beta3" targetFramework="net45" /> <package id="Ix-Async" version="1.2.5" targetFramework="net45" /> </packages> \ No newline at end of file diff --git a/src/csharp/Grpc.IntegrationTesting/ClientRunners.cs b/src/csharp/Grpc.IntegrationTesting/ClientRunners.cs index b4572756f24df0a570b2fce978fd8e184cde075b..ed2092500a3ff5666877469478927e72fc2a78da 100644 --- a/src/csharp/Grpc.IntegrationTesting/ClientRunners.cs +++ b/src/csharp/Grpc.IntegrationTesting/ClientRunners.cs @@ -142,8 +142,7 @@ namespace Grpc.IntegrationTesting for (int i = 0; i < outstandingRpcsPerChannel; i++) { var timer = CreateTimer(loadParams, 1.0 / this.channels.Count / outstandingRpcsPerChannel); - var threadBody = GetThreadBody(channel, timer); - this.runnerTasks.Add(Task.Factory.StartNew(threadBody, TaskCreationOptions.LongRunning)); + this.runnerTasks.Add(RunClientAsync(channel, timer)); } } } @@ -269,38 +268,30 @@ namespace Grpc.IntegrationTesting } } - private Action GetThreadBody(Channel channel, IInterarrivalTimer timer) + private Task RunClientAsync(Channel channel, IInterarrivalTimer timer) { if (payloadConfig.PayloadCase == PayloadConfig.PayloadOneofCase.BytebufParams) { - GrpcPreconditions.CheckArgument(clientType == ClientType.ASYNC_CLIENT, "Generic client only supports async API"); - GrpcPreconditions.CheckArgument(rpcType == RpcType.STREAMING, "Generic client only supports streaming calls"); - return () => - { - RunGenericStreamingAsync(channel, timer).Wait(); - }; + GrpcPreconditions.CheckArgument(clientType == ClientType.AsyncClient, "Generic client only supports async API"); + GrpcPreconditions.CheckArgument(rpcType == RpcType.Streaming, "Generic client only supports streaming calls"); + return RunGenericStreamingAsync(channel, timer); } GrpcPreconditions.CheckNotNull(payloadConfig.SimpleParams); - if (clientType == ClientType.SYNC_CLIENT) + if (clientType == ClientType.SyncClient) { - GrpcPreconditions.CheckArgument(rpcType == RpcType.UNARY, "Sync client can only be used for Unary calls in C#"); - return () => RunUnary(channel, timer); + GrpcPreconditions.CheckArgument(rpcType == RpcType.Unary, "Sync client can only be used for Unary calls in C#"); + // create a dedicated thread for the synchronous client + return Task.Factory.StartNew(() => RunUnary(channel, timer), TaskCreationOptions.LongRunning); } - else if (clientType == ClientType.ASYNC_CLIENT) + else if (clientType == ClientType.AsyncClient) { switch (rpcType) { - case RpcType.UNARY: - return () => - { - RunUnaryAsync(channel, timer).Wait(); - }; - case RpcType.STREAMING: - return () => - { - RunStreamingPingPongAsync(channel, timer).Wait(); - }; + case RpcType.Unary: + return RunUnaryAsync(channel, timer); + case RpcType.Streaming: + return RunStreamingPingPongAsync(channel, timer); } } throw new ArgumentException("Unsupported configuration."); diff --git a/src/csharp/Grpc.IntegrationTesting/Control.cs b/src/csharp/Grpc.IntegrationTesting/Control.cs index 3fa8d43f3811ee5768a1a18ea1313b4825f49945..412f800ff9e286617f98637990e6c014dab506f3 100644 --- a/src/csharp/Grpc.IntegrationTesting/Control.cs +++ b/src/csharp/Grpc.IntegrationTesting/Control.cs @@ -85,25 +85,25 @@ namespace Grpc.Testing { "RUFNSU5HEAFiBnByb3RvMw==")); descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, new pbr::FileDescriptor[] { global::Grpc.Testing.PayloadsReflection.Descriptor, global::Grpc.Testing.StatsReflection.Descriptor, }, - new pbr::GeneratedCodeInfo(new[] {typeof(global::Grpc.Testing.ClientType), typeof(global::Grpc.Testing.ServerType), typeof(global::Grpc.Testing.RpcType), }, new pbr::GeneratedCodeInfo[] { - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.PoissonParams), global::Grpc.Testing.PoissonParams.Parser, new[]{ "OfferedLoad" }, null, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.ClosedLoopParams), global::Grpc.Testing.ClosedLoopParams.Parser, null, null, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.LoadParams), global::Grpc.Testing.LoadParams.Parser, new[]{ "ClosedLoop", "Poisson" }, new[]{ "Load" }, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.SecurityParams), global::Grpc.Testing.SecurityParams.Parser, new[]{ "UseTestCa", "ServerHostOverride" }, null, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.ClientConfig), global::Grpc.Testing.ClientConfig.Parser, new[]{ "ServerTargets", "ClientType", "SecurityParams", "OutstandingRpcsPerChannel", "ClientChannels", "AsyncClientThreads", "RpcType", "LoadParams", "PayloadConfig", "HistogramParams", "CoreList", "CoreLimit", "OtherClientApi" }, null, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.ClientStatus), global::Grpc.Testing.ClientStatus.Parser, new[]{ "Stats" }, null, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.Mark), global::Grpc.Testing.Mark.Parser, new[]{ "Reset" }, null, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.ClientArgs), global::Grpc.Testing.ClientArgs.Parser, new[]{ "Setup", "Mark" }, new[]{ "Argtype" }, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.ServerConfig), global::Grpc.Testing.ServerConfig.Parser, new[]{ "ServerType", "SecurityParams", "Port", "AsyncServerThreads", "CoreLimit", "PayloadConfig", "CoreList", "OtherServerApi" }, null, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.ServerArgs), global::Grpc.Testing.ServerArgs.Parser, new[]{ "Setup", "Mark" }, new[]{ "Argtype" }, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.ServerStatus), global::Grpc.Testing.ServerStatus.Parser, new[]{ "Stats", "Port", "Cores" }, null, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.CoreRequest), global::Grpc.Testing.CoreRequest.Parser, null, null, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.CoreResponse), global::Grpc.Testing.CoreResponse.Parser, new[]{ "Cores" }, null, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.Void), global::Grpc.Testing.Void.Parser, null, null, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.Scenario), global::Grpc.Testing.Scenario.Parser, new[]{ "Name", "ClientConfig", "NumClients", "ServerConfig", "NumServers", "WarmupSeconds", "BenchmarkSeconds", "SpawnLocalWorkerCount" }, null, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.Scenarios), global::Grpc.Testing.Scenarios.Parser, new[]{ "Scenarios_" }, null, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.ScenarioResultSummary), global::Grpc.Testing.ScenarioResultSummary.Parser, new[]{ "Qps", "QpsPerServerCore", "ServerSystemTime", "ServerUserTime", "ClientSystemTime", "ClientUserTime", "Latency50", "Latency90", "Latency95", "Latency99", "Latency999" }, null, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.ScenarioResult), global::Grpc.Testing.ScenarioResult.Parser, new[]{ "Scenario", "Latencies", "ClientStats", "ServerStats", "ServerCores", "Summary" }, null, null, null) + new pbr::GeneratedClrTypeInfo(new[] {typeof(global::Grpc.Testing.ClientType), typeof(global::Grpc.Testing.ServerType), typeof(global::Grpc.Testing.RpcType), }, new pbr::GeneratedClrTypeInfo[] { + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.PoissonParams), global::Grpc.Testing.PoissonParams.Parser, new[]{ "OfferedLoad" }, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.ClosedLoopParams), global::Grpc.Testing.ClosedLoopParams.Parser, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.LoadParams), global::Grpc.Testing.LoadParams.Parser, new[]{ "ClosedLoop", "Poisson" }, new[]{ "Load" }, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.SecurityParams), global::Grpc.Testing.SecurityParams.Parser, new[]{ "UseTestCa", "ServerHostOverride" }, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.ClientConfig), global::Grpc.Testing.ClientConfig.Parser, new[]{ "ServerTargets", "ClientType", "SecurityParams", "OutstandingRpcsPerChannel", "ClientChannels", "AsyncClientThreads", "RpcType", "LoadParams", "PayloadConfig", "HistogramParams", "CoreList", "CoreLimit", "OtherClientApi" }, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.ClientStatus), global::Grpc.Testing.ClientStatus.Parser, new[]{ "Stats" }, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.Mark), global::Grpc.Testing.Mark.Parser, new[]{ "Reset" }, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.ClientArgs), global::Grpc.Testing.ClientArgs.Parser, new[]{ "Setup", "Mark" }, new[]{ "Argtype" }, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.ServerConfig), global::Grpc.Testing.ServerConfig.Parser, new[]{ "ServerType", "SecurityParams", "Port", "AsyncServerThreads", "CoreLimit", "PayloadConfig", "CoreList", "OtherServerApi" }, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.ServerArgs), global::Grpc.Testing.ServerArgs.Parser, new[]{ "Setup", "Mark" }, new[]{ "Argtype" }, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.ServerStatus), global::Grpc.Testing.ServerStatus.Parser, new[]{ "Stats", "Port", "Cores" }, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.CoreRequest), global::Grpc.Testing.CoreRequest.Parser, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.CoreResponse), global::Grpc.Testing.CoreResponse.Parser, new[]{ "Cores" }, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.Void), global::Grpc.Testing.Void.Parser, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.Scenario), global::Grpc.Testing.Scenario.Parser, new[]{ "Name", "ClientConfig", "NumClients", "ServerConfig", "NumServers", "WarmupSeconds", "BenchmarkSeconds", "SpawnLocalWorkerCount" }, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.Scenarios), global::Grpc.Testing.Scenarios.Parser, new[]{ "Scenarios_" }, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.ScenarioResultSummary), global::Grpc.Testing.ScenarioResultSummary.Parser, new[]{ "Qps", "QpsPerServerCore", "ServerSystemTime", "ServerUserTime", "ClientSystemTime", "ClientUserTime", "Latency50", "Latency90", "Latency95", "Latency99", "Latency999" }, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.ScenarioResult), global::Grpc.Testing.ScenarioResult.Parser, new[]{ "Scenario", "Latencies", "ClientStats", "ServerStats", "ServerCores", "Summary" }, null, null, null) })); } #endregion @@ -115,27 +115,27 @@ namespace Grpc.Testing { /// Many languages support a basic distinction between using /// sync or async client, and this allows the specification /// </summary> - SYNC_CLIENT = 0, - ASYNC_CLIENT = 1, + [pbr::OriginalName("SYNC_CLIENT")] SyncClient = 0, + [pbr::OriginalName("ASYNC_CLIENT")] AsyncClient = 1, /// <summary> /// used for some language-specific variants /// </summary> - OTHER_CLIENT = 2, + [pbr::OriginalName("OTHER_CLIENT")] OtherClient = 2, } public enum ServerType { - SYNC_SERVER = 0, - ASYNC_SERVER = 1, - ASYNC_GENERIC_SERVER = 2, + [pbr::OriginalName("SYNC_SERVER")] SyncServer = 0, + [pbr::OriginalName("ASYNC_SERVER")] AsyncServer = 1, + [pbr::OriginalName("ASYNC_GENERIC_SERVER")] AsyncGenericServer = 2, /// <summary> /// used for some language-specific variants /// </summary> - OTHER_SERVER = 3, + [pbr::OriginalName("OTHER_SERVER")] OtherServer = 3, } public enum RpcType { - UNARY = 0, - STREAMING = 1, + [pbr::OriginalName("UNARY")] Unary = 0, + [pbr::OriginalName("STREAMING")] Streaming = 1, } #endregion @@ -547,7 +547,7 @@ namespace Grpc.Testing { public string ServerHostOverride { get { return serverHostOverride_; } set { - serverHostOverride_ = pb::Preconditions.CheckNotNull(value, "value"); + serverHostOverride_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); } } @@ -686,7 +686,7 @@ namespace Grpc.Testing { /// <summary>Field number for the "client_type" field.</summary> public const int ClientTypeFieldNumber = 2; - private global::Grpc.Testing.ClientType clientType_ = global::Grpc.Testing.ClientType.SYNC_CLIENT; + private global::Grpc.Testing.ClientType clientType_ = 0; public global::Grpc.Testing.ClientType ClientType { get { return clientType_; } set { @@ -747,7 +747,7 @@ namespace Grpc.Testing { /// <summary>Field number for the "rpc_type" field.</summary> public const int RpcTypeFieldNumber = 8; - private global::Grpc.Testing.RpcType rpcType_ = global::Grpc.Testing.RpcType.UNARY; + private global::Grpc.Testing.RpcType rpcType_ = 0; public global::Grpc.Testing.RpcType RpcType { get { return rpcType_; } set { @@ -819,7 +819,7 @@ namespace Grpc.Testing { public string OtherClientApi { get { return otherClientApi_; } set { - otherClientApi_ = pb::Preconditions.CheckNotNull(value, "value"); + otherClientApi_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); } } @@ -853,12 +853,12 @@ namespace Grpc.Testing { public override int GetHashCode() { int hash = 1; hash ^= serverTargets_.GetHashCode(); - if (ClientType != global::Grpc.Testing.ClientType.SYNC_CLIENT) hash ^= ClientType.GetHashCode(); + if (ClientType != 0) hash ^= ClientType.GetHashCode(); if (securityParams_ != null) hash ^= SecurityParams.GetHashCode(); if (OutstandingRpcsPerChannel != 0) hash ^= OutstandingRpcsPerChannel.GetHashCode(); if (ClientChannels != 0) hash ^= ClientChannels.GetHashCode(); if (AsyncClientThreads != 0) hash ^= AsyncClientThreads.GetHashCode(); - if (RpcType != global::Grpc.Testing.RpcType.UNARY) hash ^= RpcType.GetHashCode(); + if (RpcType != 0) hash ^= RpcType.GetHashCode(); if (loadParams_ != null) hash ^= LoadParams.GetHashCode(); if (payloadConfig_ != null) hash ^= PayloadConfig.GetHashCode(); if (histogramParams_ != null) hash ^= HistogramParams.GetHashCode(); @@ -874,7 +874,7 @@ namespace Grpc.Testing { public void WriteTo(pb::CodedOutputStream output) { serverTargets_.WriteTo(output, _repeated_serverTargets_codec); - if (ClientType != global::Grpc.Testing.ClientType.SYNC_CLIENT) { + if (ClientType != 0) { output.WriteRawTag(16); output.WriteEnum((int) ClientType); } @@ -894,7 +894,7 @@ namespace Grpc.Testing { output.WriteRawTag(56); output.WriteInt32(AsyncClientThreads); } - if (RpcType != global::Grpc.Testing.RpcType.UNARY) { + if (RpcType != 0) { output.WriteRawTag(64); output.WriteEnum((int) RpcType); } @@ -924,7 +924,7 @@ namespace Grpc.Testing { public int CalculateSize() { int size = 0; size += serverTargets_.CalculateSize(_repeated_serverTargets_codec); - if (ClientType != global::Grpc.Testing.ClientType.SYNC_CLIENT) { + if (ClientType != 0) { size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) ClientType); } if (securityParams_ != null) { @@ -939,7 +939,7 @@ namespace Grpc.Testing { if (AsyncClientThreads != 0) { size += 1 + pb::CodedOutputStream.ComputeInt32Size(AsyncClientThreads); } - if (RpcType != global::Grpc.Testing.RpcType.UNARY) { + if (RpcType != 0) { size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) RpcType); } if (loadParams_ != null) { @@ -966,7 +966,7 @@ namespace Grpc.Testing { return; } serverTargets_.Add(other.serverTargets_); - if (other.ClientType != global::Grpc.Testing.ClientType.SYNC_CLIENT) { + if (other.ClientType != 0) { ClientType = other.ClientType; } if (other.securityParams_ != null) { @@ -984,7 +984,7 @@ namespace Grpc.Testing { if (other.AsyncClientThreads != 0) { AsyncClientThreads = other.AsyncClientThreads; } - if (other.RpcType != global::Grpc.Testing.RpcType.UNARY) { + if (other.RpcType != 0) { RpcType = other.RpcType; } if (other.loadParams_ != null) { @@ -1515,7 +1515,7 @@ namespace Grpc.Testing { /// <summary>Field number for the "server_type" field.</summary> public const int ServerTypeFieldNumber = 1; - private global::Grpc.Testing.ServerType serverType_ = global::Grpc.Testing.ServerType.SYNC_SERVER; + private global::Grpc.Testing.ServerType serverType_ = 0; public global::Grpc.Testing.ServerType ServerType { get { return serverType_; } set { @@ -1606,7 +1606,7 @@ namespace Grpc.Testing { public string OtherServerApi { get { return otherServerApi_; } set { - otherServerApi_ = pb::Preconditions.CheckNotNull(value, "value"); + otherServerApi_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); } } @@ -1634,7 +1634,7 @@ namespace Grpc.Testing { public override int GetHashCode() { int hash = 1; - if (ServerType != global::Grpc.Testing.ServerType.SYNC_SERVER) hash ^= ServerType.GetHashCode(); + if (ServerType != 0) hash ^= ServerType.GetHashCode(); if (securityParams_ != null) hash ^= SecurityParams.GetHashCode(); if (Port != 0) hash ^= Port.GetHashCode(); if (AsyncServerThreads != 0) hash ^= AsyncServerThreads.GetHashCode(); @@ -1650,7 +1650,7 @@ namespace Grpc.Testing { } public void WriteTo(pb::CodedOutputStream output) { - if (ServerType != global::Grpc.Testing.ServerType.SYNC_SERVER) { + if (ServerType != 0) { output.WriteRawTag(8); output.WriteEnum((int) ServerType); } @@ -1683,7 +1683,7 @@ namespace Grpc.Testing { public int CalculateSize() { int size = 0; - if (ServerType != global::Grpc.Testing.ServerType.SYNC_SERVER) { + if (ServerType != 0) { size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) ServerType); } if (securityParams_ != null) { @@ -1712,7 +1712,7 @@ namespace Grpc.Testing { if (other == null) { return; } - if (other.ServerType != global::Grpc.Testing.ServerType.SYNC_SERVER) { + if (other.ServerType != 0) { ServerType = other.ServerType; } if (other.securityParams_ != null) { @@ -2436,7 +2436,7 @@ namespace Grpc.Testing { public string Name { get { return name_; } set { - name_ = pb::Preconditions.CheckNotNull(value, "value"); + name_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); } } diff --git a/src/csharp/Grpc.IntegrationTesting/Empty.cs b/src/csharp/Grpc.IntegrationTesting/Empty.cs index 4323c5a09f29f700e90bf92f7da1dfab6ed5da3c..cf1c23fb0fe2dc306f58a5341b3282efb282949e 100644 --- a/src/csharp/Grpc.IntegrationTesting/Empty.cs +++ b/src/csharp/Grpc.IntegrationTesting/Empty.cs @@ -27,8 +27,8 @@ namespace Grpc.Testing { "c3RpbmciBwoFRW1wdHliBnByb3RvMw==")); descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, new pbr::FileDescriptor[] { }, - new pbr::GeneratedCodeInfo(null, new pbr::GeneratedCodeInfo[] { - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.Empty), global::Grpc.Testing.Empty.Parser, null, null, null, null) + new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] { + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.Empty), global::Grpc.Testing.Empty.Parser, null, null, null, null) })); } #endregion diff --git a/src/csharp/Grpc.IntegrationTesting/Grpc.IntegrationTesting.csproj b/src/csharp/Grpc.IntegrationTesting/Grpc.IntegrationTesting.csproj index 9685cf18377234eb2aa2417259ef50e20be852e8..008904940884a2257695f30ef79bd3cb95c58836 100644 --- a/src/csharp/Grpc.IntegrationTesting/Grpc.IntegrationTesting.csproj +++ b/src/csharp/Grpc.IntegrationTesting/Grpc.IntegrationTesting.csproj @@ -61,7 +61,7 @@ <HintPath>..\packages\Google.Apis.Core.1.11.1\lib\net45\Google.Apis.Core.dll</HintPath> </Reference> <Reference Include="Google.Protobuf"> - <HintPath>..\packages\Google.Protobuf.3.0.0-beta2\lib\portable-net45+netcore45+wpa81+wp8\Google.Protobuf.dll</HintPath> + <HintPath>..\packages\Google.Protobuf.3.0.0-beta3\lib\portable-net45+netcore45+wpa81+wp8\Google.Protobuf.dll</HintPath> </Reference> <Reference Include="Newtonsoft.Json"> <HintPath>..\packages\Newtonsoft.Json.7.0.1\lib\net45\Newtonsoft.Json.dll</HintPath> diff --git a/src/csharp/Grpc.IntegrationTesting/InteropClient.cs b/src/csharp/Grpc.IntegrationTesting/InteropClient.cs index b3b1abf1bcaaa71a96d16fdced4b3acb75aaea44..1541cfd7bb1acdf2dafdf9356cfe8e262f3b1513 100644 --- a/src/csharp/Grpc.IntegrationTesting/InteropClient.cs +++ b/src/csharp/Grpc.IntegrationTesting/InteropClient.cs @@ -230,13 +230,13 @@ namespace Grpc.IntegrationTesting Console.WriteLine("running large_unary"); var request = new SimpleRequest { - ResponseType = PayloadType.COMPRESSABLE, + ResponseType = PayloadType.Compressable, ResponseSize = 314159, Payload = CreateZerosPayload(271828) }; var response = client.UnaryCall(request); - Assert.AreEqual(PayloadType.COMPRESSABLE, response.Payload.Type); + Assert.AreEqual(PayloadType.Compressable, response.Payload.Type); Assert.AreEqual(314159, response.Payload.Body.Length); Console.WriteLine("Passed!"); } @@ -265,7 +265,7 @@ namespace Grpc.IntegrationTesting var request = new StreamingOutputCallRequest { - ResponseType = PayloadType.COMPRESSABLE, + ResponseType = PayloadType.Compressable, ResponseParameters = { bodySizes.ConvertAll((size) => new ResponseParameters { Size = size }) } }; @@ -274,7 +274,7 @@ namespace Grpc.IntegrationTesting var responseList = await call.ResponseStream.ToListAsync(); foreach (var res in responseList) { - Assert.AreEqual(PayloadType.COMPRESSABLE, res.Payload.Type); + Assert.AreEqual(PayloadType.Compressable, res.Payload.Type); } CollectionAssert.AreEqual(bodySizes, responseList.ConvertAll((item) => item.Payload.Body.Length)); } @@ -289,46 +289,46 @@ namespace Grpc.IntegrationTesting { await call.RequestStream.WriteAsync(new StreamingOutputCallRequest { - ResponseType = PayloadType.COMPRESSABLE, + ResponseType = PayloadType.Compressable, ResponseParameters = { new ResponseParameters { Size = 31415 } }, Payload = CreateZerosPayload(27182) }); Assert.IsTrue(await call.ResponseStream.MoveNext()); - Assert.AreEqual(PayloadType.COMPRESSABLE, call.ResponseStream.Current.Payload.Type); + Assert.AreEqual(PayloadType.Compressable, call.ResponseStream.Current.Payload.Type); Assert.AreEqual(31415, call.ResponseStream.Current.Payload.Body.Length); await call.RequestStream.WriteAsync(new StreamingOutputCallRequest { - ResponseType = PayloadType.COMPRESSABLE, + ResponseType = PayloadType.Compressable, ResponseParameters = { new ResponseParameters { Size = 9 } }, Payload = CreateZerosPayload(8) }); Assert.IsTrue(await call.ResponseStream.MoveNext()); - Assert.AreEqual(PayloadType.COMPRESSABLE, call.ResponseStream.Current.Payload.Type); + Assert.AreEqual(PayloadType.Compressable, call.ResponseStream.Current.Payload.Type); Assert.AreEqual(9, call.ResponseStream.Current.Payload.Body.Length); await call.RequestStream.WriteAsync(new StreamingOutputCallRequest { - ResponseType = PayloadType.COMPRESSABLE, + ResponseType = PayloadType.Compressable, ResponseParameters = { new ResponseParameters { Size = 2653 } }, Payload = CreateZerosPayload(1828) }); Assert.IsTrue(await call.ResponseStream.MoveNext()); - Assert.AreEqual(PayloadType.COMPRESSABLE, call.ResponseStream.Current.Payload.Type); + Assert.AreEqual(PayloadType.Compressable, call.ResponseStream.Current.Payload.Type); Assert.AreEqual(2653, call.ResponseStream.Current.Payload.Body.Length); await call.RequestStream.WriteAsync(new StreamingOutputCallRequest { - ResponseType = PayloadType.COMPRESSABLE, + ResponseType = PayloadType.Compressable, ResponseParameters = { new ResponseParameters { Size = 58979 } }, Payload = CreateZerosPayload(45904) }); Assert.IsTrue(await call.ResponseStream.MoveNext()); - Assert.AreEqual(PayloadType.COMPRESSABLE, call.ResponseStream.Current.Payload.Type); + Assert.AreEqual(PayloadType.Compressable, call.ResponseStream.Current.Payload.Type); Assert.AreEqual(58979, call.ResponseStream.Current.Payload.Body.Length); await call.RequestStream.CompleteAsync(); @@ -357,7 +357,7 @@ namespace Grpc.IntegrationTesting var request = new SimpleRequest { - ResponseType = PayloadType.COMPRESSABLE, + ResponseType = PayloadType.Compressable, ResponseSize = 314159, Payload = CreateZerosPayload(271828), FillUsername = true, @@ -367,7 +367,7 @@ namespace Grpc.IntegrationTesting // not setting credentials here because they were set on channel already var response = client.UnaryCall(request); - Assert.AreEqual(PayloadType.COMPRESSABLE, response.Payload.Type); + Assert.AreEqual(PayloadType.Compressable, response.Payload.Type); Assert.AreEqual(314159, response.Payload.Body.Length); Assert.False(string.IsNullOrEmpty(response.OauthScope)); Assert.True(oauthScope.Contains(response.OauthScope)); @@ -381,7 +381,7 @@ namespace Grpc.IntegrationTesting var request = new SimpleRequest { - ResponseType = PayloadType.COMPRESSABLE, + ResponseType = PayloadType.Compressable, ResponseSize = 314159, Payload = CreateZerosPayload(271828), FillUsername = true, @@ -390,7 +390,7 @@ namespace Grpc.IntegrationTesting // not setting credentials here because they were set on channel already var response = client.UnaryCall(request); - Assert.AreEqual(PayloadType.COMPRESSABLE, response.Payload.Type); + Assert.AreEqual(PayloadType.Compressable, response.Payload.Type); Assert.AreEqual(314159, response.Payload.Body.Length); Assert.AreEqual(GetEmailFromServiceAccountFile(), response.Username); Console.WriteLine("Passed!"); @@ -460,13 +460,13 @@ namespace Grpc.IntegrationTesting { await call.RequestStream.WriteAsync(new StreamingOutputCallRequest { - ResponseType = PayloadType.COMPRESSABLE, + ResponseType = PayloadType.Compressable, ResponseParameters = { new ResponseParameters { Size = 31415 } }, Payload = CreateZerosPayload(27182) }); Assert.IsTrue(await call.ResponseStream.MoveNext()); - Assert.AreEqual(PayloadType.COMPRESSABLE, call.ResponseStream.Current.Payload.Type); + Assert.AreEqual(PayloadType.Compressable, call.ResponseStream.Current.Payload.Type); Assert.AreEqual(31415, call.ResponseStream.Current.Payload.Body.Length); cts.Cancel(); @@ -492,6 +492,10 @@ namespace Grpc.IntegrationTesting { // Deadline was reached before write has started. Eat the exception and continue. } + catch (RpcException) + { + // Deadline was reached before write has started. Eat the exception and continue. + } var ex = Assert.ThrowsAsync<RpcException>(async () => await call.ResponseStream.MoveNext()); // We can't guarantee the status code always DeadlineExceeded. See issue #2685. @@ -507,7 +511,7 @@ namespace Grpc.IntegrationTesting // step 1: test unary call var request = new SimpleRequest { - ResponseType = PayloadType.COMPRESSABLE, + ResponseType = PayloadType.Compressable, ResponseSize = 314159, Payload = CreateZerosPayload(271828) }; @@ -526,7 +530,7 @@ namespace Grpc.IntegrationTesting // step 2: test full duplex call var request = new StreamingOutputCallRequest { - ResponseType = PayloadType.COMPRESSABLE, + ResponseType = PayloadType.Compressable, ResponseParameters = { new ResponseParameters { Size = 31415 } }, Payload = CreateZerosPayload(27182) }; diff --git a/src/csharp/Grpc.IntegrationTesting/Messages.cs b/src/csharp/Grpc.IntegrationTesting/Messages.cs index fcff4759417ec61d2a0cabfe0464436fd14119b9..d42501aa5b8ca350e40b94f6cb361687d5e269e2 100644 --- a/src/csharp/Grpc.IntegrationTesting/Messages.cs +++ b/src/csharp/Grpc.IntegrationTesting/Messages.cs @@ -55,18 +55,18 @@ namespace Grpc.Testing { "TkUQABIICgRHWklQEAESCwoHREVGTEFURRACYgZwcm90bzM=")); descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, new pbr::FileDescriptor[] { }, - new pbr::GeneratedCodeInfo(new[] {typeof(global::Grpc.Testing.PayloadType), typeof(global::Grpc.Testing.CompressionType), }, new pbr::GeneratedCodeInfo[] { - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.Payload), global::Grpc.Testing.Payload.Parser, new[]{ "Type", "Body" }, null, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.EchoStatus), global::Grpc.Testing.EchoStatus.Parser, new[]{ "Code", "Message" }, null, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.SimpleRequest), global::Grpc.Testing.SimpleRequest.Parser, new[]{ "ResponseType", "ResponseSize", "Payload", "FillUsername", "FillOauthScope", "ResponseCompression", "ResponseStatus" }, null, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.SimpleResponse), global::Grpc.Testing.SimpleResponse.Parser, new[]{ "Payload", "Username", "OauthScope" }, null, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.StreamingInputCallRequest), global::Grpc.Testing.StreamingInputCallRequest.Parser, new[]{ "Payload" }, null, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.StreamingInputCallResponse), global::Grpc.Testing.StreamingInputCallResponse.Parser, new[]{ "AggregatedPayloadSize" }, null, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.ResponseParameters), global::Grpc.Testing.ResponseParameters.Parser, new[]{ "Size", "IntervalUs" }, null, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.StreamingOutputCallRequest), global::Grpc.Testing.StreamingOutputCallRequest.Parser, new[]{ "ResponseType", "ResponseParameters", "Payload", "ResponseCompression", "ResponseStatus" }, null, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.StreamingOutputCallResponse), global::Grpc.Testing.StreamingOutputCallResponse.Parser, new[]{ "Payload" }, null, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.ReconnectParams), global::Grpc.Testing.ReconnectParams.Parser, new[]{ "MaxReconnectBackoffMs" }, null, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.ReconnectInfo), global::Grpc.Testing.ReconnectInfo.Parser, new[]{ "Passed", "BackoffMs" }, null, null, null) + new pbr::GeneratedClrTypeInfo(new[] {typeof(global::Grpc.Testing.PayloadType), typeof(global::Grpc.Testing.CompressionType), }, new pbr::GeneratedClrTypeInfo[] { + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.Payload), global::Grpc.Testing.Payload.Parser, new[]{ "Type", "Body" }, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.EchoStatus), global::Grpc.Testing.EchoStatus.Parser, new[]{ "Code", "Message" }, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.SimpleRequest), global::Grpc.Testing.SimpleRequest.Parser, new[]{ "ResponseType", "ResponseSize", "Payload", "FillUsername", "FillOauthScope", "ResponseCompression", "ResponseStatus" }, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.SimpleResponse), global::Grpc.Testing.SimpleResponse.Parser, new[]{ "Payload", "Username", "OauthScope" }, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.StreamingInputCallRequest), global::Grpc.Testing.StreamingInputCallRequest.Parser, new[]{ "Payload" }, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.StreamingInputCallResponse), global::Grpc.Testing.StreamingInputCallResponse.Parser, new[]{ "AggregatedPayloadSize" }, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.ResponseParameters), global::Grpc.Testing.ResponseParameters.Parser, new[]{ "Size", "IntervalUs" }, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.StreamingOutputCallRequest), global::Grpc.Testing.StreamingOutputCallRequest.Parser, new[]{ "ResponseType", "ResponseParameters", "Payload", "ResponseCompression", "ResponseStatus" }, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.StreamingOutputCallResponse), global::Grpc.Testing.StreamingOutputCallResponse.Parser, new[]{ "Payload" }, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.ReconnectParams), global::Grpc.Testing.ReconnectParams.Parser, new[]{ "MaxReconnectBackoffMs" }, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.ReconnectInfo), global::Grpc.Testing.ReconnectInfo.Parser, new[]{ "Passed", "BackoffMs" }, null, null, null) })); } #endregion @@ -80,15 +80,15 @@ namespace Grpc.Testing { /// <summary> /// Compressable text format. /// </summary> - COMPRESSABLE = 0, + [pbr::OriginalName("COMPRESSABLE")] Compressable = 0, /// <summary> /// Uncompressable binary format. /// </summary> - UNCOMPRESSABLE = 1, + [pbr::OriginalName("UNCOMPRESSABLE")] Uncompressable = 1, /// <summary> /// Randomly chosen from all other formats defined in this enum. /// </summary> - RANDOM = 2, + [pbr::OriginalName("RANDOM")] Random = 2, } /// <summary> @@ -98,9 +98,9 @@ namespace Grpc.Testing { /// <summary> /// No compression /// </summary> - NONE = 0, - GZIP = 1, - DEFLATE = 2, + [pbr::OriginalName("NONE")] None = 0, + [pbr::OriginalName("GZIP")] Gzip = 1, + [pbr::OriginalName("DEFLATE")] Deflate = 2, } #endregion @@ -139,7 +139,7 @@ namespace Grpc.Testing { /// <summary>Field number for the "type" field.</summary> public const int TypeFieldNumber = 1; - private global::Grpc.Testing.PayloadType type_ = global::Grpc.Testing.PayloadType.COMPRESSABLE; + private global::Grpc.Testing.PayloadType type_ = 0; /// <summary> /// The type of data in body. /// </summary> @@ -159,7 +159,7 @@ namespace Grpc.Testing { public pb::ByteString Body { get { return body_; } set { - body_ = pb::Preconditions.CheckNotNull(value, "value"); + body_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); } } @@ -181,7 +181,7 @@ namespace Grpc.Testing { public override int GetHashCode() { int hash = 1; - if (Type != global::Grpc.Testing.PayloadType.COMPRESSABLE) hash ^= Type.GetHashCode(); + if (Type != 0) hash ^= Type.GetHashCode(); if (Body.Length != 0) hash ^= Body.GetHashCode(); return hash; } @@ -191,7 +191,7 @@ namespace Grpc.Testing { } public void WriteTo(pb::CodedOutputStream output) { - if (Type != global::Grpc.Testing.PayloadType.COMPRESSABLE) { + if (Type != 0) { output.WriteRawTag(8); output.WriteEnum((int) Type); } @@ -203,7 +203,7 @@ namespace Grpc.Testing { public int CalculateSize() { int size = 0; - if (Type != global::Grpc.Testing.PayloadType.COMPRESSABLE) { + if (Type != 0) { size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) Type); } if (Body.Length != 0) { @@ -216,7 +216,7 @@ namespace Grpc.Testing { if (other == null) { return; } - if (other.Type != global::Grpc.Testing.PayloadType.COMPRESSABLE) { + if (other.Type != 0) { Type = other.Type; } if (other.Body.Length != 0) { @@ -293,7 +293,7 @@ namespace Grpc.Testing { public string Message { get { return message_; } set { - message_ = pb::Preconditions.CheckNotNull(value, "value"); + message_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); } } @@ -417,7 +417,7 @@ namespace Grpc.Testing { /// <summary>Field number for the "response_type" field.</summary> public const int ResponseTypeFieldNumber = 1; - private global::Grpc.Testing.PayloadType responseType_ = global::Grpc.Testing.PayloadType.COMPRESSABLE; + private global::Grpc.Testing.PayloadType responseType_ = 0; /// <summary> /// Desired payload type in the response from the server. /// If response_type is RANDOM, server randomly chooses one from other formats. @@ -484,7 +484,7 @@ namespace Grpc.Testing { /// <summary>Field number for the "response_compression" field.</summary> public const int ResponseCompressionFieldNumber = 6; - private global::Grpc.Testing.CompressionType responseCompression_ = global::Grpc.Testing.CompressionType.NONE; + private global::Grpc.Testing.CompressionType responseCompression_ = 0; /// <summary> /// Compression algorithm to be used by the server for the response (stream) /// </summary> @@ -531,12 +531,12 @@ namespace Grpc.Testing { public override int GetHashCode() { int hash = 1; - if (ResponseType != global::Grpc.Testing.PayloadType.COMPRESSABLE) hash ^= ResponseType.GetHashCode(); + if (ResponseType != 0) hash ^= ResponseType.GetHashCode(); if (ResponseSize != 0) hash ^= ResponseSize.GetHashCode(); if (payload_ != null) hash ^= Payload.GetHashCode(); if (FillUsername != false) hash ^= FillUsername.GetHashCode(); if (FillOauthScope != false) hash ^= FillOauthScope.GetHashCode(); - if (ResponseCompression != global::Grpc.Testing.CompressionType.NONE) hash ^= ResponseCompression.GetHashCode(); + if (ResponseCompression != 0) hash ^= ResponseCompression.GetHashCode(); if (responseStatus_ != null) hash ^= ResponseStatus.GetHashCode(); return hash; } @@ -546,7 +546,7 @@ namespace Grpc.Testing { } public void WriteTo(pb::CodedOutputStream output) { - if (ResponseType != global::Grpc.Testing.PayloadType.COMPRESSABLE) { + if (ResponseType != 0) { output.WriteRawTag(8); output.WriteEnum((int) ResponseType); } @@ -566,7 +566,7 @@ namespace Grpc.Testing { output.WriteRawTag(40); output.WriteBool(FillOauthScope); } - if (ResponseCompression != global::Grpc.Testing.CompressionType.NONE) { + if (ResponseCompression != 0) { output.WriteRawTag(48); output.WriteEnum((int) ResponseCompression); } @@ -578,7 +578,7 @@ namespace Grpc.Testing { public int CalculateSize() { int size = 0; - if (ResponseType != global::Grpc.Testing.PayloadType.COMPRESSABLE) { + if (ResponseType != 0) { size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) ResponseType); } if (ResponseSize != 0) { @@ -593,7 +593,7 @@ namespace Grpc.Testing { if (FillOauthScope != false) { size += 1 + 1; } - if (ResponseCompression != global::Grpc.Testing.CompressionType.NONE) { + if (ResponseCompression != 0) { size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) ResponseCompression); } if (responseStatus_ != null) { @@ -606,7 +606,7 @@ namespace Grpc.Testing { if (other == null) { return; } - if (other.ResponseType != global::Grpc.Testing.PayloadType.COMPRESSABLE) { + if (other.ResponseType != 0) { ResponseType = other.ResponseType; } if (other.ResponseSize != 0) { @@ -624,7 +624,7 @@ namespace Grpc.Testing { if (other.FillOauthScope != false) { FillOauthScope = other.FillOauthScope; } - if (other.ResponseCompression != global::Grpc.Testing.CompressionType.NONE) { + if (other.ResponseCompression != 0) { ResponseCompression = other.ResponseCompression; } if (other.responseStatus_ != null) { @@ -737,7 +737,7 @@ namespace Grpc.Testing { public string Username { get { return username_; } set { - username_ = pb::Preconditions.CheckNotNull(value, "value"); + username_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); } } @@ -750,7 +750,7 @@ namespace Grpc.Testing { public string OauthScope { get { return oauthScope_; } set { - oauthScope_ = pb::Preconditions.CheckNotNull(value, "value"); + oauthScope_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); } } @@ -1259,7 +1259,7 @@ namespace Grpc.Testing { /// <summary>Field number for the "response_type" field.</summary> public const int ResponseTypeFieldNumber = 1; - private global::Grpc.Testing.PayloadType responseType_ = global::Grpc.Testing.PayloadType.COMPRESSABLE; + private global::Grpc.Testing.PayloadType responseType_ = 0; /// <summary> /// Desired payload type in the response from the server. /// If response_type is RANDOM, the payload from each response in the stream @@ -1300,7 +1300,7 @@ namespace Grpc.Testing { /// <summary>Field number for the "response_compression" field.</summary> public const int ResponseCompressionFieldNumber = 6; - private global::Grpc.Testing.CompressionType responseCompression_ = global::Grpc.Testing.CompressionType.NONE; + private global::Grpc.Testing.CompressionType responseCompression_ = 0; /// <summary> /// Compression algorithm to be used by the server for the response (stream) /// </summary> @@ -1345,10 +1345,10 @@ namespace Grpc.Testing { public override int GetHashCode() { int hash = 1; - if (ResponseType != global::Grpc.Testing.PayloadType.COMPRESSABLE) hash ^= ResponseType.GetHashCode(); + if (ResponseType != 0) hash ^= ResponseType.GetHashCode(); hash ^= responseParameters_.GetHashCode(); if (payload_ != null) hash ^= Payload.GetHashCode(); - if (ResponseCompression != global::Grpc.Testing.CompressionType.NONE) hash ^= ResponseCompression.GetHashCode(); + if (ResponseCompression != 0) hash ^= ResponseCompression.GetHashCode(); if (responseStatus_ != null) hash ^= ResponseStatus.GetHashCode(); return hash; } @@ -1358,7 +1358,7 @@ namespace Grpc.Testing { } public void WriteTo(pb::CodedOutputStream output) { - if (ResponseType != global::Grpc.Testing.PayloadType.COMPRESSABLE) { + if (ResponseType != 0) { output.WriteRawTag(8); output.WriteEnum((int) ResponseType); } @@ -1367,7 +1367,7 @@ namespace Grpc.Testing { output.WriteRawTag(26); output.WriteMessage(Payload); } - if (ResponseCompression != global::Grpc.Testing.CompressionType.NONE) { + if (ResponseCompression != 0) { output.WriteRawTag(48); output.WriteEnum((int) ResponseCompression); } @@ -1379,14 +1379,14 @@ namespace Grpc.Testing { public int CalculateSize() { int size = 0; - if (ResponseType != global::Grpc.Testing.PayloadType.COMPRESSABLE) { + if (ResponseType != 0) { size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) ResponseType); } size += responseParameters_.CalculateSize(_repeated_responseParameters_codec); if (payload_ != null) { size += 1 + pb::CodedOutputStream.ComputeMessageSize(Payload); } - if (ResponseCompression != global::Grpc.Testing.CompressionType.NONE) { + if (ResponseCompression != 0) { size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) ResponseCompression); } if (responseStatus_ != null) { @@ -1399,7 +1399,7 @@ namespace Grpc.Testing { if (other == null) { return; } - if (other.ResponseType != global::Grpc.Testing.PayloadType.COMPRESSABLE) { + if (other.ResponseType != 0) { ResponseType = other.ResponseType; } responseParameters_.Add(other.responseParameters_); @@ -1409,7 +1409,7 @@ namespace Grpc.Testing { } Payload.MergeFrom(other.Payload); } - if (other.ResponseCompression != global::Grpc.Testing.CompressionType.NONE) { + if (other.ResponseCompression != 0) { ResponseCompression = other.ResponseCompression; } if (other.responseStatus_ != null) { diff --git a/src/csharp/Grpc.IntegrationTesting/Metrics.cs b/src/csharp/Grpc.IntegrationTesting/Metrics.cs index 3163949d32b99c87dc4c13acc1e3858aa0188d83..8f31fbc2a99edc62b6d8e941e4a10f1b0a941553 100644 --- a/src/csharp/Grpc.IntegrationTesting/Metrics.cs +++ b/src/csharp/Grpc.IntegrationTesting/Metrics.cs @@ -34,10 +34,10 @@ namespace Grpc.Testing { "dWdlUmVzcG9uc2ViBnByb3RvMw==")); descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, new pbr::FileDescriptor[] { }, - new pbr::GeneratedCodeInfo(null, new pbr::GeneratedCodeInfo[] { - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.GaugeResponse), global::Grpc.Testing.GaugeResponse.Parser, new[]{ "Name", "LongValue", "DoubleValue", "StringValue" }, new[]{ "Value" }, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.GaugeRequest), global::Grpc.Testing.GaugeRequest.Parser, new[]{ "Name" }, null, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.EmptyMessage), global::Grpc.Testing.EmptyMessage.Parser, null, null, null, null) + new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] { + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.GaugeResponse), global::Grpc.Testing.GaugeResponse.Parser, new[]{ "Name", "LongValue", "DoubleValue", "StringValue" }, new[]{ "Value" }, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.GaugeRequest), global::Grpc.Testing.GaugeRequest.Parser, new[]{ "Name" }, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.EmptyMessage), global::Grpc.Testing.EmptyMessage.Parser, null, null, null, null) })); } #endregion @@ -92,7 +92,7 @@ namespace Grpc.Testing { public string Name { get { return name_; } set { - name_ = pb::Preconditions.CheckNotNull(value, "value"); + name_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); } } @@ -121,7 +121,7 @@ namespace Grpc.Testing { public string StringValue { get { return valueCase_ == ValueOneofCase.StringValue ? (string) value_ : ""; } set { - value_ = pb::Preconditions.CheckNotNull(value, "value"); + value_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); valueCase_ = ValueOneofCase.StringValue; } } @@ -299,7 +299,7 @@ namespace Grpc.Testing { public string Name { get { return name_; } set { - name_ = pb::Preconditions.CheckNotNull(value, "value"); + name_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); } } diff --git a/src/csharp/Grpc.IntegrationTesting/MetricsGrpc.cs b/src/csharp/Grpc.IntegrationTesting/MetricsGrpc.cs index aa4f1c5c3ec5df3e27eae6edb89015bcb2107bae..9d31d1c5146c6e3bc71105bca12ec7d9044dffca 100644 --- a/src/csharp/Grpc.IntegrationTesting/MetricsGrpc.cs +++ b/src/csharp/Grpc.IntegrationTesting/MetricsGrpc.cs @@ -112,11 +112,11 @@ namespace Grpc.Testing { /// Returns the values of all the gauges that are currently being maintained by /// the service /// </summary> - Task GetAllGauges(global::Grpc.Testing.EmptyMessage request, IServerStreamWriter<global::Grpc.Testing.GaugeResponse> responseStream, ServerCallContext context); + global::System.Threading.Tasks.Task GetAllGauges(global::Grpc.Testing.EmptyMessage request, IServerStreamWriter<global::Grpc.Testing.GaugeResponse> responseStream, ServerCallContext context); /// <summary> /// Returns the value of one gauge /// </summary> - Task<global::Grpc.Testing.GaugeResponse> GetGauge(global::Grpc.Testing.GaugeRequest request, ServerCallContext context); + global::System.Threading.Tasks.Task<global::Grpc.Testing.GaugeResponse> GetGauge(global::Grpc.Testing.GaugeRequest request, ServerCallContext context); } /// <summary>Base class for server-side implementations of MetricsService</summary> @@ -126,7 +126,7 @@ namespace Grpc.Testing { /// Returns the values of all the gauges that are currently being maintained by /// the service /// </summary> - public virtual Task GetAllGauges(global::Grpc.Testing.EmptyMessage request, IServerStreamWriter<global::Grpc.Testing.GaugeResponse> responseStream, ServerCallContext context) + public virtual global::System.Threading.Tasks.Task GetAllGauges(global::Grpc.Testing.EmptyMessage request, IServerStreamWriter<global::Grpc.Testing.GaugeResponse> responseStream, ServerCallContext context) { throw new RpcException(new Status(StatusCode.Unimplemented, "")); } @@ -134,7 +134,7 @@ namespace Grpc.Testing { /// <summary> /// Returns the value of one gauge /// </summary> - public virtual Task<global::Grpc.Testing.GaugeResponse> GetGauge(global::Grpc.Testing.GaugeRequest request, ServerCallContext context) + public virtual global::System.Threading.Tasks.Task<global::Grpc.Testing.GaugeResponse> GetGauge(global::Grpc.Testing.GaugeRequest request, ServerCallContext context) { throw new RpcException(new Status(StatusCode.Unimplemented, "")); } diff --git a/src/csharp/Grpc.IntegrationTesting/Payloads.cs b/src/csharp/Grpc.IntegrationTesting/Payloads.cs index 663f625aa7cd65ab62622ce78c95eeca87d80f32..3ad7a44f4b4a20788eb37ab7e36a4a607de42dad 100644 --- a/src/csharp/Grpc.IntegrationTesting/Payloads.cs +++ b/src/csharp/Grpc.IntegrationTesting/Payloads.cs @@ -34,11 +34,11 @@ namespace Grpc.Testing { "aW5nLkNvbXBsZXhQcm90b1BhcmFtc0gAQgkKB3BheWxvYWRiBnByb3RvMw==")); descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, new pbr::FileDescriptor[] { }, - new pbr::GeneratedCodeInfo(null, new pbr::GeneratedCodeInfo[] { - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.ByteBufferParams), global::Grpc.Testing.ByteBufferParams.Parser, new[]{ "ReqSize", "RespSize" }, null, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.SimpleProtoParams), global::Grpc.Testing.SimpleProtoParams.Parser, new[]{ "ReqSize", "RespSize" }, null, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.ComplexProtoParams), global::Grpc.Testing.ComplexProtoParams.Parser, null, null, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.PayloadConfig), global::Grpc.Testing.PayloadConfig.Parser, new[]{ "BytebufParams", "SimpleParams", "ComplexParams" }, new[]{ "Payload" }, null, null) + new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] { + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.ByteBufferParams), global::Grpc.Testing.ByteBufferParams.Parser, new[]{ "ReqSize", "RespSize" }, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.SimpleProtoParams), global::Grpc.Testing.SimpleProtoParams.Parser, new[]{ "ReqSize", "RespSize" }, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.ComplexProtoParams), global::Grpc.Testing.ComplexProtoParams.Parser, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.PayloadConfig), global::Grpc.Testing.PayloadConfig.Parser, new[]{ "BytebufParams", "SimpleParams", "ComplexParams" }, new[]{ "Payload" }, null, null) })); } #endregion diff --git a/src/csharp/Grpc.IntegrationTesting/RunnerClientServerTest.cs b/src/csharp/Grpc.IntegrationTesting/RunnerClientServerTest.cs index 13ab5a25ab28763f186ce3b776027ee079ba72bb..b2f2e4d6919e42007556cafdbefb942ee24cbb44 100644 --- a/src/csharp/Grpc.IntegrationTesting/RunnerClientServerTest.cs +++ b/src/csharp/Grpc.IntegrationTesting/RunnerClientServerTest.cs @@ -55,7 +55,7 @@ namespace Grpc.IntegrationTesting { var serverConfig = new ServerConfig { - ServerType = ServerType.ASYNC_SERVER + ServerType = ServerType.AsyncServer }; serverRunner = ServerRunners.CreateStarted(serverConfig); } @@ -75,7 +75,7 @@ namespace Grpc.IntegrationTesting var config = new ClientConfig { ServerTargets = { string.Format("{0}:{1}", "localhost", serverRunner.BoundPort) }, - RpcType = RpcType.UNARY, + RpcType = RpcType.Unary, LoadParams = new LoadParams { ClosedLoop = new ClosedLoopParams() }, PayloadConfig = new PayloadConfig { diff --git a/src/csharp/Grpc.IntegrationTesting/ServerRunners.cs b/src/csharp/Grpc.IntegrationTesting/ServerRunners.cs index d7859443e077db7b2401e854ff16e5386fc68e5b..8689d188aed4ea5bd4eb6f4c15725c4084339c7d 100644 --- a/src/csharp/Grpc.IntegrationTesting/ServerRunners.cs +++ b/src/csharp/Grpc.IntegrationTesting/ServerRunners.cs @@ -77,13 +77,13 @@ namespace Grpc.IntegrationTesting } ServerServiceDefinition service = null; - if (config.ServerType == ServerType.ASYNC_SERVER) + if (config.ServerType == ServerType.AsyncServer) { GrpcPreconditions.CheckArgument(config.PayloadConfig == null, "ServerConfig.PayloadConfig shouldn't be set for BenchmarkService based server."); service = BenchmarkService.BindService(new BenchmarkServiceImpl()); } - else if (config.ServerType == ServerType.ASYNC_GENERIC_SERVER) + else if (config.ServerType == ServerType.AsyncGenericServer) { var genericService = new GenericServiceImpl(config.PayloadConfig.BytebufParams.RespSize); service = GenericService.BindHandler(genericService.StreamingCall); diff --git a/src/csharp/Grpc.IntegrationTesting/Services.cs b/src/csharp/Grpc.IntegrationTesting/Services.cs index a8475c181720de6e4014bd05598d5313a21028c3..e10b45c9a283f2bff416f9beeb3052ad92909d2c 100644 --- a/src/csharp/Grpc.IntegrationTesting/Services.cs +++ b/src/csharp/Grpc.IntegrationTesting/Services.cs @@ -39,7 +39,7 @@ namespace Grpc.Testing { "YgZwcm90bzM=")); descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, new pbr::FileDescriptor[] { global::Grpc.Testing.MessagesReflection.Descriptor, global::Grpc.Testing.ControlReflection.Descriptor, }, - new pbr::GeneratedCodeInfo(null, null)); + new pbr::GeneratedClrTypeInfo(null, null)); } #endregion diff --git a/src/csharp/Grpc.IntegrationTesting/ServicesGrpc.cs b/src/csharp/Grpc.IntegrationTesting/ServicesGrpc.cs index 42bf5e0b58222e93fe32138e5e9f6e3bd96cd3a2..f7071ebf6bebeeeec86c81c79cc72463e0cddec8 100644 --- a/src/csharp/Grpc.IntegrationTesting/ServicesGrpc.cs +++ b/src/csharp/Grpc.IntegrationTesting/ServicesGrpc.cs @@ -111,12 +111,12 @@ namespace Grpc.Testing { /// One request followed by one response. /// The server returns the client payload as-is. /// </summary> - Task<global::Grpc.Testing.SimpleResponse> UnaryCall(global::Grpc.Testing.SimpleRequest request, ServerCallContext context); + global::System.Threading.Tasks.Task<global::Grpc.Testing.SimpleResponse> UnaryCall(global::Grpc.Testing.SimpleRequest request, ServerCallContext context); /// <summary> /// One request followed by one response. /// The server returns the client payload as-is. /// </summary> - Task StreamingCall(IAsyncStreamReader<global::Grpc.Testing.SimpleRequest> requestStream, IServerStreamWriter<global::Grpc.Testing.SimpleResponse> responseStream, ServerCallContext context); + global::System.Threading.Tasks.Task StreamingCall(IAsyncStreamReader<global::Grpc.Testing.SimpleRequest> requestStream, IServerStreamWriter<global::Grpc.Testing.SimpleResponse> responseStream, ServerCallContext context); } /// <summary>Base class for server-side implementations of BenchmarkService</summary> @@ -126,7 +126,7 @@ namespace Grpc.Testing { /// One request followed by one response. /// The server returns the client payload as-is. /// </summary> - public virtual Task<global::Grpc.Testing.SimpleResponse> UnaryCall(global::Grpc.Testing.SimpleRequest request, ServerCallContext context) + public virtual global::System.Threading.Tasks.Task<global::Grpc.Testing.SimpleResponse> UnaryCall(global::Grpc.Testing.SimpleRequest request, ServerCallContext context) { throw new RpcException(new Status(StatusCode.Unimplemented, "")); } @@ -135,7 +135,7 @@ namespace Grpc.Testing { /// One request followed by one response. /// The server returns the client payload as-is. /// </summary> - public virtual Task StreamingCall(IAsyncStreamReader<global::Grpc.Testing.SimpleRequest> requestStream, IServerStreamWriter<global::Grpc.Testing.SimpleResponse> responseStream, ServerCallContext context) + public virtual global::System.Threading.Tasks.Task StreamingCall(IAsyncStreamReader<global::Grpc.Testing.SimpleRequest> requestStream, IServerStreamWriter<global::Grpc.Testing.SimpleResponse> responseStream, ServerCallContext context) { throw new RpcException(new Status(StatusCode.Unimplemented, "")); } @@ -375,7 +375,7 @@ namespace Grpc.Testing { /// and once the shutdown has finished, the OK status is sent to terminate /// this RPC. /// </summary> - Task RunServer(IAsyncStreamReader<global::Grpc.Testing.ServerArgs> requestStream, IServerStreamWriter<global::Grpc.Testing.ServerStatus> responseStream, ServerCallContext context); + global::System.Threading.Tasks.Task RunServer(IAsyncStreamReader<global::Grpc.Testing.ServerArgs> requestStream, IServerStreamWriter<global::Grpc.Testing.ServerStatus> responseStream, ServerCallContext context); /// <summary> /// Start client with specified workload. /// First request sent specifies the ClientConfig followed by ClientStatus @@ -384,15 +384,15 @@ namespace Grpc.Testing { /// and once the shutdown has finished, the OK status is sent to terminate /// this RPC. /// </summary> - Task RunClient(IAsyncStreamReader<global::Grpc.Testing.ClientArgs> requestStream, IServerStreamWriter<global::Grpc.Testing.ClientStatus> responseStream, ServerCallContext context); + global::System.Threading.Tasks.Task RunClient(IAsyncStreamReader<global::Grpc.Testing.ClientArgs> requestStream, IServerStreamWriter<global::Grpc.Testing.ClientStatus> responseStream, ServerCallContext context); /// <summary> /// Just return the core count - unary call /// </summary> - Task<global::Grpc.Testing.CoreResponse> CoreCount(global::Grpc.Testing.CoreRequest request, ServerCallContext context); + global::System.Threading.Tasks.Task<global::Grpc.Testing.CoreResponse> CoreCount(global::Grpc.Testing.CoreRequest request, ServerCallContext context); /// <summary> /// Quit this worker /// </summary> - Task<global::Grpc.Testing.Void> QuitWorker(global::Grpc.Testing.Void request, ServerCallContext context); + global::System.Threading.Tasks.Task<global::Grpc.Testing.Void> QuitWorker(global::Grpc.Testing.Void request, ServerCallContext context); } /// <summary>Base class for server-side implementations of WorkerService</summary> @@ -406,7 +406,7 @@ namespace Grpc.Testing { /// and once the shutdown has finished, the OK status is sent to terminate /// this RPC. /// </summary> - public virtual Task RunServer(IAsyncStreamReader<global::Grpc.Testing.ServerArgs> requestStream, IServerStreamWriter<global::Grpc.Testing.ServerStatus> responseStream, ServerCallContext context) + public virtual global::System.Threading.Tasks.Task RunServer(IAsyncStreamReader<global::Grpc.Testing.ServerArgs> requestStream, IServerStreamWriter<global::Grpc.Testing.ServerStatus> responseStream, ServerCallContext context) { throw new RpcException(new Status(StatusCode.Unimplemented, "")); } @@ -419,7 +419,7 @@ namespace Grpc.Testing { /// and once the shutdown has finished, the OK status is sent to terminate /// this RPC. /// </summary> - public virtual Task RunClient(IAsyncStreamReader<global::Grpc.Testing.ClientArgs> requestStream, IServerStreamWriter<global::Grpc.Testing.ClientStatus> responseStream, ServerCallContext context) + public virtual global::System.Threading.Tasks.Task RunClient(IAsyncStreamReader<global::Grpc.Testing.ClientArgs> requestStream, IServerStreamWriter<global::Grpc.Testing.ClientStatus> responseStream, ServerCallContext context) { throw new RpcException(new Status(StatusCode.Unimplemented, "")); } @@ -427,7 +427,7 @@ namespace Grpc.Testing { /// <summary> /// Just return the core count - unary call /// </summary> - public virtual Task<global::Grpc.Testing.CoreResponse> CoreCount(global::Grpc.Testing.CoreRequest request, ServerCallContext context) + public virtual global::System.Threading.Tasks.Task<global::Grpc.Testing.CoreResponse> CoreCount(global::Grpc.Testing.CoreRequest request, ServerCallContext context) { throw new RpcException(new Status(StatusCode.Unimplemented, "")); } @@ -435,7 +435,7 @@ namespace Grpc.Testing { /// <summary> /// Quit this worker /// </summary> - public virtual Task<global::Grpc.Testing.Void> QuitWorker(global::Grpc.Testing.Void request, ServerCallContext context) + public virtual global::System.Threading.Tasks.Task<global::Grpc.Testing.Void> QuitWorker(global::Grpc.Testing.Void request, ServerCallContext context) { throw new RpcException(new Status(StatusCode.Unimplemented, "")); } diff --git a/src/csharp/Grpc.IntegrationTesting/Stats.cs b/src/csharp/Grpc.IntegrationTesting/Stats.cs index 39c00ea88cff6d218749fcc8e9b7b6a8bb787a2a..304d676113e4fc697a3622e2077ff33bbedae887 100644 --- a/src/csharp/Grpc.IntegrationTesting/Stats.cs +++ b/src/csharp/Grpc.IntegrationTesting/Stats.cs @@ -35,11 +35,11 @@ namespace Grpc.Testing { "ZXIYAyABKAESEwoLdGltZV9zeXN0ZW0YBCABKAFiBnByb3RvMw==")); descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, new pbr::FileDescriptor[] { }, - new pbr::GeneratedCodeInfo(null, new pbr::GeneratedCodeInfo[] { - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.ServerStats), global::Grpc.Testing.ServerStats.Parser, new[]{ "TimeElapsed", "TimeUser", "TimeSystem" }, null, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.HistogramParams), global::Grpc.Testing.HistogramParams.Parser, new[]{ "Resolution", "MaxPossible" }, null, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.HistogramData), global::Grpc.Testing.HistogramData.Parser, new[]{ "Bucket", "MinSeen", "MaxSeen", "Sum", "SumOfSquares", "Count" }, null, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.ClientStats), global::Grpc.Testing.ClientStats.Parser, new[]{ "Latencies", "TimeElapsed", "TimeUser", "TimeSystem" }, null, null, null) + new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] { + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.ServerStats), global::Grpc.Testing.ServerStats.Parser, new[]{ "TimeElapsed", "TimeUser", "TimeSystem" }, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.HistogramParams), global::Grpc.Testing.HistogramParams.Parser, new[]{ "Resolution", "MaxPossible" }, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.HistogramData), global::Grpc.Testing.HistogramData.Parser, new[]{ "Bucket", "MinSeen", "MaxSeen", "Sum", "SumOfSquares", "Count" }, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.ClientStats), global::Grpc.Testing.ClientStats.Parser, new[]{ "Latencies", "TimeElapsed", "TimeUser", "TimeSystem" }, null, null, null) })); } #endregion diff --git a/src/csharp/Grpc.IntegrationTesting/StressTestClient.cs b/src/csharp/Grpc.IntegrationTesting/StressTestClient.cs index 8db691cb048b1767542d18318c0705af4e414c25..4d6ca7ece57834a32ce62638b4e943402681eb83 100644 --- a/src/csharp/Grpc.IntegrationTesting/StressTestClient.cs +++ b/src/csharp/Grpc.IntegrationTesting/StressTestClient.cs @@ -311,7 +311,7 @@ namespace Grpc.IntegrationTesting var snapshot = histogram.GetSnapshot(true); var elapsedSnapshot = wallClockStopwatch.GetElapsedSnapshot(true); - return (long) (snapshot.Count / elapsedSnapshot.Seconds); + return (long) (snapshot.Count / elapsedSnapshot.TotalSeconds); } } } diff --git a/src/csharp/Grpc.IntegrationTesting/Test.cs b/src/csharp/Grpc.IntegrationTesting/Test.cs index 363f6444ec2ef739ad58b72fd284b65443e2881c..9258dc185d70863c18cdec58d7fe915f38106507 100644 --- a/src/csharp/Grpc.IntegrationTesting/Test.cs +++ b/src/csharp/Grpc.IntegrationTesting/Test.cs @@ -46,7 +46,7 @@ namespace Grpc.Testing { "cnBjLnRlc3RpbmcuUmVjb25uZWN0SW5mb2IGcHJvdG8z")); descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, new pbr::FileDescriptor[] { global::Grpc.Testing.EmptyReflection.Descriptor, global::Grpc.Testing.MessagesReflection.Descriptor, }, - new pbr::GeneratedCodeInfo(null, null)); + new pbr::GeneratedClrTypeInfo(null, null)); } #endregion diff --git a/src/csharp/Grpc.IntegrationTesting/TestGrpc.cs b/src/csharp/Grpc.IntegrationTesting/TestGrpc.cs index f1878cbb556c778b8ed34a9942bc31984df91b3d..cf43a77118cf0b60ab0d361f6a7a8824149213bd 100644 --- a/src/csharp/Grpc.IntegrationTesting/TestGrpc.cs +++ b/src/csharp/Grpc.IntegrationTesting/TestGrpc.cs @@ -196,34 +196,34 @@ namespace Grpc.Testing { /// <summary> /// One empty request followed by one empty response. /// </summary> - Task<global::Grpc.Testing.Empty> EmptyCall(global::Grpc.Testing.Empty request, ServerCallContext context); + global::System.Threading.Tasks.Task<global::Grpc.Testing.Empty> EmptyCall(global::Grpc.Testing.Empty request, ServerCallContext context); /// <summary> /// One request followed by one response. /// </summary> - Task<global::Grpc.Testing.SimpleResponse> UnaryCall(global::Grpc.Testing.SimpleRequest request, ServerCallContext context); + global::System.Threading.Tasks.Task<global::Grpc.Testing.SimpleResponse> UnaryCall(global::Grpc.Testing.SimpleRequest request, ServerCallContext context); /// <summary> /// One request followed by a sequence of responses (streamed download). /// The server returns the payload with client desired type and sizes. /// </summary> - Task StreamingOutputCall(global::Grpc.Testing.StreamingOutputCallRequest request, IServerStreamWriter<global::Grpc.Testing.StreamingOutputCallResponse> responseStream, ServerCallContext context); + global::System.Threading.Tasks.Task StreamingOutputCall(global::Grpc.Testing.StreamingOutputCallRequest request, IServerStreamWriter<global::Grpc.Testing.StreamingOutputCallResponse> responseStream, ServerCallContext context); /// <summary> /// A sequence of requests followed by one response (streamed upload). /// The server returns the aggregated size of client payload as the result. /// </summary> - Task<global::Grpc.Testing.StreamingInputCallResponse> StreamingInputCall(IAsyncStreamReader<global::Grpc.Testing.StreamingInputCallRequest> requestStream, ServerCallContext context); + global::System.Threading.Tasks.Task<global::Grpc.Testing.StreamingInputCallResponse> StreamingInputCall(IAsyncStreamReader<global::Grpc.Testing.StreamingInputCallRequest> requestStream, ServerCallContext context); /// <summary> /// A sequence of requests with each request served by the server immediately. /// As one request could lead to multiple responses, this interface /// demonstrates the idea of full duplexing. /// </summary> - Task FullDuplexCall(IAsyncStreamReader<global::Grpc.Testing.StreamingOutputCallRequest> requestStream, IServerStreamWriter<global::Grpc.Testing.StreamingOutputCallResponse> responseStream, ServerCallContext context); + global::System.Threading.Tasks.Task FullDuplexCall(IAsyncStreamReader<global::Grpc.Testing.StreamingOutputCallRequest> requestStream, IServerStreamWriter<global::Grpc.Testing.StreamingOutputCallResponse> responseStream, ServerCallContext context); /// <summary> /// A sequence of requests followed by a sequence of responses. /// The server buffers all the client requests and then serves them in order. A /// stream of responses are returned to the client when the server starts with /// first request. /// </summary> - Task HalfDuplexCall(IAsyncStreamReader<global::Grpc.Testing.StreamingOutputCallRequest> requestStream, IServerStreamWriter<global::Grpc.Testing.StreamingOutputCallResponse> responseStream, ServerCallContext context); + global::System.Threading.Tasks.Task HalfDuplexCall(IAsyncStreamReader<global::Grpc.Testing.StreamingOutputCallRequest> requestStream, IServerStreamWriter<global::Grpc.Testing.StreamingOutputCallResponse> responseStream, ServerCallContext context); } /// <summary>Base class for server-side implementations of TestService</summary> @@ -232,7 +232,7 @@ namespace Grpc.Testing { /// <summary> /// One empty request followed by one empty response. /// </summary> - public virtual Task<global::Grpc.Testing.Empty> EmptyCall(global::Grpc.Testing.Empty request, ServerCallContext context) + public virtual global::System.Threading.Tasks.Task<global::Grpc.Testing.Empty> EmptyCall(global::Grpc.Testing.Empty request, ServerCallContext context) { throw new RpcException(new Status(StatusCode.Unimplemented, "")); } @@ -240,7 +240,7 @@ namespace Grpc.Testing { /// <summary> /// One request followed by one response. /// </summary> - public virtual Task<global::Grpc.Testing.SimpleResponse> UnaryCall(global::Grpc.Testing.SimpleRequest request, ServerCallContext context) + public virtual global::System.Threading.Tasks.Task<global::Grpc.Testing.SimpleResponse> UnaryCall(global::Grpc.Testing.SimpleRequest request, ServerCallContext context) { throw new RpcException(new Status(StatusCode.Unimplemented, "")); } @@ -249,7 +249,7 @@ namespace Grpc.Testing { /// One request followed by a sequence of responses (streamed download). /// The server returns the payload with client desired type and sizes. /// </summary> - public virtual Task StreamingOutputCall(global::Grpc.Testing.StreamingOutputCallRequest request, IServerStreamWriter<global::Grpc.Testing.StreamingOutputCallResponse> responseStream, ServerCallContext context) + public virtual global::System.Threading.Tasks.Task StreamingOutputCall(global::Grpc.Testing.StreamingOutputCallRequest request, IServerStreamWriter<global::Grpc.Testing.StreamingOutputCallResponse> responseStream, ServerCallContext context) { throw new RpcException(new Status(StatusCode.Unimplemented, "")); } @@ -258,7 +258,7 @@ namespace Grpc.Testing { /// A sequence of requests followed by one response (streamed upload). /// The server returns the aggregated size of client payload as the result. /// </summary> - public virtual Task<global::Grpc.Testing.StreamingInputCallResponse> StreamingInputCall(IAsyncStreamReader<global::Grpc.Testing.StreamingInputCallRequest> requestStream, ServerCallContext context) + public virtual global::System.Threading.Tasks.Task<global::Grpc.Testing.StreamingInputCallResponse> StreamingInputCall(IAsyncStreamReader<global::Grpc.Testing.StreamingInputCallRequest> requestStream, ServerCallContext context) { throw new RpcException(new Status(StatusCode.Unimplemented, "")); } @@ -268,7 +268,7 @@ namespace Grpc.Testing { /// As one request could lead to multiple responses, this interface /// demonstrates the idea of full duplexing. /// </summary> - public virtual Task FullDuplexCall(IAsyncStreamReader<global::Grpc.Testing.StreamingOutputCallRequest> requestStream, IServerStreamWriter<global::Grpc.Testing.StreamingOutputCallResponse> responseStream, ServerCallContext context) + public virtual global::System.Threading.Tasks.Task FullDuplexCall(IAsyncStreamReader<global::Grpc.Testing.StreamingOutputCallRequest> requestStream, IServerStreamWriter<global::Grpc.Testing.StreamingOutputCallResponse> responseStream, ServerCallContext context) { throw new RpcException(new Status(StatusCode.Unimplemented, "")); } @@ -279,7 +279,7 @@ namespace Grpc.Testing { /// stream of responses are returned to the client when the server starts with /// first request. /// </summary> - public virtual Task HalfDuplexCall(IAsyncStreamReader<global::Grpc.Testing.StreamingOutputCallRequest> requestStream, IServerStreamWriter<global::Grpc.Testing.StreamingOutputCallResponse> responseStream, ServerCallContext context) + public virtual global::System.Threading.Tasks.Task HalfDuplexCall(IAsyncStreamReader<global::Grpc.Testing.StreamingOutputCallRequest> requestStream, IServerStreamWriter<global::Grpc.Testing.StreamingOutputCallResponse> responseStream, ServerCallContext context) { throw new RpcException(new Status(StatusCode.Unimplemented, "")); } @@ -525,7 +525,7 @@ namespace Grpc.Testing { /// <summary> /// A call that no server should implement /// </summary> - Task<global::Grpc.Testing.Empty> UnimplementedCall(global::Grpc.Testing.Empty request, ServerCallContext context); + global::System.Threading.Tasks.Task<global::Grpc.Testing.Empty> UnimplementedCall(global::Grpc.Testing.Empty request, ServerCallContext context); } /// <summary>Base class for server-side implementations of UnimplementedService</summary> @@ -534,7 +534,7 @@ namespace Grpc.Testing { /// <summary> /// A call that no server should implement /// </summary> - public virtual Task<global::Grpc.Testing.Empty> UnimplementedCall(global::Grpc.Testing.Empty request, ServerCallContext context) + public virtual global::System.Threading.Tasks.Task<global::Grpc.Testing.Empty> UnimplementedCall(global::Grpc.Testing.Empty request, ServerCallContext context) { throw new RpcException(new Status(StatusCode.Unimplemented, "")); } @@ -669,19 +669,19 @@ namespace Grpc.Testing { [System.Obsolete("Service implementations should inherit from the generated abstract base class instead.")] public interface IReconnectService { - Task<global::Grpc.Testing.Empty> Start(global::Grpc.Testing.ReconnectParams request, ServerCallContext context); - Task<global::Grpc.Testing.ReconnectInfo> Stop(global::Grpc.Testing.Empty request, ServerCallContext context); + global::System.Threading.Tasks.Task<global::Grpc.Testing.Empty> Start(global::Grpc.Testing.ReconnectParams request, ServerCallContext context); + global::System.Threading.Tasks.Task<global::Grpc.Testing.ReconnectInfo> Stop(global::Grpc.Testing.Empty request, ServerCallContext context); } /// <summary>Base class for server-side implementations of ReconnectService</summary> public abstract class ReconnectServiceBase { - public virtual Task<global::Grpc.Testing.Empty> Start(global::Grpc.Testing.ReconnectParams request, ServerCallContext context) + public virtual global::System.Threading.Tasks.Task<global::Grpc.Testing.Empty> Start(global::Grpc.Testing.ReconnectParams request, ServerCallContext context) { throw new RpcException(new Status(StatusCode.Unimplemented, "")); } - public virtual Task<global::Grpc.Testing.ReconnectInfo> Stop(global::Grpc.Testing.Empty request, ServerCallContext context) + public virtual global::System.Threading.Tasks.Task<global::Grpc.Testing.ReconnectInfo> Stop(global::Grpc.Testing.Empty request, ServerCallContext context) { throw new RpcException(new Status(StatusCode.Unimplemented, "")); } diff --git a/src/csharp/Grpc.IntegrationTesting/packages.config b/src/csharp/Grpc.IntegrationTesting/packages.config index 3fef67dca4f924e93326b82d023883051187418c..3161c5b755780f248778003a84d171d62514dea9 100644 --- a/src/csharp/Grpc.IntegrationTesting/packages.config +++ b/src/csharp/Grpc.IntegrationTesting/packages.config @@ -4,7 +4,7 @@ <package id="CommandLineParser" version="1.9.71" targetFramework="net45" /> <package id="Google.Apis.Auth" version="1.11.1" targetFramework="net45" /> <package id="Google.Apis.Core" version="1.11.1" targetFramework="net45" /> - <package id="Google.Protobuf" version="3.0.0-beta2" targetFramework="net45" /> + <package id="Google.Protobuf" version="3.0.0-beta3" targetFramework="net45" /> <package id="Ix-Async" version="1.2.5" targetFramework="net45" /> <package id="Moq" version="4.2.1510.2205" targetFramework="net45" /> <package id="Newtonsoft.Json" version="7.0.1" targetFramework="net45" /> diff --git a/src/csharp/build_packages.bat b/src/csharp/build_packages.bat index 9a60be26b6305c8db5fe3a2d6f956d86e94b5ebe..1cc63da9703b84435c52f492220d97f47dd591f4 100644 --- a/src/csharp/build_packages.bat +++ b/src/csharp/build_packages.bat @@ -1,8 +1,37 @@ +@rem Copyright 2016, Google Inc. +@rem All rights reserved. +@rem +@rem Redistribution and use in source and binary forms, with or without +@rem modification, are permitted provided that the following conditions are +@rem met: +@rem +@rem * Redistributions of source code must retain the above copyright +@rem notice, this list of conditions and the following disclaimer. +@rem * Redistributions in binary form must reproduce the above +@rem copyright notice, this list of conditions and the following disclaimer +@rem in the documentation and/or other materials provided with the +@rem distribution. +@rem * Neither the name of Google Inc. nor the names of its +@rem contributors may be used to endorse or promote products derived from +@rem this software without specific prior written permission. +@rem +@rem THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +@rem "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +@rem LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +@rem A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +@rem OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +@rem SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +@rem LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +@rem DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +@rem THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +@rem (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +@rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + @rem Builds gRPC NuGet packages @rem Current package versions -set VERSION=0.14.0-dev -set PROTOBUF_VERSION=3.0.0-beta2 +set VERSION=0.15.0-dev +set PROTOBUF_VERSION=3.0.0-beta3 @rem Packages that depend on prerelease packages (like Google.Protobuf) need to have prerelease suffix as well. set VERSION_WITH_BETA=%VERSION%-beta diff --git a/src/csharp/buildall.bat b/src/csharp/buildall.bat index f800756dfeca7d1bc17111ba9e00d00f08868c77..0beb30c19895d3156c112c1abfa1f422265e8fb8 100644 --- a/src/csharp/buildall.bat +++ b/src/csharp/buildall.bat @@ -1,3 +1,32 @@ +@rem Copyright 2016, Google Inc. +@rem All rights reserved. +@rem +@rem Redistribution and use in source and binary forms, with or without +@rem modification, are permitted provided that the following conditions are +@rem met: +@rem +@rem * Redistributions of source code must retain the above copyright +@rem notice, this list of conditions and the following disclaimer. +@rem * Redistributions in binary form must reproduce the above +@rem copyright notice, this list of conditions and the following disclaimer +@rem in the documentation and/or other materials provided with the +@rem distribution. +@rem * Neither the name of Google Inc. nor the names of its +@rem contributors may be used to endorse or promote products derived from +@rem this software without specific prior written permission. +@rem +@rem THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +@rem "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +@rem LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +@rem A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +@rem OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +@rem SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +@rem LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +@rem DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +@rem THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +@rem (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +@rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + @rem Convenience script to build gRPC C# from command line setlocal diff --git a/src/csharp/ext/grpc_csharp_ext.c b/src/csharp/ext/grpc_csharp_ext.c index aeef8a79e9924ca25ce7b99a52b9d9f293ab5b8a..5b8ff9b819b2f18387096ae268de6b82703402cf 100644 --- a/src/csharp/ext/grpc_csharp_ext.c +++ b/src/csharp/ext/grpc_csharp_ext.c @@ -715,10 +715,11 @@ grpcsharp_call_send_close_from_client(grpc_call *call, GPR_EXPORT grpc_call_error GPR_CALLTYPE grpcsharp_call_send_status_from_server( grpc_call *call, grpcsharp_batch_context *ctx, grpc_status_code status_code, const char *status_details, grpc_metadata_array *trailing_metadata, - int32_t send_empty_initial_metadata) { + int32_t send_empty_initial_metadata, const char* optional_send_buffer, + size_t optional_send_buffer_len, uint32_t write_flags) { /* TODO: don't use magic number */ - grpc_op ops[2]; - size_t nops = send_empty_initial_metadata ? 2 : 1; + grpc_op ops[3]; + size_t nops = 1; ops[0].op = GRPC_OP_SEND_STATUS_FROM_SERVER; ops[0].data.send_status_from_server.status = status_code; ops[0].data.send_status_from_server.status_details = @@ -731,12 +732,23 @@ GPR_EXPORT grpc_call_error GPR_CALLTYPE grpcsharp_call_send_status_from_server( ctx->send_status_from_server.trailing_metadata.metadata; ops[0].flags = 0; ops[0].reserved = NULL; - ops[1].op = GRPC_OP_SEND_INITIAL_METADATA; - ops[1].data.send_initial_metadata.count = 0; - ops[1].data.send_initial_metadata.metadata = NULL; - ops[1].flags = 0; - ops[1].reserved = NULL; - + if (optional_send_buffer) { + ops[nops].op = GRPC_OP_SEND_MESSAGE; + ctx->send_message = string_to_byte_buffer(optional_send_buffer, + optional_send_buffer_len); + ops[nops].data.send_message = ctx->send_message; + ops[nops].flags = write_flags; + ops[nops].reserved = NULL; + nops ++; + } + if (send_empty_initial_metadata) { + ops[nops].op = GRPC_OP_SEND_INITIAL_METADATA; + ops[nops].data.send_initial_metadata.count = 0; + ops[nops].data.send_initial_metadata.metadata = NULL; + ops[nops].flags = 0; + ops[nops].reserved = NULL; + nops++; + } return grpc_call_start_batch(call, ops, nops, ctx, NULL); } diff --git a/src/node/test/math/math_server.js b/src/node/test/math/math_server.js index fa05ed016541f45382b386e25b59061087bc8848..5e3d1dd86418ccc7a9a4bbac462653701651efe3 100644 --- a/src/node/test/math/math_server.js +++ b/src/node/test/math/math_server.js @@ -68,7 +68,7 @@ function mathDiv(call, cb) { function mathFib(stream) { // Here, call is a standard writable Node object Stream var previous = 0, current = 1; - for (var i = 0; i < stream.request.limit; i++) { + for (var i = 0; i < stream.request.getLimit(); i++) { var response = new math.Num(); response.setNum(current); stream.write(response); diff --git a/src/node/tools/bin/protoc.js b/src/node/tools/bin/protoc.js index 4d50c94b0f85081a6729e01e7cb749cf8082e393..53fc5dc428025e4e5136d87730b6142c873d5907 100755 --- a/src/node/tools/bin/protoc.js +++ b/src/node/tools/bin/protoc.js @@ -47,10 +47,11 @@ var exe_ext = process.platform === 'win32' ? '.exe' : ''; var protoc = path.resolve(__dirname, 'protoc' + exe_ext); -execFile(protoc, process.argv.slice(2), function(error, stdout, stderr) { +var child_process = execFile(protoc, process.argv.slice(2), function(error, stdout, stderr) { if (error) { throw error; } - console.log(stdout); - console.log(stderr); }); + +child_process.stdout.pipe(process.stdout); +child_process.stderr.pipe(process.stderr); diff --git a/src/node/tools/bin/protoc_plugin.js b/src/node/tools/bin/protoc_plugin.js index 281ec0d85e56f9bff88ce6bb314e341ed9583a5a..857882e1c346396b18b5f788b501fb2672fd969f 100755 --- a/src/node/tools/bin/protoc_plugin.js +++ b/src/node/tools/bin/protoc_plugin.js @@ -47,10 +47,12 @@ var exe_ext = process.platform === 'win32' ? '.exe' : ''; var plugin = path.resolve(__dirname, 'grpc_node_plugin' + exe_ext); -execFile(plugin, process.argv.slice(2), function(error, stdout, stderr) { +var child_process = execFile(plugin, process.argv.slice(2), {encoding: 'buffer'}, function(error, stdout, stderr) { if (error) { throw error; } - console.log(stdout); - console.log(stderr); }); + +process.stdin.pipe(child_process.stdin); +child_process.stdout.pipe(process.stdout); +child_process.stderr.pipe(process.stderr); diff --git a/src/node/tools/package.json b/src/node/tools/package.json index d98ed0b1fc30c951d3ddba0c465d71affbfeecfe..d4849c2e38842bbb482f3ab19ecfde3f58b57b92 100644 --- a/src/node/tools/package.json +++ b/src/node/tools/package.json @@ -1,6 +1,6 @@ { "name": "grpc-tools", - "version": "0.14.0-dev", + "version": "0.15.0-dev", "author": "Google Inc.", "description": "Tools for developing with gRPC on Node.js", "homepage": "http://www.grpc.io/", @@ -16,8 +16,8 @@ } ], "bin": { - "grpc-tools-protoc": "./bin/protoc.js", - "grpc-tools-plugin": "./bin/protoc_plugin.js" + "grpc_tools_node_protoc": "./bin/protoc.js", + "grpc_tools_node_protoc_plugin": "./bin/protoc_plugin.js" }, "scripts": { "install": "./node_modules/.bin/node-pre-gyp install" diff --git a/src/objective-c/BoringSSL.podspec b/src/objective-c/BoringSSL.podspec index 4a6df910a75c082fd949169479491866731c6582..7d1de8071698936d6b11b8f175d84ae23ea2e13e 100644 --- a/src/objective-c/BoringSSL.podspec +++ b/src/objective-c/BoringSSL.podspec @@ -31,7 +31,7 @@ Pod::Spec.new do |s| s.name = 'BoringSSL' - s.version = '2.0' + s.version = '3.0' s.summary = 'BoringSSL is a fork of OpenSSL that is designed to meet Google’s needs.' # Adapted from the homepage: s.description = <<-DESC @@ -67,7 +67,7 @@ Pod::Spec.new do |s| s.authors = 'Adam Langley', 'David Benjamin', 'Matt Braithwaite' s.source = { :git => 'https://boringssl.googlesource.com/boringssl', - :tag => 'version_for_cocoapods_2.0' } + :tag => 'version_for_cocoapods_3.0' } s.source_files = 'ssl/*.{h,c}', 'ssl/**/*.{h,c}', diff --git a/src/php/ext/grpc/call.c b/src/php/ext/grpc/call.c index a0f3d160c6422c32c4ce7e16f3843e4d153b6103..884130e7d4ffb4f526725c07bc2001f2d7fde68f 100644 --- a/src/php/ext/grpc/call.c +++ b/src/php/ext/grpc/call.c @@ -89,19 +89,20 @@ zend_object_value create_wrapped_grpc_call(zend_class_entry *class_type /* Wraps a grpc_call struct in a PHP object. Owned indicates whether the struct should be destroyed at the end of the object's lifecycle */ -zval *grpc_php_wrap_call(grpc_call *wrapped, bool owned) { +zval *grpc_php_wrap_call(grpc_call *wrapped, bool owned TSRMLS_DC) { zval *call_object; MAKE_STD_ZVAL(call_object); object_init_ex(call_object, grpc_ce_call); wrapped_grpc_call *call = (wrapped_grpc_call *)zend_object_store_get_object(call_object TSRMLS_CC); call->wrapped = wrapped; + call->owned = owned; return call_object; } /* Creates and returns a PHP array object with the data in a * grpc_metadata_array. Returns NULL on failure */ -zval *grpc_parse_metadata_array(grpc_metadata_array *metadata_array) { +zval *grpc_parse_metadata_array(grpc_metadata_array *metadata_array TSRMLS_DC) { int count = metadata_array->count; grpc_metadata *elements = metadata_array->metadata; int i; @@ -126,7 +127,7 @@ zval *grpc_parse_metadata_array(grpc_metadata_array *metadata_array) { if (zend_hash_find(array_hash, str_key, key_len, (void **)data) == SUCCESS) { if (Z_TYPE_P(*data) != IS_ARRAY) { - zend_throw_exception(zend_exception_get_default(), + zend_throw_exception(zend_exception_get_default(TSRMLS_C), "Metadata hash somehow contains wrong types.", 1 TSRMLS_CC); efree(str_key); @@ -453,7 +454,7 @@ PHP_METHOD(Call, startBatch) { add_property_bool(result, "send_status", true); break; case GRPC_OP_RECV_INITIAL_METADATA: - array = grpc_parse_metadata_array(&recv_metadata); + array = grpc_parse_metadata_array(&recv_metadata TSRMLS_CC); add_property_zval(result, "metadata", array); Z_DELREF_P(array); break; @@ -469,7 +470,7 @@ PHP_METHOD(Call, startBatch) { case GRPC_OP_RECV_STATUS_ON_CLIENT: MAKE_STD_ZVAL(recv_status); object_init(recv_status); - array = grpc_parse_metadata_array(&recv_trailing_metadata); + array = grpc_parse_metadata_array(&recv_trailing_metadata TSRMLS_CC); add_property_zval(recv_status, "metadata", array); Z_DELREF_P(array); add_property_long(recv_status, "code", status); diff --git a/src/php/ext/grpc/call.h b/src/php/ext/grpc/call.h index 73efadae3512be7046d9a559f76b71c7340373c9..36c5f2d2724661407d37816e6bf3fbfe28aa5da0 100644 --- a/src/php/ext/grpc/call.h +++ b/src/php/ext/grpc/call.h @@ -60,11 +60,11 @@ typedef struct wrapped_grpc_call { void grpc_init_call(TSRMLS_D); /* Creates a Call object that wraps the given grpc_call struct */ -zval *grpc_php_wrap_call(grpc_call *wrapped, bool owned); +zval *grpc_php_wrap_call(grpc_call *wrapped, bool owned TSRMLS_DC); /* Creates and returns a PHP associative array of metadata from a C array of * call metadata */ -zval *grpc_parse_metadata_array(grpc_metadata_array *metadata_array); +zval *grpc_parse_metadata_array(grpc_metadata_array *metadata_array TSRMLS_DC); /* Populates a grpc_metadata_array with the data in a PHP array object. Returns true on success and false on failure */ diff --git a/src/php/ext/grpc/call_credentials.c b/src/php/ext/grpc/call_credentials.c index 285c4e7c85612ade2993be1c4beb62345fb7e65e..ec0e6b91813c44e1bf73b10925a8aeecd3aabf67 100644 --- a/src/php/ext/grpc/call_credentials.c +++ b/src/php/ext/grpc/call_credentials.c @@ -83,7 +83,7 @@ zend_object_value create_wrapped_grpc_call_credentials( return retval; } -zval *grpc_php_wrap_call_credentials(grpc_call_credentials *wrapped) { +zval *grpc_php_wrap_call_credentials(grpc_call_credentials *wrapped TSRMLS_DC) { zval *credentials_object; MAKE_STD_ZVAL(credentials_object); object_init_ex(credentials_object, grpc_ce_call_credentials); @@ -122,7 +122,7 @@ PHP_METHOD(CallCredentials, createComposite) { grpc_call_credentials *creds = grpc_composite_call_credentials_create(cred1->wrapped, cred2->wrapped, NULL); - zval *creds_object = grpc_php_wrap_call_credentials(creds); + zval *creds_object = grpc_php_wrap_call_credentials(creds TSRMLS_CC); RETURN_DESTROY_ZVAL(creds_object); } @@ -141,7 +141,7 @@ PHP_METHOD(CallCredentials, createFromPlugin) { memset(fci_cache, 0, sizeof(zend_fcall_info_cache)); /* "f" == 1 function */ - if (zend_parse_parameters(ZEND_NUM_ARGS(), "f", fci, + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "f", fci, fci_cache, fci->params, fci->param_count) == FAILURE) { @@ -167,7 +167,7 @@ PHP_METHOD(CallCredentials, createFromPlugin) { grpc_call_credentials *creds = grpc_metadata_credentials_create_from_plugin( plugin, NULL); - zval *creds_object = grpc_php_wrap_call_credentials(creds); + zval *creds_object = grpc_php_wrap_call_credentials(creds TSRMLS_CC); RETURN_DESTROY_ZVAL(creds_object); } @@ -175,6 +175,8 @@ PHP_METHOD(CallCredentials, createFromPlugin) { void plugin_get_metadata(void *ptr, grpc_auth_metadata_context context, grpc_credentials_plugin_metadata_cb cb, void *user_data) { + TSRMLS_FETCH(); + plugin_state *state = (plugin_state *)ptr; /* prepare to call the user callback function with info from the @@ -192,7 +194,7 @@ void plugin_get_metadata(void *ptr, grpc_auth_metadata_context context, state->fci->retval_ptr_ptr = &retval; /* call the user callback function */ - zend_call_function(state->fci, state->fci_cache); + zend_call_function(state->fci, state->fci_cache TSRMLS_CC); if (Z_TYPE_P(retval) != IS_ARRAY) { zend_throw_exception(spl_ce_InvalidArgumentException, diff --git a/src/php/ext/grpc/channel.c b/src/php/ext/grpc/channel.c index eba2c81424d00a4049e90f815cad01d3c8cd17ae..9f0431908f97df6f794868109551e210bc210db1 100644 --- a/src/php/ext/grpc/channel.c +++ b/src/php/ext/grpc/channel.c @@ -84,7 +84,7 @@ zend_object_value create_wrapped_grpc_channel(zend_class_entry *class_type return retval; } -void php_grpc_read_args_array(zval *args_array, grpc_channel_args *args) { +void php_grpc_read_args_array(zval *args_array, grpc_channel_args *args TSRMLS_DC) { HashTable *array_hash; HashPosition array_pointer; int args_index; @@ -168,7 +168,7 @@ PHP_METHOD(Channel, __construct) { zend_hash_del(array_hash, "credentials", 12); } } - php_grpc_read_args_array(args_array, &args); + php_grpc_read_args_array(args_array, &args TSRMLS_CC); if (creds == NULL) { channel->wrapped = grpc_insecure_channel_create(target, &args, NULL); } else { diff --git a/src/php/ext/grpc/channel.h b/src/php/ext/grpc/channel.h index 78a16ed0c9d5bab404de0cef56058c16a7ce8260..cc5823ee7f758fac1ce3855432f73fa5021866b5 100755 --- a/src/php/ext/grpc/channel.h +++ b/src/php/ext/grpc/channel.h @@ -59,6 +59,6 @@ typedef struct wrapped_grpc_channel { void grpc_init_channel(TSRMLS_D); /* Iterates through a PHP array and populates args with the contents */ -void php_grpc_read_args_array(zval *args_array, grpc_channel_args *args); +void php_grpc_read_args_array(zval *args_array, grpc_channel_args *args TSRMLS_DC); #endif /* NET_GRPC_PHP_GRPC_CHANNEL_H_ */ diff --git a/src/php/ext/grpc/channel_credentials.c b/src/php/ext/grpc/channel_credentials.c index ae9a9897fcd2137d9c9e86b5a614d626a2160799..5c537378a62de89c8298050e7052dab58c7ea368 100644 --- a/src/php/ext/grpc/channel_credentials.c +++ b/src/php/ext/grpc/channel_credentials.c @@ -82,7 +82,7 @@ zend_object_value create_wrapped_grpc_channel_credentials( return retval; } -zval *grpc_php_wrap_channel_credentials(grpc_channel_credentials *wrapped) { +zval *grpc_php_wrap_channel_credentials(grpc_channel_credentials *wrapped TSRMLS_DC) { zval *credentials_object; MAKE_STD_ZVAL(credentials_object); object_init_ex(credentials_object, grpc_ce_channel_credentials); @@ -99,7 +99,7 @@ zval *grpc_php_wrap_channel_credentials(grpc_channel_credentials *wrapped) { */ PHP_METHOD(ChannelCredentials, createDefault) { grpc_channel_credentials *creds = grpc_google_default_credentials_create(); - zval *creds_object = grpc_php_wrap_channel_credentials(creds); + zval *creds_object = grpc_php_wrap_channel_credentials(creds TSRMLS_CC); RETURN_DESTROY_ZVAL(creds_object); } @@ -134,7 +134,7 @@ PHP_METHOD(ChannelCredentials, createSsl) { grpc_channel_credentials *creds = grpc_ssl_credentials_create( pem_root_certs, pem_key_cert_pair.private_key == NULL ? NULL : &pem_key_cert_pair, NULL); - zval *creds_object = grpc_php_wrap_channel_credentials(creds); + zval *creds_object = grpc_php_wrap_channel_credentials(creds TSRMLS_CC); RETURN_DESTROY_ZVAL(creds_object); } @@ -165,7 +165,7 @@ PHP_METHOD(ChannelCredentials, createComposite) { grpc_channel_credentials *creds = grpc_composite_channel_credentials_create(cred1->wrapped, cred2->wrapped, NULL); - zval *creds_object = grpc_php_wrap_channel_credentials(creds); + zval *creds_object = grpc_php_wrap_channel_credentials(creds TSRMLS_CC); RETURN_DESTROY_ZVAL(creds_object); } diff --git a/src/php/ext/grpc/server.c b/src/php/ext/grpc/server.c index ca129e76ca1d1678110383852ef64cbe0993d172..6df2e4f97821d1af8e023caf4e4061e0a26bf48b 100644 --- a/src/php/ext/grpc/server.c +++ b/src/php/ext/grpc/server.c @@ -111,7 +111,7 @@ PHP_METHOD(Server, __construct) { if (args_array == NULL) { server->wrapped = grpc_server_create(NULL, NULL); } else { - php_grpc_read_args_array(args_array, &args); + php_grpc_read_args_array(args_array, &args TSRMLS_CC); server->wrapped = grpc_server_create(&args, NULL); efree(args.args); } @@ -154,12 +154,12 @@ PHP_METHOD(Server, requestCall) { 1 TSRMLS_CC); goto cleanup; } - add_property_zval(result, "call", grpc_php_wrap_call(call, true)); + add_property_zval(result, "call", grpc_php_wrap_call(call, true TSRMLS_CC)); add_property_string(result, "method", details.method, true); add_property_string(result, "host", details.host, true); add_property_zval(result, "absolute_deadline", - grpc_php_wrap_timeval(details.deadline)); - add_property_zval(result, "metadata", grpc_parse_metadata_array(&metadata)); + grpc_php_wrap_timeval(details.deadline TSRMLS_CC)); + add_property_zval(result, "metadata", grpc_parse_metadata_array(&metadata TSRMLS_CC)); cleanup: grpc_call_details_destroy(&details); grpc_metadata_array_destroy(&metadata); diff --git a/src/php/ext/grpc/server_credentials.c b/src/php/ext/grpc/server_credentials.c index f3951b31feec5cd2fdad5927f7fc0ce688cc08f6..505da10a282885310a6f3ff51ff68b78ceab0824 100644 --- a/src/php/ext/grpc/server_credentials.c +++ b/src/php/ext/grpc/server_credentials.c @@ -81,7 +81,7 @@ zend_object_value create_wrapped_grpc_server_credentials( return retval; } -zval *grpc_php_wrap_server_credentials(grpc_server_credentials *wrapped) { +zval *grpc_php_wrap_server_credentials(grpc_server_credentials *wrapped TSRMLS_DC) { zval *server_credentials_object; MAKE_STD_ZVAL(server_credentials_object); object_init_ex(server_credentials_object, grpc_ce_server_credentials); @@ -120,7 +120,7 @@ PHP_METHOD(ServerCredentials, createSsl) { grpc_server_credentials *creds = grpc_ssl_server_credentials_create_ex( pem_root_certs, &pem_key_cert_pair, 1, GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE, NULL); - zval *creds_object = grpc_php_wrap_server_credentials(creds); + zval *creds_object = grpc_php_wrap_server_credentials(creds TSRMLS_CC); RETURN_DESTROY_ZVAL(creds_object); } diff --git a/src/php/ext/grpc/timeval.c b/src/php/ext/grpc/timeval.c index 4fd069e19a177e0b585a44e8987dbc133790c7d0..5e242162a8cb65b18924cc42403a8cac333d07bb 100644 --- a/src/php/ext/grpc/timeval.c +++ b/src/php/ext/grpc/timeval.c @@ -72,7 +72,7 @@ zend_object_value create_wrapped_grpc_timeval(zend_class_entry *class_type return retval; } -zval *grpc_php_wrap_timeval(gpr_timespec wrapped) { +zval *grpc_php_wrap_timeval(gpr_timespec wrapped TSRMLS_DC) { zval *timeval_object; MAKE_STD_ZVAL(timeval_object); object_init_ex(timeval_object, grpc_ce_timeval); @@ -122,7 +122,7 @@ PHP_METHOD(Timeval, add) { wrapped_grpc_timeval *other = (wrapped_grpc_timeval *)zend_object_store_get_object(other_obj TSRMLS_CC); zval *sum = - grpc_php_wrap_timeval(gpr_time_add(self->wrapped, other->wrapped)); + grpc_php_wrap_timeval(gpr_time_add(self->wrapped, other->wrapped) TSRMLS_CC); RETURN_DESTROY_ZVAL(sum); } @@ -146,7 +146,7 @@ PHP_METHOD(Timeval, subtract) { wrapped_grpc_timeval *other = (wrapped_grpc_timeval *)zend_object_store_get_object(other_obj TSRMLS_CC); zval *diff = - grpc_php_wrap_timeval(gpr_time_sub(self->wrapped, other->wrapped)); + grpc_php_wrap_timeval(gpr_time_sub(self->wrapped, other->wrapped) TSRMLS_CC); RETURN_DESTROY_ZVAL(diff); } @@ -208,7 +208,7 @@ PHP_METHOD(Timeval, similar) { * @return Timeval The current time */ PHP_METHOD(Timeval, now) { - zval *now = grpc_php_wrap_timeval(gpr_now(GPR_CLOCK_REALTIME)); + zval *now = grpc_php_wrap_timeval(gpr_now(GPR_CLOCK_REALTIME) TSRMLS_CC); RETURN_DESTROY_ZVAL(now); } @@ -218,7 +218,7 @@ PHP_METHOD(Timeval, now) { */ PHP_METHOD(Timeval, zero) { zval *grpc_php_timeval_zero = - grpc_php_wrap_timeval(gpr_time_0(GPR_CLOCK_REALTIME)); + grpc_php_wrap_timeval(gpr_time_0(GPR_CLOCK_REALTIME) TSRMLS_CC); RETURN_ZVAL(grpc_php_timeval_zero, false, /* Copy original before returning? */ true /* Destroy original before returning */); @@ -230,7 +230,7 @@ PHP_METHOD(Timeval, zero) { */ PHP_METHOD(Timeval, infFuture) { zval *grpc_php_timeval_inf_future = - grpc_php_wrap_timeval(gpr_inf_future(GPR_CLOCK_REALTIME)); + grpc_php_wrap_timeval(gpr_inf_future(GPR_CLOCK_REALTIME) TSRMLS_CC); RETURN_DESTROY_ZVAL(grpc_php_timeval_inf_future); } @@ -240,7 +240,7 @@ PHP_METHOD(Timeval, infFuture) { */ PHP_METHOD(Timeval, infPast) { zval *grpc_php_timeval_inf_past = - grpc_php_wrap_timeval(gpr_inf_past(GPR_CLOCK_REALTIME)); + grpc_php_wrap_timeval(gpr_inf_past(GPR_CLOCK_REALTIME) TSRMLS_CC); RETURN_DESTROY_ZVAL(grpc_php_timeval_inf_past); } diff --git a/src/php/ext/grpc/timeval.h b/src/php/ext/grpc/timeval.h index 07cef037cb526dbf4a66ace34678fee9841a62d6..7456eb6d58ca8d8657d5b0c9aeb6f3b83a538ba8 100755 --- a/src/php/ext/grpc/timeval.h +++ b/src/php/ext/grpc/timeval.h @@ -63,6 +63,6 @@ void grpc_init_timeval(TSRMLS_D); void grpc_shutdown_timeval(TSRMLS_D); /* Creates a Timeval object that wraps the given timeval struct */ -zval *grpc_php_wrap_timeval(gpr_timespec wrapped); +zval *grpc_php_wrap_timeval(gpr_timespec wrapped TSRMLS_DC); #endif /* NET_GRPC_PHP_GRPC_TIMEVAL_H_ */ diff --git a/src/php/tests/interop/interop_client.php b/src/php/tests/interop/interop_client.php index aebf80f6bf003900c9f60c0eb7e7edfe9e718dd8..565bfce74f76728d9f23b9d9ac087431f0f1aa5f 100755 --- a/src/php/tests/interop/interop_client.php +++ b/src/php/tests/interop/interop_client.php @@ -1,7 +1,7 @@ <?php /* * - * Copyright 2015, Google Inc. + * Copyright 2015-2016, Google Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -388,141 +388,158 @@ function timeoutOnSleepingServer($stub) 'Call status was not DEADLINE_EXCEEDED'); } -$args = getopt('', ['server_host:', 'server_port:', 'test_case:', - 'use_tls::', 'use_test_ca::', - 'server_host_override:', 'oauth_scope:', - 'default_service_account:', ]); -if (!array_key_exists('server_host', $args)) { - throw new Exception('Missing argument: --server_host is required'); -} -if (!array_key_exists('server_port', $args)) { - throw new Exception('Missing argument: --server_port is required'); -} -if (!array_key_exists('test_case', $args)) { - throw new Exception('Missing argument: --test_case is required'); -} - -if ($args['server_port'] == 443) { - $server_address = $args['server_host']; -} else { - $server_address = $args['server_host'].':'.$args['server_port']; -} +function _makeStub($args) +{ + if (!array_key_exists('server_host', $args)) { + throw new Exception('Missing argument: --server_host is required'); + } + if (!array_key_exists('server_port', $args)) { + throw new Exception('Missing argument: --server_port is required'); + } + if (!array_key_exists('test_case', $args)) { + throw new Exception('Missing argument: --test_case is required'); + } -$test_case = $args['test_case']; + if ($args['server_port'] == 443) { + $server_address = $args['server_host']; + } else { + $server_address = $args['server_host'].':'.$args['server_port']; + } -$host_override = 'foo.test.google.fr'; -if (array_key_exists('server_host_override', $args)) { - $host_override = $args['server_host_override']; -} + $test_case = $args['test_case']; -$use_tls = false; -if (array_key_exists('use_tls', $args) && - $args['use_tls'] != 'false') { - $use_tls = true; -} + $host_override = 'foo.test.google.fr'; + if (array_key_exists('server_host_override', $args)) { + $host_override = $args['server_host_override']; + } -$use_test_ca = false; -if (array_key_exists('use_test_ca', $args) && - $args['use_test_ca'] != 'false') { - $use_test_ca = true; -} + $use_tls = false; + if (array_key_exists('use_tls', $args) && + $args['use_tls'] != 'false') { + $use_tls = true; + } -$opts = []; + $use_test_ca = false; + if (array_key_exists('use_test_ca', $args) && + $args['use_test_ca'] != 'false') { + $use_test_ca = true; + } -if ($use_tls) { - if ($use_test_ca) { - $ssl_credentials = Grpc\ChannelCredentials::createSsl( - file_get_contents(dirname(__FILE__).'/../data/ca.pem')); + $opts = []; + + if ($use_tls) { + if ($use_test_ca) { + $ssl_credentials = Grpc\ChannelCredentials::createSsl( + file_get_contents(dirname(__FILE__).'/../data/ca.pem')); + } else { + $ssl_credentials = Grpc\ChannelCredentials::createSsl(); + } + $opts['credentials'] = $ssl_credentials; + $opts['grpc.ssl_target_name_override'] = $host_override; } else { - $ssl_credentials = Grpc\ChannelCredentials::createSsl(); + $opts['credentials'] = Grpc\ChannelCredentials::createInsecure(); } - $opts['credentials'] = $ssl_credentials; - $opts['grpc.ssl_target_name_override'] = $host_override; -} else { - $opts['credentials'] = Grpc\ChannelCredentials::createInsecure(); -} -if (in_array($test_case, ['service_account_creds', - 'compute_engine_creds', 'jwt_token_creds', ])) { - if ($test_case == 'jwt_token_creds') { - $auth_credentials = ApplicationDefaultCredentials::getCredentials(); - } else { + if (in_array($test_case, ['service_account_creds', + 'compute_engine_creds', 'jwt_token_creds', ])) { + if ($test_case == 'jwt_token_creds') { + $auth_credentials = ApplicationDefaultCredentials::getCredentials(); + } else { + $auth_credentials = ApplicationDefaultCredentials::getCredentials( + $args['oauth_scope'] + ); + } + $opts['update_metadata'] = $auth_credentials->getUpdateMetadataFunc(); + } + + if ($test_case == 'oauth2_auth_token') { $auth_credentials = ApplicationDefaultCredentials::getCredentials( $args['oauth_scope'] ); + $token = $auth_credentials->fetchAuthToken(); + $update_metadata = + function ($metadata, + $authUri = null, + ClientInterface $client = null) use ($token) { + $metadata_copy = $metadata; + $metadata_copy[CredentialsLoader::AUTH_METADATA_KEY] = + [sprintf('%s %s', + $token['token_type'], + $token['access_token'])]; + + return $metadata_copy; + }; + $opts['update_metadata'] = $update_metadata; } - $opts['update_metadata'] = $auth_credentials->getUpdateMetadataFunc(); + + $stub = new grpc\testing\TestServiceClient($server_address, $opts); + + return $stub; } -if ($test_case == 'oauth2_auth_token') { - $auth_credentials = ApplicationDefaultCredentials::getCredentials( - $args['oauth_scope'] - ); - $token = $auth_credentials->fetchAuthToken(); - $update_metadata = - function ($metadata, - $authUri = null, - ClientInterface $client = null) use ($token) { - $metadata_copy = $metadata; - $metadata_copy[CredentialsLoader::AUTH_METADATA_KEY] = - [sprintf('%s %s', - $token['token_type'], - $token['access_token'])]; - - return $metadata_copy; - }; - $opts['update_metadata'] = $update_metadata; +function interop_main($args, $stub = false) { + if (!$stub) { + $stub = _makeStub($args); + } + + $test_case = $args['test_case']; + echo "Running test case $test_case\n"; + + switch ($test_case) { + case 'empty_unary': + emptyUnary($stub); + break; + case 'large_unary': + largeUnary($stub); + break; + case 'client_streaming': + clientStreaming($stub); + break; + case 'server_streaming': + serverStreaming($stub); + break; + case 'ping_pong': + pingPong($stub); + break; + case 'empty_stream': + emptyStream($stub); + break; + case 'cancel_after_begin': + cancelAfterBegin($stub); + break; + case 'cancel_after_first_response': + cancelAfterFirstResponse($stub); + break; + case 'timeout_on_sleeping_server': + timeoutOnSleepingServer($stub); + break; + case 'service_account_creds': + serviceAccountCreds($stub, $args); + break; + case 'compute_engine_creds': + computeEngineCreds($stub, $args); + break; + case 'jwt_token_creds': + jwtTokenCreds($stub, $args); + break; + case 'oauth2_auth_token': + oauth2AuthToken($stub, $args); + break; + case 'per_rpc_creds': + perRpcCreds($stub, $args); + break; + default: + echo "Unsupported test case $test_case\n"; + exit(1); + } + + return $stub; } -$stub = new grpc\testing\TestServiceClient($server_address, $opts); - -echo "Connecting to $server_address\n"; -echo "Running test case $test_case\n"; - -switch ($test_case) { - case 'empty_unary': - emptyUnary($stub); - break; - case 'large_unary': - largeUnary($stub); - break; - case 'client_streaming': - clientStreaming($stub); - break; - case 'server_streaming': - serverStreaming($stub); - break; - case 'ping_pong': - pingPong($stub); - break; - case 'empty_stream': - emptyStream($stub); - break; - case 'cancel_after_begin': - cancelAfterBegin($stub); - break; - case 'cancel_after_first_response': - cancelAfterFirstResponse($stub); - break; - case 'timeout_on_sleeping_server': - timeoutOnSleepingServer($stub); - break; - case 'service_account_creds': - serviceAccountCreds($stub, $args); - break; - case 'compute_engine_creds': - computeEngineCreds($stub, $args); - break; - case 'jwt_token_creds': - jwtTokenCreds($stub, $args); - break; - case 'oauth2_auth_token': - oauth2AuthToken($stub, $args); - break; - case 'per_rpc_creds': - perRpcCreds($stub, $args); - break; - default: - echo "Unsupported test case $test_case\n"; - exit(1); +if (isset($_SERVER['PHP_SELF']) && preg_match('/interop_client/', $_SERVER['PHP_SELF'])) { + $args = getopt('', ['server_host:', 'server_port:', 'test_case:', + 'use_tls::', 'use_test_ca::', + 'server_host_override:', 'oauth_scope:', + 'default_service_account:', ]); + interop_main($args); } diff --git a/src/php/tests/interop/metrics_client.php b/src/php/tests/interop/metrics_client.php new file mode 100644 index 0000000000000000000000000000000000000000..46f4212f773c381ad47cac8574b8404f56233dec --- /dev/null +++ b/src/php/tests/interop/metrics_client.php @@ -0,0 +1,49 @@ +<?php +/* + * + * 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. + * + */ + +$args = getopt('', ['metrics_server_address:', 'total_only::']); +$parts = explode(':', $args['metrics_server_address']); +$server_host = $parts[0]; +$server_port = (count($parts) == 2) ? $parts[1] : ''; + +$socket = socket_create(AF_INET, SOCK_STREAM, 0); +if (@!socket_connect($socket, $server_host, $server_port)) { + echo "Cannot connect to merics server...\n"; + exit(1); +} +socket_write($socket, 'qps'); +while ($out = socket_read($socket, 1024)) { + echo "$out\n"; +} +socket_close($socket); diff --git a/src/php/tests/interop/stress_client.php b/src/php/tests/interop/stress_client.php new file mode 100644 index 0000000000000000000000000000000000000000..2339f0d105d06f553330ae746caa8406aeb4b3a7 --- /dev/null +++ b/src/php/tests/interop/stress_client.php @@ -0,0 +1,116 @@ +<?php +/* + * + * 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_once('interop_client.php'); + +function stress_main($args) { + mt_srand(); + set_time_limit(0); + + // open socket to listen as metrics server + $socket = socket_create(AF_INET, SOCK_STREAM, 0); + socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1); + if (@!socket_bind($socket, 'localhost', $args['metrics_port'])) { + echo "Cannot create socket for metrics server...\n"; + exit(1); + } + socket_listen($socket); + socket_set_nonblock($socket); + + $start_time = microtime(true); + $count = 0; + $deadline = $args['test_duration_secs'] ? + ($start_time + $args['test_duration_secs']) : false; + $num_test_cases = count($args['test_cases']); + $stub = false; + + while (true) { + $current_time = microtime(true); + if ($deadline && $current_time > $deadline) { + break; + } + if ($client_connection = socket_accept($socket)) { + // there is an incoming request, respond with qps metrics + $input = socket_read($client_connection, 1024); + $qps = round($count / ($current_time - $start_time)); + socket_write($client_connection, "qps: $qps"); + socket_close($client_connection); + } else { + // do actual work, run one interop test case + $args['test_case'] = + $args['test_cases'][mt_rand(0, $num_test_cases - 1)]; + $stub = @interop_main($args, $stub); + $count++; + } + } + socket_close($socket); + echo "Number of interop tests run in $args[test_duration_secs] seconds: $count.\n"; +} + +// process command line arguments +$raw_args = getopt('', + ['server_addresses::', + 'test_cases:', + 'metrics_port::', + 'test_duration_secs::', + 'num_channels_per_server::', + 'num_stubs_per_channel::']); + +$args = []; + +if (empty($raw_args['server_addresses'])) { + $args['server_host'] = 'localhost'; + $args['server_port'] = '8080'; +} else { + $parts = explode(':', $raw_args['server_addresses']); + $args['server_host'] = $parts[0]; + $args['server_port'] = (count($parts) == 2) ? $parts[1] : ''; +} + +$args['metrics_port'] = empty($raw_args['metrics_port']) ? + '8081' : $args['metrics_port']; + +$args['test_duration_secs'] = empty($raw_args['test_duration_secs']) || + $raw_args['test_duration_secs'] == -1 ? + false : $raw_args['test_duration_secs']; + +$test_cases = []; +$test_case_strs = explode(',', $raw_args['test_cases']); +foreach ($test_case_strs as $test_case_str) { + $parts = explode(':', $test_case_str); + $test_cases = array_merge($test_cases, array_fill(0, $parts[1], $parts[0])); +} +$args['test_cases'] = $test_cases; + +stress_main($args); diff --git a/src/proto/grpc/lb/v0/load_balancer.options b/src/proto/grpc/lb/v0/load_balancer.options deleted file mode 100644 index 6d4528f838a4c819c5b183bac9edb2db67200356..0000000000000000000000000000000000000000 --- a/src/proto/grpc/lb/v0/load_balancer.options +++ /dev/null @@ -1,6 +0,0 @@ -grpc.lb.v0.InitialLoadBalanceRequest.name max_size:128 -grpc.lb.v0.InitialLoadBalanceResponse.client_config max_size:64 -grpc.lb.v0.InitialLoadBalanceResponse.load_balancer_delegate max_size:64 -grpc.lb.v0.Server.ip_address max_size:46 -grpc.lb.v0.Server.load_balance_token max_size:64 -load_balancer.proto no_unions:true diff --git a/src/proto/grpc/lb/v1/load_balancer.options b/src/proto/grpc/lb/v1/load_balancer.options new file mode 100644 index 0000000000000000000000000000000000000000..d90366996e7bdf7e408f99bf01ee6b7714128e46 --- /dev/null +++ b/src/proto/grpc/lb/v1/load_balancer.options @@ -0,0 +1,6 @@ +grpc.lb.v1.InitialLoadBalanceRequest.name max_size:128 +grpc.lb.v1.InitialLoadBalanceResponse.client_config max_size:64 +grpc.lb.v1.InitialLoadBalanceResponse.load_balancer_delegate max_size:64 +grpc.lb.v1.Server.ip_address max_size:46 +grpc.lb.v1.Server.load_balance_token max_size:64 +load_balancer.proto no_unions:true diff --git a/src/proto/grpc/lb/v0/load_balancer.proto b/src/proto/grpc/lb/v1/load_balancer.proto similarity index 94% rename from src/proto/grpc/lb/v0/load_balancer.proto rename to src/proto/grpc/lb/v1/load_balancer.proto index e88a4f8c4a7eb7e949daeadfc61becd108a41737..1bcad0b1d4b3f6cdb315c8d99f5a4ec3f5ea341e 100644 --- a/src/proto/grpc/lb/v0/load_balancer.proto +++ b/src/proto/grpc/lb/v1/load_balancer.proto @@ -29,7 +29,7 @@ syntax = "proto3"; -package grpc.lb.v0; +package grpc.lb.v1; message Duration { @@ -94,9 +94,8 @@ message LoadBalanceResponse { message InitialLoadBalanceResponse { oneof initial_response_type { - // Contains gRPC config options like RPC deadline or flow control. - // TODO(yetianx): Change to ClientConfig after it is defined. - string client_config = 1; + // TODO(zhangkun83): ClientConfig not yet defined + //ClientConfig client_config = 1; // This is an application layer redirect that indicates the client should // use the specified server for load balancing. When this field is set in @@ -134,9 +133,7 @@ message Server { // An opaque token that is passed from the client to the server in metadata. // The server may expect this token to indicate that the request from the // client was load balanced. - // TODO(yetianx): Not used right now, and will be used after implementing - // load report. - bytes load_balance_token = 3; + string load_balance_token = 3; // Indicates whether this particular request should be dropped by the client // when this server is chosen from the list. diff --git a/src/proto/grpc/reflection/v1alpha/reflection.proto b/src/proto/grpc/reflection/v1alpha/reflection.proto new file mode 100644 index 0000000000000000000000000000000000000000..276ff0e255d9647e6d053d1db0f8b46ea73e7c03 --- /dev/null +++ b/src/proto/grpc/reflection/v1alpha/reflection.proto @@ -0,0 +1,151 @@ +// 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. + +// Service exported by server reflection + +syntax = "proto3"; + +package grpc.reflection.v1alpha; + +service ServerReflection { + // The reflection service is structured as a bidirectional stream, ensuring + // all related requests go to a single server. + rpc ServerReflectionInfo(stream ServerReflectionRequest) + returns (stream ServerReflectionResponse); +} + +// The message sent by the client when calling ServerReflectionInfo method. +message ServerReflectionRequest { + string host = 1; + // To use reflection service, the client should set one of the following + // fields in message_request. The server distinguishes requests by their + // defined field and then handles them using corresponding methods. + oneof message_request { + // Find a proto file by the file name. + string file_by_filename = 3; + + // Find the proto file that declares the given fully-qualified symbol name. + // This field should be a fully-qualified symbol name + // (e.g. <package>.<service>[.<method>] or <package>.<type>). + string file_containing_symbol = 4; + + // Find the proto file which defines an extension extending the given + // message type with the given field number. + ExtensionRequest file_containing_extension = 5; + + // Finds the tag numbers used by all known extensions of extendee_type, and + // appends them to ExtensionNumberResponse in an undefined order. + // Its corresponding method is best-effort: it's not guaranteed that the + // reflection service will implement this method, and it's not guaranteed + // that this method will provide all extensions. Returns + // StatusCode::UNIMPLEMENTED if it's not implemented. + // This field should be a fully-qualified type name. The format is + // <package>.<type> + string all_extension_numbers_of_type = 6; + + // List the full names of registered services. The content will not be + // checked. + string list_services = 7; + } +} + +// The type name and extension number sent by the client when requesting +// file_containing_extension. +message ExtensionRequest { + // Fully-qualified type name. The format should be <package>.<type> + string containing_type = 1; + int32 extension_number = 2; +} + +// The message sent by the server to answer ServerReflectionInfo method. +message ServerReflectionResponse { + string valid_host = 1; + ServerReflectionRequest original_request = 2; + // The server set one of the following fields accroding to the message_request + // in the request. + oneof message_response { + // This message is used to answer file_by_filename, file_containing_symbol, + // file_containing_extension requests with transitive dependencies. As + // the repeated label is not allowed in oneof fields, we use a + // FileDescriptorResponse message to encapsulate the repeated fields. + // The reflection service is allowed to avoid sending FileDescriptorProtos + // that were previously sent in response to earlier requests in the stream. + FileDescriptorResponse file_descriptor_response = 4; + + // This message is used to answer all_extension_numbers_of_type requst. + ExtensionNumberResponse all_extension_numbers_response = 5; + + // This message is used to answer list_services request. + ListServiceResponse list_services_response = 6; + + // This message is used when an error occurs. + ErrorResponse error_response = 7; + } +} + +// Serialized FileDescriptorProto messages sent by the server answering +// a file_by_filename, file_containing_symbol, or file_containing_extension +// request. +message FileDescriptorResponse { + // Serialized FileDescriptorProto messages. We avoid taking a dependency on + // descriptor.proto, which uses proto2 only features, by making them opaque + // bytes instead. + repeated bytes file_descriptor_proto = 1; +} + +// A list of extension numbers sent by the server answering +// all_extension_numbers_of_type request. +message ExtensionNumberResponse { + // Full name of the base type, including the package name. The format + // is <package>.<type> + string base_type_name = 1; + repeated int32 extension_number = 2; +} + +// A list of ServiceResponse sent by the server answering list_services request. +message ListServiceResponse { + // The information of each service may be expanded in the future, so we use + // ServiceResponse message to encapsulate it. + repeated ServiceResponse service = 1; +} + +// The information of a single service used by ListServiceResponse to answer +// list_services request. +message ServiceResponse { + // Full name of a registered service, including its package name. The format + // is <package>.<service> + string name = 1; +} + +// The error code and error message sent by the server when an error occurs. +message ErrorResponse { + // This field uses the error codes defined in grpc::StatusCode. + int32 error_code = 1; + string error_message = 2; +} diff --git a/src/proto/grpc/testing/echo.proto b/src/proto/grpc/testing/echo.proto index 0eef53a92a14ef45f1847ab5c3b9ca987ced899b..c596aabfcc445f06f7c6c7f44efdad2b3b7db1a8 100644 --- a/src/proto/grpc/testing/echo.proto +++ b/src/proto/grpc/testing/echo.proto @@ -45,3 +45,7 @@ service EchoTestService { service UnimplementedService { rpc Unimplemented(EchoRequest) returns (EchoResponse); } + +// A service without any rpc defined to test coverage. +service NoRpcService { +} diff --git a/src/proto/grpc/testing/echo_messages.proto b/src/proto/grpc/testing/echo_messages.proto index 1be1966f101486b5f57b3cddac87a31cea9a63d4..b405acf043123999a5381a999ba5304268860010 100644 --- a/src/proto/grpc/testing/echo_messages.proto +++ b/src/proto/grpc/testing/echo_messages.proto @@ -32,6 +32,12 @@ syntax = "proto3"; package grpc.testing; +// Message to be echoed back serialized in trailer. +message DebugInfo { + repeated string stack_entries = 1; + string detail = 2; +} + message RequestParams { bool echo_deadline = 1; int32 client_cancel_after_us = 2; @@ -43,6 +49,7 @@ message RequestParams { string expected_client_identity = 8; // will force check_auth_context. bool skip_cancelled_check = 9; string expected_transport_security_type = 10; + DebugInfo debug_info = 11; } message EchoRequest { diff --git a/src/python/grpcio/README.rst b/src/python/grpcio/README.rst index cb3f6b87fe4ff60a613f615006d773815567299c..afc4fe6a37059aad67c3a733c5c5df1a3dc782bc 100644 --- a/src/python/grpcio/README.rst +++ b/src/python/grpcio/README.rst @@ -48,6 +48,7 @@ package named :code:`python-dev`). $ export REPO_ROOT=grpc # REPO_ROOT can be any directory of your choice $ git clone https://github.com/grpc/grpc.git $REPO_ROOT $ cd $REPO_ROOT + $ git submodule update --init # For the next two commands do `sudo pip install` if you get permission-denied errors $ pip install -rrequirements.txt diff --git a/src/python/grpcio/grpc/__init__.py b/src/python/grpcio/grpc/__init__.py index 708651910607ffb686d781713f6893567821b9fd..b844a14c48d7a7991d10c8c97a6c82012646b3dc 100644 --- a/src/python/grpcio/grpc/__init__.py +++ b/src/python/grpcio/grpc/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2015, Google Inc. +# Copyright 2015-2016, Google Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -27,4 +27,5 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +__import__('pkg_resources').declare_namespace(__name__) diff --git a/src/python/grpcio/grpc/_adapter/_low.py b/src/python/grpcio/grpc/_adapter/_low.py index b13d8dd9dda1f8e92e45d3fc5c18be1e7be2896f..00788bd4cf83cd18da118a87cc2f4b3ba0edbc45 100644 --- a/src/python/grpcio/grpc/_adapter/_low.py +++ b/src/python/grpcio/grpc/_adapter/_low.py @@ -195,26 +195,30 @@ class Call(_types.Call): translated_op = cygrpc.operation_send_initial_metadata( cygrpc.Metadata( cygrpc.Metadatum(key, value) - for key, value in op.initial_metadata)) + for key, value in op.initial_metadata), + op.flags) elif op.type == _types.OpType.SEND_MESSAGE: - translated_op = cygrpc.operation_send_message(op.message) + translated_op = cygrpc.operation_send_message(op.message, op.flags) elif op.type == _types.OpType.SEND_CLOSE_FROM_CLIENT: - translated_op = cygrpc.operation_send_close_from_client() + translated_op = cygrpc.operation_send_close_from_client(op.flags) elif op.type == _types.OpType.SEND_STATUS_FROM_SERVER: translated_op = cygrpc.operation_send_status_from_server( cygrpc.Metadata( cygrpc.Metadatum(key, value) for key, value in op.trailing_metadata), op.status.code, - op.status.details) + op.status.details, + op.flags) elif op.type == _types.OpType.RECV_INITIAL_METADATA: - translated_op = cygrpc.operation_receive_initial_metadata() + translated_op = cygrpc.operation_receive_initial_metadata( + op.flags) elif op.type == _types.OpType.RECV_MESSAGE: - translated_op = cygrpc.operation_receive_message() + translated_op = cygrpc.operation_receive_message(op.flags) elif op.type == _types.OpType.RECV_STATUS_ON_CLIENT: - translated_op = cygrpc.operation_receive_status_on_client() + translated_op = cygrpc.operation_receive_status_on_client( + op.flags) elif op.type == _types.OpType.RECV_CLOSE_ON_SERVER: - translated_op = cygrpc.operation_receive_close_on_server() + translated_op = cygrpc.operation_receive_close_on_server(op.flags) else: raise ValueError('unexpected operation type {}'.format(op.type)) translated_ops.append(translated_op) diff --git a/src/python/grpcio/grpc/_adapter/_types.py b/src/python/grpcio/grpc/_adapter/_types.py index 8ca7ff4b6087958d597e66d9fa4add9189525301..f8405949d4361e2a35c791d6fe26e75f68fb2c67 100644 --- a/src/python/grpcio/grpc/_adapter/_types.py +++ b/src/python/grpcio/grpc/_adapter/_types.py @@ -152,7 +152,7 @@ class OpArgs(collections.namedtuple( 'trailing_metadata', 'message', 'status', - 'write_flags', + 'flags', ])): """Arguments passed into a GRPC operation. @@ -165,7 +165,7 @@ class OpArgs(collections.namedtuple( message (bytes): Only valid if type == OpType.SEND_MESSAGE, else is None. status (Status): Only valid if type == OpType.SEND_STATUS_FROM_SERVER, else is None. - write_flags (int): a bit OR'ing of 0 or more OpWriteFlags values. + flags (int): a bitwise OR'ing of 0 or more OpWriteFlags values. """ @staticmethod diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxi index 3d158a77075ace2f330cb0d2127b9f8333babbbb..66e6e6b549a3e6ffe9323ed7b7ec50f9ca00bb1f 100644 --- a/src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxi +++ b/src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxi @@ -140,6 +140,9 @@ cdef extern from "grpc/_cython/loader.h": const char *GRPC_ARG_PRIMARY_USER_AGENT_STRING const char *GRPC_ARG_SECONDARY_USER_AGENT_STRING const char *GRPC_SSL_TARGET_NAME_OVERRIDE_ARG + const char *GRPC_COMPRESSION_CHANNEL_DEFAULT_ALGORITHM + const char *GRPC_COMPRESSION_CHANNEL_DEFAULT_LEVEL + const char *GRPC_COMPRESSION_CHANNEL_ENABLED_ALGORITHMS_BITSET const int GRPC_WRITE_BUFFER_HINT const int GRPC_WRITE_NO_COMPRESS @@ -425,3 +428,38 @@ cdef extern from "grpc/_cython/loader.h": grpc_call_credentials *grpc_metadata_credentials_create_from_plugin( grpc_metadata_credentials_plugin plugin, void *reserved) nogil + + ctypedef enum grpc_compression_algorithm: + GRPC_COMPRESS_NONE + GRPC_COMPRESS_DEFLATE + GRPC_COMPRESS_GZIP + GRPC_COMPRESS_ALGORITHMS_COUNT + + ctypedef enum grpc_compression_level: + GRPC_COMPRESS_LEVEL_NONE + GRPC_COMPRESS_LEVEL_LOW + GRPC_COMPRESS_LEVEL_MED + GRPC_COMPRESS_LEVEL_HIGH + GRPC_COMPRESS_LEVEL_COUNT + + ctypedef struct grpc_compression_options: + uint32_t enabled_algorithms_bitset + grpc_compression_algorithm default_compression_algorithm + + int grpc_compression_algorithm_parse( + const char *name, size_t name_length, + grpc_compression_algorithm *algorithm) nogil + int grpc_compression_algorithm_name(grpc_compression_algorithm algorithm, + char **name) nogil + grpc_compression_algorithm grpc_compression_algorithm_for_level( + grpc_compression_level level, uint32_t accepted_encodings) nogil + void grpc_compression_options_init(grpc_compression_options *opts) nogil + void grpc_compression_options_enable_algorithm( + grpc_compression_options *opts, + grpc_compression_algorithm algorithm) nogil + void grpc_compression_options_disable_algorithm( + grpc_compression_options *opts, + grpc_compression_algorithm algorithm) nogil + int grpc_compression_options_is_algorithm_enabled( + const grpc_compression_options *opts, + grpc_compression_algorithm algorithm) nogil diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/records.pxd.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/records.pxd.pxi index 30397818a15a9496552ce3836e0fd7454cd80414..0474697af82f18e4fe08788df311caa0c051be07 100644 --- a/src/python/grpcio/grpc/_cython/_cygrpc/records.pxd.pxi +++ b/src/python/grpcio/grpc/_cython/_cygrpc/records.pxd.pxi @@ -124,3 +124,7 @@ cdef class Operations: cdef size_t c_nops cdef list operations + +cdef class CompressionOptions: + + cdef grpc_compression_options c_options diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/records.pyx.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/records.pyx.pxi index c2202bdab2d19269f9800a9a9d3a8420dd4faebe..c7539f0d49079dbe84fc5f5c1b4e0587ef35057b 100644 --- a/src/python/grpcio/grpc/_cython/_cygrpc/records.pyx.pxi +++ b/src/python/grpcio/grpc/_cython/_cygrpc/records.pyx.pxi @@ -103,6 +103,19 @@ class OperationType: receive_close_on_server = GRPC_OP_RECV_CLOSE_ON_SERVER +class CompressionAlgorithm: + none = GRPC_COMPRESS_NONE + deflate = GRPC_COMPRESS_DEFLATE + gzip = GRPC_COMPRESS_GZIP + + +class CompressionLevel: + none = GRPC_COMPRESS_LEVEL_NONE + low = GRPC_COMPRESS_LEVEL_LOW + medium = GRPC_COMPRESS_LEVEL_MED + high = GRPC_COMPRESS_LEVEL_HIGH + + cdef class Timespec: def __cinit__(self, time): @@ -472,6 +485,10 @@ cdef class Operation: def type(self): return self.c_op.type + @property + def flags(self): + return self.c_op.flags + @property def has_status(self): return self.c_op.type == GRPC_OP_RECV_STATUS_ON_CLIENT @@ -553,9 +570,10 @@ cdef class Operation: with nogil: gpr_free(self._received_status_details) -def operation_send_initial_metadata(Metadata metadata): +def operation_send_initial_metadata(Metadata metadata, int flags): cdef Operation op = Operation() op.c_op.type = GRPC_OP_SEND_INITIAL_METADATA + op.c_op.flags = flags op.c_op.data.send_initial_metadata.count = metadata.c_metadata_array.count op.c_op.data.send_initial_metadata.metadata = ( metadata.c_metadata_array.metadata) @@ -563,23 +581,25 @@ def operation_send_initial_metadata(Metadata metadata): op.is_valid = True return op -def operation_send_message(data): +def operation_send_message(data, int flags): cdef Operation op = Operation() op.c_op.type = GRPC_OP_SEND_MESSAGE + op.c_op.flags = flags byte_buffer = ByteBuffer(data) op.c_op.data.send_message = byte_buffer.c_byte_buffer op.references.append(byte_buffer) op.is_valid = True return op -def operation_send_close_from_client(): +def operation_send_close_from_client(int flags): cdef Operation op = Operation() op.c_op.type = GRPC_OP_SEND_CLOSE_FROM_CLIENT + op.c_op.flags = flags op.is_valid = True return op def operation_send_status_from_server( - Metadata metadata, grpc_status_code code, details): + Metadata metadata, grpc_status_code code, details, int flags): if isinstance(details, bytes): pass elif isinstance(details, basestring): @@ -588,6 +608,7 @@ def operation_send_status_from_server( raise TypeError("expected a str or bytes object for details") cdef Operation op = Operation() op.c_op.type = GRPC_OP_SEND_STATUS_FROM_SERVER + op.c_op.flags = flags op.c_op.data.send_status_from_server.trailing_metadata_count = ( metadata.c_metadata_array.count) op.c_op.data.send_status_from_server.trailing_metadata = ( @@ -599,18 +620,20 @@ def operation_send_status_from_server( op.is_valid = True return op -def operation_receive_initial_metadata(): +def operation_receive_initial_metadata(int flags): cdef Operation op = Operation() op.c_op.type = GRPC_OP_RECV_INITIAL_METADATA + op.c_op.flags = flags op._received_metadata = Metadata([]) op.c_op.data.receive_initial_metadata = ( &op._received_metadata.c_metadata_array) op.is_valid = True return op -def operation_receive_message(): +def operation_receive_message(int flags): cdef Operation op = Operation() op.c_op.type = GRPC_OP_RECV_MESSAGE + op.c_op.flags = flags op._received_message = ByteBuffer(None) # n.b. the c_op.data.receive_message field needs to be deleted by us, # anyway, so we just let that be handled by the ByteBuffer() we allocated @@ -619,9 +642,10 @@ def operation_receive_message(): op.is_valid = True return op -def operation_receive_status_on_client(): +def operation_receive_status_on_client(int flags): cdef Operation op = Operation() op.c_op.type = GRPC_OP_RECV_STATUS_ON_CLIENT + op.c_op.flags = flags op._received_metadata = Metadata([]) op.c_op.data.receive_status_on_client.trailing_metadata = ( &op._received_metadata.c_metadata_array) @@ -634,9 +658,10 @@ def operation_receive_status_on_client(): op.is_valid = True return op -def operation_receive_close_on_server(): +def operation_receive_close_on_server(int flags): cdef Operation op = Operation() op.c_op.type = GRPC_OP_RECV_CLOSE_ON_SERVER + op.c_op.flags = flags op.c_op.data.receive_close_on_server.cancelled = &op._received_cancelled op.is_valid = True return op @@ -692,3 +717,36 @@ cdef class Operations: def __iter__(self): return _OperationsIterator(self) + +cdef class CompressionOptions: + + def __cinit__(self): + with nogil: + grpc_compression_options_init(&self.c_options) + + def enable_algorithm(self, grpc_compression_algorithm algorithm): + with nogil: + grpc_compression_options_enable_algorithm(&self.c_options, algorithm) + + def disable_algorithm(self, grpc_compression_algorithm algorithm): + with nogil: + grpc_compression_options_disable_algorithm(&self.c_options, algorithm) + + def is_algorithm_enabled(self, grpc_compression_algorithm algorithm): + cdef int result + with nogil: + result = grpc_compression_options_is_algorithm_enabled( + &self.c_options, algorithm) + return result + + def to_channel_arg(self): + return ChannelArg(GRPC_COMPRESSION_CHANNEL_ENABLED_ALGORITHMS_BITSET, + self.c_options.enabled_algorithms_bitset) + + +def compression_algorithm_name(grpc_compression_algorithm algorithm): + cdef char* name + with nogil: + grpc_compression_algorithm_name(algorithm, &name) + # Let Cython do the right thing with string casting + return name diff --git a/src/python/grpcio/grpc/_cython/imports.generated.c b/src/python/grpcio/grpc/_cython/imports.generated.c index f0a40dbb35c54ebec079ac392fe5482eba768dd1..09551472b5f4bb7fd65c0cc36726a8d8eff3af7b 100644 --- a/src/python/grpcio/grpc/_cython/imports.generated.c +++ b/src/python/grpcio/grpc/_cython/imports.generated.c @@ -125,6 +125,7 @@ grpc_header_key_is_legal_type grpc_header_key_is_legal_import; grpc_header_nonbin_value_is_legal_type grpc_header_nonbin_value_is_legal_import; grpc_is_binary_header_type grpc_is_binary_header_import; grpc_call_error_to_string_type grpc_call_error_to_string_import; +grpc_cronet_secure_channel_create_type grpc_cronet_secure_channel_create_import; grpc_auth_property_iterator_next_type grpc_auth_property_iterator_next_import; grpc_auth_context_property_iterator_type grpc_auth_context_property_iterator_import; grpc_auth_context_peer_identity_type grpc_auth_context_peer_identity_import; @@ -395,6 +396,7 @@ void pygrpc_load_imports(HMODULE library) { grpc_header_nonbin_value_is_legal_import = (grpc_header_nonbin_value_is_legal_type) GetProcAddress(library, "grpc_header_nonbin_value_is_legal"); grpc_is_binary_header_import = (grpc_is_binary_header_type) GetProcAddress(library, "grpc_is_binary_header"); grpc_call_error_to_string_import = (grpc_call_error_to_string_type) GetProcAddress(library, "grpc_call_error_to_string"); + grpc_cronet_secure_channel_create_import = (grpc_cronet_secure_channel_create_type) GetProcAddress(library, "grpc_cronet_secure_channel_create"); grpc_auth_property_iterator_next_import = (grpc_auth_property_iterator_next_type) GetProcAddress(library, "grpc_auth_property_iterator_next"); grpc_auth_context_property_iterator_import = (grpc_auth_context_property_iterator_type) GetProcAddress(library, "grpc_auth_context_property_iterator"); grpc_auth_context_peer_identity_import = (grpc_auth_context_peer_identity_type) GetProcAddress(library, "grpc_auth_context_peer_identity"); diff --git a/src/python/grpcio/grpc/_cython/imports.generated.h b/src/python/grpcio/grpc/_cython/imports.generated.h index d5e810b7cf47bdcf6f1689b3405deb355254f2a9..6de295414ad6409aa254b4bb2d37a4e22861e061 100644 --- a/src/python/grpcio/grpc/_cython/imports.generated.h +++ b/src/python/grpcio/grpc/_cython/imports.generated.h @@ -43,6 +43,7 @@ #include <grpc/census.h> #include <grpc/compression.h> #include <grpc/grpc.h> +#include <grpc/grpc_cronet.h> #include <grpc/grpc_security.h> #include <grpc/impl/codegen/alloc.h> #include <grpc/impl/codegen/byte_buffer.h> @@ -325,6 +326,9 @@ extern grpc_is_binary_header_type grpc_is_binary_header_import; typedef const char *(*grpc_call_error_to_string_type)(grpc_call_error error); extern grpc_call_error_to_string_type grpc_call_error_to_string_import; #define grpc_call_error_to_string grpc_call_error_to_string_import +typedef grpc_channel *(*grpc_cronet_secure_channel_create_type)(void *engine, const char *target, const grpc_channel_args *args, void *reserved); +extern grpc_cronet_secure_channel_create_type grpc_cronet_secure_channel_create_import; +#define grpc_cronet_secure_channel_create grpc_cronet_secure_channel_create_import typedef const grpc_auth_property *(*grpc_auth_property_iterator_next_type)(grpc_auth_property_iterator *it); extern grpc_auth_property_iterator_next_type grpc_auth_property_iterator_next_import; #define grpc_auth_property_iterator_next grpc_auth_property_iterator_next_import @@ -866,14 +870,15 @@ void pygrpc_load_imports(HMODULE library); #else /* !GPR_WIN32 */ -#include <grpc/support/alloc.h> -#include <grpc/support/slice.h> -#include <grpc/support/time.h> -#include <grpc/status.h> #include <grpc/byte_buffer.h> #include <grpc/byte_buffer_reader.h> +#include <grpc/compression.h> #include <grpc/grpc.h> #include <grpc/grpc_security.h> +#include <grpc/support/alloc.h> +#include <grpc/support/slice.h> +#include <grpc/support/time.h> +#include <grpc/status.h> #endif /* !GPR_WIN32 */ diff --git a/src/python/grpcio/grpc/beta/interfaces.py b/src/python/grpcio/grpc/beta/interfaces.py index 33ca45ac5b28f9418a7c5b1e6c772724d7500c53..24de9ad1a8ec855e6cf0ed427fd50915936587c5 100644 --- a/src/python/grpcio/grpc/beta/interfaces.py +++ b/src/python/grpcio/grpc/beta/interfaces.py @@ -235,7 +235,7 @@ class Server(six.with_metaclass(abc.ABCMeta)): This method may be called at any time and is idempotent. Passing a smaller grace value than has been passed in a previous call will have the effect of stopping the Server sooner. Passing a larger grace value than has been - passed in a previous call will not have the effect of stopping the sooner + passed in a previous call will not have the effect of stopping the server later. Args: diff --git a/src/python/grpcio/grpc_core_dependencies.py b/src/python/grpcio/grpc_core_dependencies.py index 3608f7f104d7adc4a1ec6a0a0f829c7707e3727e..f7a5ed8788406abd1e5113545a128fb2f7104fd1 100644 --- a/src/python/grpcio/grpc_core_dependencies.py +++ b/src/python/grpcio/grpc_core_dependencies.py @@ -95,6 +95,7 @@ CORE_SOURCE_FILES = [ 'src/core/lib/iomgr/endpoint_pair_posix.c', 'src/core/lib/iomgr/endpoint_pair_windows.c', 'src/core/lib/iomgr/ev_poll_and_epoll_posix.c', + 'src/core/lib/iomgr/ev_poll_posix.c', 'src/core/lib/iomgr/ev_posix.c', 'src/core/lib/iomgr/exec_ctx.c', 'src/core/lib/iomgr/executor.c', @@ -222,8 +223,11 @@ CORE_SOURCE_FILES = [ 'src/core/ext/client_config/uri_parser.c', 'src/core/ext/transport/chttp2/server/insecure/server_chttp2.c', 'src/core/ext/transport/chttp2/client/insecure/channel_create.c', + 'src/core/ext/transport/cronet/client/secure/cronet_channel_create.c', + 'src/core/ext/transport/cronet/transport/cronet_api_dummy.c', + 'src/core/ext/transport/cronet/transport/cronet_transport.c', 'src/core/ext/lb_policy/grpclb/load_balancer_api.c', - 'src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c', + 'src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c', 'third_party/nanopb/pb_common.c', 'third_party/nanopb/pb_decode.c', 'third_party/nanopb/pb_encode.c', diff --git a/src/python/grpcio/grpc_version.py b/src/python/grpcio/grpc_version.py index 873b4e2a9131341a75eb35ecd26bee1dadb5c844..0c13104d9da1c1b22a56466bf089879998ba39d7 100644 --- a/src/python/grpcio/grpc_version.py +++ b/src/python/grpcio/grpc_version.py @@ -29,4 +29,4 @@ # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio/grpc_version.py.template`!!! -VERSION='0.14.0.dev0' +VERSION='0.15.0.dev0' diff --git a/src/python/grpcio/precompiled.py b/src/python/grpcio/precompiled.py deleted file mode 100644 index b6aa7fc90eeaafdf9f4bf780c2a6440925cb830c..0000000000000000000000000000000000000000 --- a/src/python/grpcio/precompiled.py +++ /dev/null @@ -1,114 +0,0 @@ -# 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. - -import os -import platform -import shutil -import sys -import sysconfig - -import setuptools - -import commands -import grpc_version - -try: - from urllib2 import urlopen -except ImportError: - from urllib.request import urlopen - -PYTHON_STEM = os.path.dirname(os.path.abspath(__file__)) -BINARIES_REPOSITORY = os.environ.get( - 'GRPC_PYTHON_BINARIES_REPOSITORY', - 'https://storage.googleapis.com/grpc-precompiled-binaries/python') -USE_PRECOMPILED_BINARIES = bool(int(os.environ.get( - 'GRPC_PYTHON_USE_PRECOMPILED_BINARIES', '1'))) - -def _tagged_ext_name(base): - uname = platform.uname() - tags = ( - grpc_version.VERSION, - 'py{}'.format(sysconfig.get_python_version()), - uname[0], - uname[4], - ) - ucs = 'ucs{}'.format(sysconfig.get_config_var('Py_UNICODE_SIZE')) - return '{base}-{tags}-{ucs}'.format( - base=base, tags='-'.join(tags), ucs=ucs) - - -class BuildTaggedExt(setuptools.Command): - - description = 'build the gRPC tagged extensions' - user_options = [] - - def initialize_options(self): - # distutils requires this override. - pass - - def finalize_options(self): - # distutils requires this override. - pass - - def run(self): - if 'linux' in sys.platform: - self.run_command('build_ext') - try: - os.makedirs('dist/') - except OSError: - pass - shutil.copyfile( - os.path.join(PYTHON_STEM, 'grpc/_cython/cygrpc.so'), - 'dist/{}.so'.format(_tagged_ext_name('cygrpc'))) - else: - sys.stderr.write('nothing to do for build_tagged_ext\n') - - -def update_setup_arguments(setup_arguments): - if not USE_PRECOMPILED_BINARIES: - sys.stderr.write('not using precompiled extension') - return - url = '{}/{}.so'.format(BINARIES_REPOSITORY, _tagged_ext_name('cygrpc')) - target_path = os.path.join(PYTHON_STEM, 'grpc/_cython/cygrpc.so') - try: - extension = urlopen(url).read() - except: - sys.stderr.write( - 'could not download precompiled extension: {}\n'.format(url)) - return - try: - with open(target_path, 'w') as target: - target.write(extension) - setup_arguments['ext_modules'] = [] - except: - sys.stderr.write( - 'could not write precompiled extension to directory: {} -> {}\n' - .format(url, target_path)) - return - setup_arguments['package_data']['grpc._cython'].append('cygrpc.so') diff --git a/src/python/grpcio/tests/health_check/__init__.py b/src/python/grpcio/tests/health_check/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..100a624dc9c1bbd89708c58e18cf2666a73f4cc7 --- /dev/null +++ b/src/python/grpcio/tests/health_check/__init__.py @@ -0,0 +1,28 @@ +# 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. diff --git a/src/python/grpcio/tests/health_check/_health_servicer_test.py b/src/python/grpcio/tests/health_check/_health_servicer_test.py new file mode 100644 index 0000000000000000000000000000000000000000..1b6338866351ddc02726a54ed34d282c4c4e9726 --- /dev/null +++ b/src/python/grpcio/tests/health_check/_health_servicer_test.py @@ -0,0 +1,75 @@ +# 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. + +"""Tests of grpc_health.health.v1.health.""" + +import unittest + +from grpc_health.health.v1 import health +from grpc_health.health.v1 import health_pb2 + + +class HealthServicerTest(unittest.TestCase): + + def setUp(self): + self.servicer = health.HealthServicer() + self.servicer.set('', health_pb2.HealthCheckResponse.SERVING) + self.servicer.set('grpc.test.TestServiceServing', + health_pb2.HealthCheckResponse.SERVING) + self.servicer.set('grpc.test.TestServiceUnknown', + health_pb2.HealthCheckResponse.UNKNOWN) + self.servicer.set('grpc.test.TestServiceNotServing', + health_pb2.HealthCheckResponse.NOT_SERVING) + + def test_empty_service(self): + request = health_pb2.HealthCheckRequest() + resp = self.servicer.Check(request, None) + self.assertEqual(resp.status, health_pb2.HealthCheckResponse.SERVING) + + def test_serving_service(self): + request = health_pb2.HealthCheckRequest( + service='grpc.test.TestServiceServing') + resp = self.servicer.Check(request, None) + self.assertEqual(resp.status, health_pb2.HealthCheckResponse.SERVING) + + def test_unknown_serivce(self): + request = health_pb2.HealthCheckRequest( + service='grpc.test.TestServiceUnknown') + resp = self.servicer.Check(request, None) + self.assertEqual(resp.status, health_pb2.HealthCheckResponse.UNKNOWN) + + def test_not_serving_service(self): + request = health_pb2.HealthCheckRequest( + service='grpc.test.TestServiceNotServing') + resp = self.servicer.Check(request, None) + self.assertEqual(resp.status, health_pb2.HealthCheckResponse.NOT_SERVING) + + +if __name__ == '__main__': + unittest.main(verbosity=2) diff --git a/src/python/grpcio/tests/protoc_plugin/beta_python_plugin_test.py b/src/python/grpcio/tests/protoc_plugin/beta_python_plugin_test.py index 3dc3042e38bff39f3e5258f9ef4226c021f6dc5a..7466f880597a388476936b0466c996590c83be96 100644 --- a/src/python/grpcio/tests/protoc_plugin/beta_python_plugin_test.py +++ b/src/python/grpcio/tests/protoc_plugin/beta_python_plugin_test.py @@ -59,11 +59,12 @@ STUB_FACTORY_IDENTIFIER = 'beta_create_TestService_stub' class _ServicerMethods(object): - def __init__(self, test_pb2): + def __init__(self, response_pb2, payload_pb2): self._condition = threading.Condition() self._paused = False self._fail = False - self._test_pb2 = test_pb2 + self._response_pb2 = response_pb2 + self._payload_pb2 = payload_pb2 @contextlib.contextmanager def pause(self): # pylint: disable=invalid-name @@ -90,22 +91,22 @@ class _ServicerMethods(object): self._condition.wait() def UnaryCall(self, request, unused_rpc_context): - response = self._test_pb2.SimpleResponse() - response.payload.payload_type = self._test_pb2.COMPRESSABLE + response = self._response_pb2.SimpleResponse() + response.payload.payload_type = self._payload_pb2.COMPRESSABLE response.payload.payload_compressable = 'a' * request.response_size self._control() return response def StreamingOutputCall(self, request, unused_rpc_context): for parameter in request.response_parameters: - response = self._test_pb2.StreamingOutputCallResponse() - response.payload.payload_type = self._test_pb2.COMPRESSABLE + response = self._response_pb2.StreamingOutputCallResponse() + response.payload.payload_type = self._payload_pb2.COMPRESSABLE response.payload.payload_compressable = 'a' * parameter.size self._control() yield response def StreamingInputCall(self, request_iter, unused_rpc_context): - response = self._test_pb2.StreamingInputCallResponse() + response = self._response_pb2.StreamingInputCallResponse() aggregated_payload_size = 0 for request in request_iter: aggregated_payload_size += len(request.payload.payload_compressable) @@ -116,8 +117,8 @@ class _ServicerMethods(object): def FullDuplexCall(self, request_iter, unused_rpc_context): for request in request_iter: for parameter in request.response_parameters: - response = self._test_pb2.StreamingOutputCallResponse() - response.payload.payload_type = self._test_pb2.COMPRESSABLE + response = self._response_pb2.StreamingOutputCallResponse() + response.payload.payload_type = self._payload_pb2.COMPRESSABLE response.payload.payload_compressable = 'a' * parameter.size self._control() yield response @@ -126,8 +127,8 @@ class _ServicerMethods(object): responses = [] for request in request_iter: for parameter in request.response_parameters: - response = self._test_pb2.StreamingOutputCallResponse() - response.payload.payload_type = self._test_pb2.COMPRESSABLE + response = self._response_pb2.StreamingOutputCallResponse() + response.payload.payload_type = self._payload_pb2.COMPRESSABLE response.payload.payload_compressable = 'a' * parameter.size self._control() responses.append(response) @@ -136,23 +137,25 @@ class _ServicerMethods(object): @contextlib.contextmanager -def _CreateService(test_pb2): +def _CreateService(service_pb2, response_pb2, payload_pb2): """Provides a servicer backend and a stub. The servicer is just the implementation of the actual servicer passed to the face player of the python RPC implementation; the two are detached. Args: - test_pb2: The test_pb2 module generated by this test. + service_pb2: The service_pb2 module generated by this test. + response_pb2: The response_pb2 module generated by this test + payload_pb2: The payload_pb2 module generated by this test Yields: A (servicer_methods, stub) pair where servicer_methods is the back-end of the service bound to the stub and and stub is the stub on which to invoke RPCs. """ - servicer_methods = _ServicerMethods(test_pb2) + servicer_methods = _ServicerMethods(response_pb2, payload_pb2) - class Servicer(getattr(test_pb2, SERVICER_IDENTIFIER)): + class Servicer(getattr(service_pb2, SERVICER_IDENTIFIER)): def UnaryCall(self, request, context): return servicer_methods.UnaryCall(request, context) @@ -170,55 +173,52 @@ def _CreateService(test_pb2): return servicer_methods.HalfDuplexCall(request_iter, context) servicer = Servicer() - server = getattr(test_pb2, SERVER_FACTORY_IDENTIFIER)(servicer) + server = getattr(service_pb2, SERVER_FACTORY_IDENTIFIER)(servicer) port = server.add_insecure_port('[::]:0') server.start() channel = implementations.insecure_channel('localhost', port) - stub = getattr(test_pb2, STUB_FACTORY_IDENTIFIER)(channel) - yield servicer_methods, stub + stub = getattr(service_pb2, STUB_FACTORY_IDENTIFIER)(channel) + yield (servicer_methods, stub) server.stop(0) @contextlib.contextmanager -def _CreateIncompleteService(test_pb2): +def _CreateIncompleteService(service_pb2): """Provides a servicer backend that fails to implement methods and its stub. The servicer is just the implementation of the actual servicer passed to the face player of the python RPC implementation; the two are detached. - Args: - test_pb2: The test_pb2 module generated by this test. - + service_pb2: The service_pb2 module generated by this test. Yields: A (servicer_methods, stub) pair where servicer_methods is the back-end of the service bound to the stub and and stub is the stub on which to invoke RPCs. """ - servicer_methods = _ServicerMethods(test_pb2) - class Servicer(getattr(test_pb2, SERVICER_IDENTIFIER)): + class Servicer(getattr(service_pb2, SERVICER_IDENTIFIER)): pass servicer = Servicer() - server = getattr(test_pb2, SERVER_FACTORY_IDENTIFIER)(servicer) + server = getattr(service_pb2, SERVER_FACTORY_IDENTIFIER)(servicer) port = server.add_insecure_port('[::]:0') server.start() channel = implementations.insecure_channel('localhost', port) - stub = getattr(test_pb2, STUB_FACTORY_IDENTIFIER)(channel) - yield servicer_methods, stub + stub = getattr(service_pb2, STUB_FACTORY_IDENTIFIER)(channel) + yield None, stub server.stop(0) -def _streaming_input_request_iterator(test_pb2): +def _streaming_input_request_iterator(request_pb2, payload_pb2): for _ in range(3): - request = test_pb2.StreamingInputCallRequest() - request.payload.payload_type = test_pb2.COMPRESSABLE + request = request_pb2.StreamingInputCallRequest() + request.payload.payload_type = payload_pb2.COMPRESSABLE request.payload.payload_compressable = 'a' yield request -def _streaming_output_request(test_pb2): - request = test_pb2.StreamingOutputCallRequest() +def _streaming_output_request(request_pb2): + request = request_pb2.StreamingOutputCallRequest() sizes = [1, 2, 3] request.response_parameters.add(size=sizes[0], interval_us=0) request.response_parameters.add(size=sizes[1], interval_us=0) @@ -226,11 +226,11 @@ def _streaming_output_request(test_pb2): return request -def _full_duplex_request_iterator(test_pb2): - request = test_pb2.StreamingOutputCallRequest() +def _full_duplex_request_iterator(request_pb2): + request = request_pb2.StreamingOutputCallRequest() request.response_parameters.add(size=1, interval_us=0) yield request - request = test_pb2.StreamingOutputCallRequest() + request = request_pb2.StreamingOutputCallRequest() request.response_parameters.add(size=2, interval_us=0) request.response_parameters.add(size=3, interval_us=0) yield request @@ -250,8 +250,6 @@ class PythonPluginTest(unittest.TestCase): protoc_command = 'protoc' protoc_plugin_filename = distutils.spawn.find_executable( 'grpc_python_plugin') - test_proto_filename = pkg_resources.resource_filename( - 'tests.protoc_plugin', 'protoc_plugin_test.proto') if not os.path.isfile(protoc_command): # Assume that if we haven't built protoc that it's on the system. protoc_command = 'protoc' @@ -259,19 +257,44 @@ class PythonPluginTest(unittest.TestCase): # Ensure that the output directory exists. self.outdir = tempfile.mkdtemp() + # Find all proto files + paths = [] + root_dir = os.path.dirname(os.path.realpath(__file__)) + proto_dir = os.path.join(root_dir, 'protos') + for walk_root, _, filenames in os.walk(proto_dir): + for filename in filenames: + if filename.endswith('.proto'): + path = os.path.join(walk_root, filename) + paths.append(path) + # Invoke protoc with the plugin. cmd = [ protoc_command, '--plugin=protoc-gen-python-grpc=%s' % protoc_plugin_filename, - '-I .', + '-I %s' % root_dir, '--python_out=%s' % self.outdir, - '--python-grpc_out=%s' % self.outdir, - os.path.basename(test_proto_filename), - ] + '--python-grpc_out=%s' % self.outdir + ] + paths subprocess.check_call(' '.join(cmd), shell=True, env=os.environ, - cwd=os.path.dirname(test_proto_filename)) + cwd=os.path.dirname(os.path.realpath(__file__))) + + # Generated proto directories dont include __init__.py, but + # these are needed for python package resolution + for walk_root, _, _ in os.walk(os.path.join(self.outdir, 'protos')): + path = os.path.join(walk_root, '__init__.py') + open(path, 'a').close() + sys.path.insert(0, self.outdir) + import protos.payload.test_payload_pb2 as payload_pb2 # pylint: disable=g-import-not-at-top + import protos.requests.r.test_requests_pb2 as request_pb2 # pylint: disable=g-import-not-at-top + import protos.responses.test_responses_pb2 as response_pb2 # pylint: disable=g-import-not-at-top + import protos.service.test_service_pb2 as service_pb2 # pylint: disable=g-import-not-at-top + self._payload_pb2 = payload_pb2 + self._request_pb2 = request_pb2 + self._response_pb2 = response_pb2 + self._service_pb2 = service_pb2 + def tearDown(self): try: shutil.rmtree(self.outdir) @@ -282,43 +305,40 @@ class PythonPluginTest(unittest.TestCase): def testImportAttributes(self): # check that we can access the generated module and its members. - import protoc_plugin_test_pb2 as test_pb2 # pylint: disable=g-import-not-at-top - moves.reload_module(test_pb2) - self.assertIsNotNone(getattr(test_pb2, SERVICER_IDENTIFIER, None)) - self.assertIsNotNone(getattr(test_pb2, STUB_IDENTIFIER, None)) - self.assertIsNotNone(getattr(test_pb2, SERVER_FACTORY_IDENTIFIER, None)) - self.assertIsNotNone(getattr(test_pb2, STUB_FACTORY_IDENTIFIER, None)) + self.assertIsNotNone( + getattr(self._service_pb2, SERVICER_IDENTIFIER, None)) + self.assertIsNotNone( + getattr(self._service_pb2, STUB_IDENTIFIER, None)) + self.assertIsNotNone( + getattr(self._service_pb2, SERVER_FACTORY_IDENTIFIER, None)) + self.assertIsNotNone( + getattr(self._service_pb2, STUB_FACTORY_IDENTIFIER, None)) def testUpDown(self): - import protoc_plugin_test_pb2 as test_pb2 - moves.reload_module(test_pb2) - with _CreateService(test_pb2) as (servicer, stub): - request = test_pb2.SimpleRequest(response_size=13) + with _CreateService( + self._service_pb2, self._response_pb2, self._payload_pb2): + self._request_pb2.SimpleRequest(response_size=13) def testIncompleteServicer(self): - import protoc_plugin_test_pb2 as test_pb2 - moves.reload_module(test_pb2) - with _CreateIncompleteService(test_pb2) as (servicer, stub): - request = test_pb2.SimpleRequest(response_size=13) + with _CreateIncompleteService(self._service_pb2) as (_, stub): + request = self._request_pb2.SimpleRequest(response_size=13) try: - response = stub.UnaryCall(request, test_constants.LONG_TIMEOUT) + stub.UnaryCall(request, test_constants.LONG_TIMEOUT) except face.AbortionError as error: self.assertEqual(interfaces.StatusCode.UNIMPLEMENTED, error.code) def testUnaryCall(self): - import protoc_plugin_test_pb2 as test_pb2 # pylint: disable=g-import-not-at-top - moves.reload_module(test_pb2) - with _CreateService(test_pb2) as (methods, stub): - request = test_pb2.SimpleRequest(response_size=13) + with _CreateService(self._service_pb2, self._response_pb2, + self._payload_pb2) as (methods, stub): + request = self._request_pb2.SimpleRequest(response_size=13) response = stub.UnaryCall(request, test_constants.LONG_TIMEOUT) expected_response = methods.UnaryCall(request, 'not a real context!') self.assertEqual(expected_response, response) def testUnaryCallFuture(self): - import protoc_plugin_test_pb2 as test_pb2 # pylint: disable=g-import-not-at-top - moves.reload_module(test_pb2) - request = test_pb2.SimpleRequest(response_size=13) - with _CreateService(test_pb2) as (methods, stub): + with _CreateService(self._service_pb2, self._response_pb2, + self._payload_pb2) as (methods, stub): + request = self._request_pb2.SimpleRequest(response_size=13) # Check that the call does not block waiting for the server to respond. with methods.pause(): response_future = stub.UnaryCall.future( @@ -328,10 +348,9 @@ class PythonPluginTest(unittest.TestCase): self.assertEqual(expected_response, response) def testUnaryCallFutureExpired(self): - import protoc_plugin_test_pb2 as test_pb2 # pylint: disable=g-import-not-at-top - moves.reload_module(test_pb2) - with _CreateService(test_pb2) as (methods, stub): - request = test_pb2.SimpleRequest(response_size=13) + with _CreateService(self._service_pb2, self._response_pb2, + self._payload_pb2) as (methods, stub): + request = self._request_pb2.SimpleRequest(response_size=13) with methods.pause(): response_future = stub.UnaryCall.future( request, test_constants.SHORT_TIMEOUT) @@ -339,30 +358,27 @@ class PythonPluginTest(unittest.TestCase): response_future.result() def testUnaryCallFutureCancelled(self): - import protoc_plugin_test_pb2 as test_pb2 # pylint: disable=g-import-not-at-top - moves.reload_module(test_pb2) - request = test_pb2.SimpleRequest(response_size=13) - with _CreateService(test_pb2) as (methods, stub): + with _CreateService(self._service_pb2, self._response_pb2, + self._payload_pb2) as (methods, stub): + request = self._request_pb2.SimpleRequest(response_size=13) with methods.pause(): response_future = stub.UnaryCall.future(request, 1) response_future.cancel() self.assertTrue(response_future.cancelled()) def testUnaryCallFutureFailed(self): - import protoc_plugin_test_pb2 as test_pb2 # pylint: disable=g-import-not-at-top - moves.reload_module(test_pb2) - request = test_pb2.SimpleRequest(response_size=13) - with _CreateService(test_pb2) as (methods, stub): + with _CreateService(self._service_pb2, self._response_pb2, + self._payload_pb2) as (methods, stub): + request = self._request_pb2.SimpleRequest(response_size=13) with methods.fail(): response_future = stub.UnaryCall.future( request, test_constants.LONG_TIMEOUT) self.assertIsNotNone(response_future.exception()) def testStreamingOutputCall(self): - import protoc_plugin_test_pb2 as test_pb2 # pylint: disable=g-import-not-at-top - moves.reload_module(test_pb2) - request = _streaming_output_request(test_pb2) - with _CreateService(test_pb2) as (methods, stub): + with _CreateService(self._service_pb2, self._response_pb2, + self._payload_pb2) as (methods, stub): + request = _streaming_output_request(self._request_pb2) responses = stub.StreamingOutputCall( request, test_constants.LONG_TIMEOUT) expected_responses = methods.StreamingOutputCall( @@ -372,10 +388,9 @@ class PythonPluginTest(unittest.TestCase): self.assertEqual(expected_response, response) def testStreamingOutputCallExpired(self): - import protoc_plugin_test_pb2 as test_pb2 # pylint: disable=g-import-not-at-top - moves.reload_module(test_pb2) - request = _streaming_output_request(test_pb2) - with _CreateService(test_pb2) as (methods, stub): + with _CreateService(self._service_pb2, self._response_pb2, + self._payload_pb2) as (methods, stub): + request = _streaming_output_request(self._request_pb2) with methods.pause(): responses = stub.StreamingOutputCall( request, test_constants.SHORT_TIMEOUT) @@ -383,10 +398,9 @@ class PythonPluginTest(unittest.TestCase): list(responses) def testStreamingOutputCallCancelled(self): - import protoc_plugin_test_pb2 as test_pb2 # pylint: disable=g-import-not-at-top - moves.reload_module(test_pb2) - request = _streaming_output_request(test_pb2) - with _CreateService(test_pb2) as (unused_methods, stub): + with _CreateService(self._service_pb2, self._response_pb2, + self._payload_pb2) as (methods, stub): + request = _streaming_output_request(self._request_pb2) responses = stub.StreamingOutputCall( request, test_constants.LONG_TIMEOUT) next(responses) @@ -395,10 +409,9 @@ class PythonPluginTest(unittest.TestCase): next(responses) def testStreamingOutputCallFailed(self): - import protoc_plugin_test_pb2 as test_pb2 # pylint: disable=g-import-not-at-top - moves.reload_module(test_pb2) - request = _streaming_output_request(test_pb2) - with _CreateService(test_pb2) as (methods, stub): + with _CreateService(self._service_pb2, self._response_pb2, + self._payload_pb2) as (methods, stub): + request = _streaming_output_request(self._request_pb2) with methods.fail(): responses = stub.StreamingOutputCall(request, 1) self.assertIsNotNone(responses) @@ -406,36 +419,38 @@ class PythonPluginTest(unittest.TestCase): next(responses) def testStreamingInputCall(self): - import protoc_plugin_test_pb2 as test_pb2 # pylint: disable=g-import-not-at-top - moves.reload_module(test_pb2) - with _CreateService(test_pb2) as (methods, stub): + with _CreateService(self._service_pb2, self._response_pb2, + self._payload_pb2) as (methods, stub): response = stub.StreamingInputCall( - _streaming_input_request_iterator(test_pb2), + _streaming_input_request_iterator( + self._request_pb2, self._payload_pb2), test_constants.LONG_TIMEOUT) expected_response = methods.StreamingInputCall( - _streaming_input_request_iterator(test_pb2), 'not a real RpcContext!') + _streaming_input_request_iterator(self._request_pb2, self._payload_pb2), + 'not a real RpcContext!') self.assertEqual(expected_response, response) def testStreamingInputCallFuture(self): - import protoc_plugin_test_pb2 as test_pb2 # pylint: disable=g-import-not-at-top - moves.reload_module(test_pb2) - with _CreateService(test_pb2) as (methods, stub): + with _CreateService(self._service_pb2, self._response_pb2, + self._payload_pb2) as (methods, stub): with methods.pause(): response_future = stub.StreamingInputCall.future( - _streaming_input_request_iterator(test_pb2), + _streaming_input_request_iterator( + self._request_pb2, self._payload_pb2), test_constants.LONG_TIMEOUT) response = response_future.result() expected_response = methods.StreamingInputCall( - _streaming_input_request_iterator(test_pb2), 'not a real RpcContext!') + _streaming_input_request_iterator(self._request_pb2, self._payload_pb2), + 'not a real RpcContext!') self.assertEqual(expected_response, response) def testStreamingInputCallFutureExpired(self): - import protoc_plugin_test_pb2 as test_pb2 # pylint: disable=g-import-not-at-top - moves.reload_module(test_pb2) - with _CreateService(test_pb2) as (methods, stub): + with _CreateService(self._service_pb2, self._response_pb2, + self._payload_pb2) as (methods, stub): with methods.pause(): response_future = stub.StreamingInputCall.future( - _streaming_input_request_iterator(test_pb2), + _streaming_input_request_iterator( + self._request_pb2, self._payload_pb2), test_constants.SHORT_TIMEOUT) with self.assertRaises(face.ExpirationError): response_future.result() @@ -443,12 +458,12 @@ class PythonPluginTest(unittest.TestCase): response_future.exception(), face.ExpirationError) def testStreamingInputCallFutureCancelled(self): - import protoc_plugin_test_pb2 as test_pb2 # pylint: disable=g-import-not-at-top - moves.reload_module(test_pb2) - with _CreateService(test_pb2) as (methods, stub): + with _CreateService(self._service_pb2, self._response_pb2, + self._payload_pb2) as (methods, stub): with methods.pause(): response_future = stub.StreamingInputCall.future( - _streaming_input_request_iterator(test_pb2), + _streaming_input_request_iterator( + self._request_pb2, self._payload_pb2), test_constants.LONG_TIMEOUT) response_future.cancel() self.assertTrue(response_future.cancelled()) @@ -456,32 +471,32 @@ class PythonPluginTest(unittest.TestCase): response_future.result() def testStreamingInputCallFutureFailed(self): - import protoc_plugin_test_pb2 as test_pb2 # pylint: disable=g-import-not-at-top - moves.reload_module(test_pb2) - with _CreateService(test_pb2) as (methods, stub): + with _CreateService(self._service_pb2, self._response_pb2, + self._payload_pb2) as (methods, stub): with methods.fail(): response_future = stub.StreamingInputCall.future( - _streaming_input_request_iterator(test_pb2), + _streaming_input_request_iterator( + self._request_pb2, self._payload_pb2), test_constants.LONG_TIMEOUT) self.assertIsNotNone(response_future.exception()) def testFullDuplexCall(self): - import protoc_plugin_test_pb2 as test_pb2 # pylint: disable=g-import-not-at-top - moves.reload_module(test_pb2) - with _CreateService(test_pb2) as (methods, stub): + with _CreateService(self._service_pb2, self._response_pb2, + self._payload_pb2) as (methods, stub): responses = stub.FullDuplexCall( - _full_duplex_request_iterator(test_pb2), test_constants.LONG_TIMEOUT) + _full_duplex_request_iterator(self._request_pb2), + test_constants.LONG_TIMEOUT) expected_responses = methods.FullDuplexCall( - _full_duplex_request_iterator(test_pb2), 'not a real RpcContext!') + _full_duplex_request_iterator(self._request_pb2), + 'not a real RpcContext!') for expected_response, response in moves.zip_longest( expected_responses, responses): self.assertEqual(expected_response, response) def testFullDuplexCallExpired(self): - import protoc_plugin_test_pb2 as test_pb2 # pylint: disable=g-import-not-at-top - moves.reload_module(test_pb2) - request_iterator = _full_duplex_request_iterator(test_pb2) - with _CreateService(test_pb2) as (methods, stub): + request_iterator = _full_duplex_request_iterator(self._request_pb2) + with _CreateService(self._service_pb2, self._response_pb2, + self._payload_pb2) as (methods, stub): with methods.pause(): responses = stub.FullDuplexCall( request_iterator, test_constants.SHORT_TIMEOUT) @@ -489,10 +504,9 @@ class PythonPluginTest(unittest.TestCase): list(responses) def testFullDuplexCallCancelled(self): - import protoc_plugin_test_pb2 as test_pb2 # pylint: disable=g-import-not-at-top - moves.reload_module(test_pb2) - with _CreateService(test_pb2) as (methods, stub): - request_iterator = _full_duplex_request_iterator(test_pb2) + with _CreateService(self._service_pb2, self._response_pb2, + self._payload_pb2) as (methods, stub): + request_iterator = _full_duplex_request_iterator(self._request_pb2) responses = stub.FullDuplexCall( request_iterator, test_constants.LONG_TIMEOUT) next(responses) @@ -501,10 +515,9 @@ class PythonPluginTest(unittest.TestCase): next(responses) def testFullDuplexCallFailed(self): - import protoc_plugin_test_pb2 as test_pb2 # pylint: disable=g-import-not-at-top - moves.reload_module(test_pb2) - request_iterator = _full_duplex_request_iterator(test_pb2) - with _CreateService(test_pb2) as (methods, stub): + request_iterator = _full_duplex_request_iterator(self._request_pb2) + with _CreateService(self._service_pb2, self._response_pb2, + self._payload_pb2) as (methods, stub): with methods.fail(): responses = stub.FullDuplexCall( request_iterator, test_constants.LONG_TIMEOUT) @@ -513,14 +526,13 @@ class PythonPluginTest(unittest.TestCase): next(responses) def testHalfDuplexCall(self): - import protoc_plugin_test_pb2 as test_pb2 # pylint: disable=g-import-not-at-top - moves.reload_module(test_pb2) - with _CreateService(test_pb2) as (methods, stub): + with _CreateService(self._service_pb2, self._response_pb2, + self._payload_pb2) as (methods, stub): def half_duplex_request_iterator(): - request = test_pb2.StreamingOutputCallRequest() + request = self._request_pb2.StreamingOutputCallRequest() request.response_parameters.add(size=1, interval_us=0) yield request - request = test_pb2.StreamingOutputCallRequest() + request = self._request_pb2.StreamingOutputCallRequest() request.response_parameters.add(size=2, interval_us=0) request.response_parameters.add(size=3, interval_us=0) yield request @@ -533,8 +545,6 @@ class PythonPluginTest(unittest.TestCase): self.assertEqual(expected_response, response) def testHalfDuplexCallWedged(self): - import protoc_plugin_test_pb2 as test_pb2 # pylint: disable=g-import-not-at-top - moves.reload_module(test_pb2) condition = threading.Condition() wait_cell = [False] @contextlib.contextmanager @@ -547,13 +557,14 @@ class PythonPluginTest(unittest.TestCase): wait_cell[0] = False condition.notify_all() def half_duplex_request_iterator(): - request = test_pb2.StreamingOutputCallRequest() + request = self._request_pb2.StreamingOutputCallRequest() request.response_parameters.add(size=1, interval_us=0) yield request with condition: while wait_cell[0]: condition.wait() - with _CreateService(test_pb2) as (methods, stub): + with _CreateService(self._service_pb2, self._response_pb2, + self._payload_pb2) as (methods, stub): with wait(): responses = stub.HalfDuplexCall( half_duplex_request_iterator(), test_constants.SHORT_TIMEOUT) @@ -563,5 +574,5 @@ class PythonPluginTest(unittest.TestCase): if __name__ == '__main__': - os.chdir(os.path.dirname(sys.argv[0])) + #os.chdir(os.path.dirname(sys.argv[0])) unittest.main(verbosity=2) diff --git a/src/python/grpcio/tests/protoc_plugin/protos/payload/test_payload.proto b/src/python/grpcio/tests/protoc_plugin/protos/payload/test_payload.proto new file mode 100644 index 0000000000000000000000000000000000000000..457543aa793afa9d9b5ee2cf9c756e66a040b458 --- /dev/null +++ b/src/python/grpcio/tests/protoc_plugin/protos/payload/test_payload.proto @@ -0,0 +1,51 @@ +// 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. + +syntax = "proto3"; + +package grpc_protoc_plugin; + +enum PayloadType { + // Compressable text format. + COMPRESSABLE= 0; + + // Uncompressable binary format. + UNCOMPRESSABLE = 1; + + // Randomly chosen from all other formats defined in this enum. + RANDOM = 2; +} + +message Payload { + PayloadType payload_type = 1; + oneof payload_body { + string payload_compressable = 2; + bytes payload_uncompressable = 3; + } +} diff --git a/src/python/grpcio/tests/protoc_plugin/protos/requests/r/test_requests.proto b/src/python/grpcio/tests/protoc_plugin/protos/requests/r/test_requests.proto new file mode 100644 index 0000000000000000000000000000000000000000..54105df6a56c4bc717a381e896550ea43c974dcd --- /dev/null +++ b/src/python/grpcio/tests/protoc_plugin/protos/requests/r/test_requests.proto @@ -0,0 +1,77 @@ +// 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. + +syntax = "proto3"; + +import "protos/payload/test_payload.proto"; + +package grpc_protoc_plugin; + +message SimpleRequest { + // Desired payload type in the response from the server. + // If response_type is RANDOM, server randomly chooses one from other formats. + PayloadType response_type = 1; + + // Desired payload size in the response from the server. + // If response_type is COMPRESSABLE, this denotes the size before compression. + int32 response_size = 2; + + // input payload sent along with the request. + Payload payload = 3; +} + +message StreamingInputCallRequest { + // input payload sent along with the request. + Payload payload = 1; + + // Not expecting any payload from the response. +} + +message ResponseParameters { + // Desired payload sizes in responses from the server. + // If response_type is COMPRESSABLE, this denotes the size before compression. + int32 size = 1; + + // Desired interval between consecutive responses in the response stream in + // microseconds. + int32 interval_us = 2; +} + +message StreamingOutputCallRequest { + // Desired payload type in the response from the server. + // If response_type is RANDOM, the payload from each response in the stream + // might be of different types. This is to simulate a mixed type of payload + // stream. + PayloadType response_type = 1; + + repeated ResponseParameters response_parameters = 2; + + // input payload sent along with the request. + Payload payload = 3; +} diff --git a/src/python/grpcio_health_checking/grpc/health/v1/health.proto b/src/python/grpcio/tests/protoc_plugin/protos/responses/test_responses.proto similarity index 83% rename from src/python/grpcio_health_checking/grpc/health/v1/health.proto rename to src/python/grpcio/tests/protoc_plugin/protos/responses/test_responses.proto index b0bac54be9810b1c8d2b86dd0e613da4673386df..734fbda86e9411db250317f0d0256a5bb2b9fe72 100644 --- a/src/python/grpcio_health_checking/grpc/health/v1/health.proto +++ b/src/python/grpcio/tests/protoc_plugin/protos/responses/test_responses.proto @@ -29,21 +29,19 @@ syntax = "proto3"; -package grpc.health.v1; +import "protos/payload/test_payload.proto"; -message HealthCheckRequest { - string service = 1; +package grpc_protoc_plugin; + +message SimpleResponse { + Payload payload = 1; } -message HealthCheckResponse { - enum ServingStatus { - UNKNOWN = 0; - SERVING = 1; - NOT_SERVING = 2; - } - ServingStatus status = 1; +message StreamingInputCallResponse { + // Aggregated size of payloads received from the client. + int32 aggregated_payload_size = 1; } -service Health { - rpc Check(HealthCheckRequest) returns (HealthCheckResponse); +message StreamingOutputCallResponse { + Payload payload = 1; } diff --git a/src/python/grpcio/tests/protoc_plugin/protoc_plugin_test.proto b/src/python/grpcio/tests/protoc_plugin/protos/service/test_service.proto similarity index 54% rename from src/python/grpcio/tests/protoc_plugin/protoc_plugin_test.proto rename to src/python/grpcio/tests/protoc_plugin/protos/service/test_service.proto index 6762a8e7f35071b37375712866c387328c7a2d35..fe715ee7f9205d6ec938d1659230e7daea1e919a 100644 --- a/src/python/grpcio/tests/protoc_plugin/protoc_plugin_test.proto +++ b/src/python/grpcio/tests/protoc_plugin/protos/service/test_service.proto @@ -1,4 +1,4 @@ -// Copyright 2015, Google Inc. +// Copyright 2016, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -27,87 +27,12 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// An integration test service that covers all the method signature permutations -// of unary/streaming requests/responses. -// This file is duplicated around the code base. See GitHub issue #526. -syntax = "proto2"; +syntax = "proto3"; -package grpc_protoc_plugin; - -enum PayloadType { - // Compressable text format. - COMPRESSABLE= 1; - - // Uncompressable binary format. - UNCOMPRESSABLE = 2; - - // Randomly chosen from all other formats defined in this enum. - RANDOM = 3; -} - -message Payload { - required PayloadType payload_type = 1; - oneof payload_body { - string payload_compressable = 2; - bytes payload_uncompressable = 3; - } -} - -message SimpleRequest { - // Desired payload type in the response from the server. - // If response_type is RANDOM, server randomly chooses one from other formats. - optional PayloadType response_type = 1 [default=COMPRESSABLE]; - - // Desired payload size in the response from the server. - // If response_type is COMPRESSABLE, this denotes the size before compression. - optional int32 response_size = 2; - - // Optional input payload sent along with the request. - optional Payload payload = 3; -} - -message SimpleResponse { - optional Payload payload = 1; -} - -message StreamingInputCallRequest { - // Optional input payload sent along with the request. - optional Payload payload = 1; +import "protos/requests/r/test_requests.proto"; +import "protos/responses/test_responses.proto"; - // Not expecting any payload from the response. -} - -message StreamingInputCallResponse { - // Aggregated size of payloads received from the client. - optional int32 aggregated_payload_size = 1; -} - -message ResponseParameters { - // Desired payload sizes in responses from the server. - // If response_type is COMPRESSABLE, this denotes the size before compression. - required int32 size = 1; - - // Desired interval between consecutive responses in the response stream in - // microseconds. - required int32 interval_us = 2; -} - -message StreamingOutputCallRequest { - // Desired payload type in the response from the server. - // If response_type is RANDOM, the payload from each response in the stream - // might be of different types. This is to simulate a mixed type of payload - // stream. - optional PayloadType response_type = 1 [default=COMPRESSABLE]; - - repeated ResponseParameters response_parameters = 2; - - // Optional input payload sent along with the request. - optional Payload payload = 3; -} - -message StreamingOutputCallResponse { - optional Payload payload = 1; -} +package grpc_protoc_plugin; service TestService { // One request followed by one response. diff --git a/src/python/grpcio/tests/qps/benchmark_client.py b/src/python/grpcio/tests/qps/benchmark_client.py index eed0b0c6dac616137c1617965d657b8fee054751..b372ea01ade53c26706a366c8cf12bf10d0ad6f5 100644 --- a/src/python/grpcio/tests/qps/benchmark_client.py +++ b/src/python/grpcio/tests/qps/benchmark_client.py @@ -39,6 +39,7 @@ except ImportError: from concurrent import futures from grpc.beta import implementations +from grpc.framework.interfaces.face import face from src.proto.grpc.testing import messages_pb2 from src.proto.grpc.testing import services_pb2 from tests.unit import resources @@ -141,10 +142,10 @@ class UnaryAsyncBenchmarkClient(BenchmarkClient): self._stub = None -class StreamingAsyncBenchmarkClient(BenchmarkClient): +class StreamingSyncBenchmarkClient(BenchmarkClient): def __init__(self, server, config, hist): - super(StreamingAsyncBenchmarkClient, self).__init__(server, config, hist) + super(StreamingSyncBenchmarkClient, self).__init__(server, config, hist) self._is_streaming = False self._pool = futures.ThreadPoolExecutor(max_workers=1) # Use a thread-safe queue to put requests on the stream @@ -167,12 +168,12 @@ class StreamingAsyncBenchmarkClient(BenchmarkClient): def _request_stream(self): self._is_streaming = True if self._generic: - response_stream = self._stub.inline_stream_stream( - 'grpc.testing.BenchmarkService', 'StreamingCall', - self._request_generator(), _TIMEOUT) + stream_callable = self._stub.stream_stream( + 'grpc.testing.BenchmarkService', 'StreamingCall') else: - response_stream = self._stub.StreamingCall(self._request_generator(), - _TIMEOUT) + stream_callable = self._stub.StreamingCall + + response_stream = stream_callable(self._request_generator(), _TIMEOUT) for _ in response_stream: end_time = time.time() self._handle_response(end_time - self._send_time_queue.get_nowait()) @@ -184,3 +185,48 @@ class StreamingAsyncBenchmarkClient(BenchmarkClient): yield request except queue.Empty: pass + + +class AsyncReceiver(face.ResponseReceiver): + """Receiver for async stream responses.""" + + def __init__(self, send_time_queue, response_handler): + self._send_time_queue = send_time_queue + self._response_handler = response_handler + + def initial_metadata(self, initial_mdetadata): + pass + + def response(self, response): + end_time = time.time() + self._response_handler(end_time - self._send_time_queue.get_nowait()) + + def complete(self, terminal_metadata, code, details): + pass + + +class StreamingAsyncBenchmarkClient(BenchmarkClient): + + def __init__(self, server, config, hist): + super(StreamingAsyncBenchmarkClient, self).__init__(server, config, hist) + self._send_time_queue = queue.Queue() + self._receiver = AsyncReceiver(self._send_time_queue, self._handle_response) + self._rendezvous = None + + def send_request(self): + if self._rendezvous is not None: + self._send_time_queue.put(time.time()) + self._rendezvous.consume(self._request) + + def start(self): + if self._generic: + stream_callable = self._stub.stream_stream( + 'grpc.testing.BenchmarkService', 'StreamingCall') + else: + stream_callable = self._stub.StreamingCall + self._rendezvous = stream_callable.event( + self._receiver, lambda *args: None, _TIMEOUT) + + def stop(self): + self._rendezvous.terminate() + self._rendezvous = None diff --git a/src/python/grpcio/tests/qps/client_runner.py b/src/python/grpcio/tests/qps/client_runner.py index a36c30ccc0a8a5862b42e5ef3238407955c8cdde..1ede7d2af1b67428facb05dce41010d03beade3c 100644 --- a/src/python/grpcio/tests/qps/client_runner.py +++ b/src/python/grpcio/tests/qps/client_runner.py @@ -89,9 +89,9 @@ class ClosedLoopClientRunner(ClientRunner): def start(self): self._is_running = True + self._client.start() for _ in xrange(self._request_count): self._client.send_request() - self._client.start() def stop(self): self._is_running = False diff --git a/src/python/grpcio/tests/qps/worker_server.py b/src/python/grpcio/tests/qps/worker_server.py index 0b3acc14e7de785b7ee7ca70752f56e57a672a64..1f9af5482ccc451fbc456656f02f4502d9293586 100644 --- a/src/python/grpcio/tests/qps/worker_server.py +++ b/src/python/grpcio/tests/qps/worker_server.py @@ -146,8 +146,9 @@ class WorkerServer(services_pb2.BetaWorkerServiceServicer): if config.rpc_type == control_pb2.UNARY: client = benchmark_client.UnarySyncBenchmarkClient( server, config, qps_data) - else: - raise Exception('STREAMING SYNC client not supported') + elif config.rpc_type == control_pb2.STREAMING: + client = benchmark_client.StreamingSyncBenchmarkClient( + server, config, qps_data) elif config.client_type == control_pb2.ASYNC_CLIENT: if config.rpc_type == control_pb2.UNARY: client = benchmark_client.UnaryAsyncBenchmarkClient( diff --git a/src/python/grpcio/tests/stress/client.py b/src/python/grpcio/tests/stress/client.py index a733741b736fe29ee8737d88ed1d3d327c85b73a..e2e016760c88764820623584b7e62ced710e7cb1 100644 --- a/src/python/grpcio/tests/stress/client.py +++ b/src/python/grpcio/tests/stress/client.py @@ -117,7 +117,10 @@ def run_test(args): for runner in runners: runner.start() try: - raise exception_queue.get(block=True, timeout=args.test_duration_secs) + timeout_secs = args.test_duration_secs + if timeout_secs < 0: + timeout_secs = None + raise exception_queue.get(block=True, timeout=timeout_secs) except Queue.Empty: # No exceptions thrown, success pass diff --git a/src/python/grpcio/tests/tests.json b/src/python/grpcio/tests/tests.json index 84870aaa5cb7777ea29c6d6e09394641cb56c8fc..691062f25ac7725e1656a8bca39ea02099031991 100644 --- a/src/python/grpcio/tests/tests.json +++ b/src/python/grpcio/tests/tests.json @@ -28,7 +28,8 @@ "_face_interface_test.GenericInvokerBlockingInvocationInlineServiceTest", "_face_interface_test.GenericInvokerFutureInvocationAsynchronousEventServiceTest", "_face_interface_test.MultiCallableInvokerBlockingInvocationInlineServiceTest", - "_face_interface_test.MultiCallableInvokerFutureInvocationAsynchronousEventServiceTest", + "_face_interface_test.MultiCallableInvokerFutureInvocationAsynchronousEventServiceTest", + "_health_servicer_test.HealthServicerTest", "_implementations_test.ChannelCredentialsTest", "_insecure_interop_test.InsecureInteropTest", "_intermediary_low_test.CancellationTest", @@ -50,4 +51,4 @@ "cygrpc_test.InsecureServerInsecureClient", "cygrpc_test.SecureServerSecureClient", "cygrpc_test.TypeSmokeTest" -] \ No newline at end of file +] diff --git a/src/python/grpcio/tests/unit/_cython/_channel_test.py b/src/python/grpcio/tests/unit/_cython/_channel_test.py index b414f8e6f690771026d4f3b7422bbe089175c1e4..3dc7a246aeeb7fe7af41a248d1a571909c5b0c1b 100644 --- a/src/python/grpcio/tests/unit/_cython/_channel_test.py +++ b/src/python/grpcio/tests/unit/_cython/_channel_test.py @@ -33,8 +33,7 @@ import unittest from grpc._cython import cygrpc -# TODO(nathaniel): This should be at least one hundred. Why not one thousand? -_PARALLELISM = 4 +from tests.unit.framework.common import test_constants def _channel_and_completion_queue(): @@ -61,7 +60,7 @@ def _create_loop_destroy(): def _in_parallel(behavior, arguments): threads = tuple( threading.Thread(target=behavior, args=arguments) - for _ in range(_PARALLELISM)) + for _ in range(test_constants.THREAD_CONCURRENCY)) for thread in threads: thread.start() for thread in threads: diff --git a/src/python/grpcio/tests/unit/_cython/cygrpc_test.py b/src/python/grpcio/tests/unit/_cython/cygrpc_test.py index 876da88de952bd91a1050467516ecb7016c9b25a..0a511101f0d0b2b895cf0912d90fc4fd0992d23b 100644 --- a/src/python/grpcio/tests/unit/_cython/cygrpc_test.py +++ b/src/python/grpcio/tests/unit/_cython/cygrpc_test.py @@ -40,6 +40,7 @@ from tests.unit import resources _SSL_HOST_OVERRIDE = 'foo.test.google.fr' _CALL_CREDENTIALS_METADATA_KEY = 'call-creds-key' _CALL_CREDENTIALS_METADATA_VALUE = 'call-creds-value' +_EMPTY_FLAGS = 0 def _metadata_plugin_callback(context, callback): callback(cygrpc.Metadata( @@ -76,7 +77,7 @@ class TypeSmokeTest(unittest.TestCase): def testOperationsIteration(self): operations = cygrpc.Operations([ - cygrpc.operation_send_message('asdf')]) + cygrpc.operation_send_message('asdf', _EMPTY_FLAGS)]) iterator = iter(operations) operation = next(iterator) self.assertIsInstance(operation, cygrpc.Operation) @@ -85,6 +86,11 @@ class TypeSmokeTest(unittest.TestCase): with self.assertRaises(StopIteration): next(iterator) + def testOperationFlags(self): + operation = cygrpc.operation_send_message('asdf', + cygrpc.WriteFlag.no_compress) + self.assertEqual(cygrpc.WriteFlag.no_compress, operation.flags) + def testTimespec(self): now = time.time() timespec = cygrpc.Timespec(now) @@ -188,12 +194,13 @@ class InsecureServerInsecureClient(unittest.TestCase): CLIENT_METADATA_ASCII_VALUE), cygrpc.Metadatum(CLIENT_METADATA_BIN_KEY, CLIENT_METADATA_BIN_VALUE)]) client_start_batch_result = client_call.start_batch(cygrpc.Operations([ - cygrpc.operation_send_initial_metadata(client_initial_metadata), - cygrpc.operation_send_message(REQUEST), - cygrpc.operation_send_close_from_client(), - cygrpc.operation_receive_initial_metadata(), - cygrpc.operation_receive_message(), - cygrpc.operation_receive_status_on_client() + cygrpc.operation_send_initial_metadata(client_initial_metadata, + _EMPTY_FLAGS), + cygrpc.operation_send_message(REQUEST, _EMPTY_FLAGS), + cygrpc.operation_send_close_from_client(_EMPTY_FLAGS), + cygrpc.operation_receive_initial_metadata(_EMPTY_FLAGS), + cygrpc.operation_receive_message(_EMPTY_FLAGS), + cygrpc.operation_receive_status_on_client(_EMPTY_FLAGS) ]), client_call_tag) self.assertEqual(cygrpc.CallError.ok, client_start_batch_result) client_event_future = test_utilities.CompletionQueuePollFuture( @@ -223,12 +230,14 @@ class InsecureServerInsecureClient(unittest.TestCase): cygrpc.Metadatum(SERVER_TRAILING_METADATA_KEY, SERVER_TRAILING_METADATA_VALUE)]) server_start_batch_result = server_call.start_batch([ - cygrpc.operation_send_initial_metadata(server_initial_metadata), - cygrpc.operation_receive_message(), - cygrpc.operation_send_message(RESPONSE), - cygrpc.operation_receive_close_on_server(), + cygrpc.operation_send_initial_metadata(server_initial_metadata, + _EMPTY_FLAGS), + cygrpc.operation_receive_message(_EMPTY_FLAGS), + cygrpc.operation_send_message(RESPONSE, _EMPTY_FLAGS), + cygrpc.operation_receive_close_on_server(_EMPTY_FLAGS), cygrpc.operation_send_status_from_server( - server_trailing_metadata, SERVER_STATUS_CODE, SERVER_STATUS_DETAILS) + server_trailing_metadata, SERVER_STATUS_CODE, + SERVER_STATUS_DETAILS, _EMPTY_FLAGS) ], server_call_tag) self.assertEqual(cygrpc.CallError.ok, server_start_batch_result) @@ -349,12 +358,13 @@ class SecureServerSecureClient(unittest.TestCase): CLIENT_METADATA_ASCII_VALUE), cygrpc.Metadatum(CLIENT_METADATA_BIN_KEY, CLIENT_METADATA_BIN_VALUE)]) client_start_batch_result = client_call.start_batch(cygrpc.Operations([ - cygrpc.operation_send_initial_metadata(client_initial_metadata), - cygrpc.operation_send_message(REQUEST), - cygrpc.operation_send_close_from_client(), - cygrpc.operation_receive_initial_metadata(), - cygrpc.operation_receive_message(), - cygrpc.operation_receive_status_on_client() + cygrpc.operation_send_initial_metadata(client_initial_metadata, + _EMPTY_FLAGS), + cygrpc.operation_send_message(REQUEST, _EMPTY_FLAGS), + cygrpc.operation_send_close_from_client(_EMPTY_FLAGS), + cygrpc.operation_receive_initial_metadata(_EMPTY_FLAGS), + cygrpc.operation_receive_message(_EMPTY_FLAGS), + cygrpc.operation_receive_status_on_client(_EMPTY_FLAGS) ]), client_call_tag) self.assertEqual(cygrpc.CallError.ok, client_start_batch_result) client_event_future = test_utilities.CompletionQueuePollFuture( @@ -387,12 +397,14 @@ class SecureServerSecureClient(unittest.TestCase): cygrpc.Metadatum(SERVER_TRAILING_METADATA_KEY, SERVER_TRAILING_METADATA_VALUE)]) server_start_batch_result = server_call.start_batch([ - cygrpc.operation_send_initial_metadata(server_initial_metadata), - cygrpc.operation_receive_message(), - cygrpc.operation_send_message(RESPONSE), - cygrpc.operation_receive_close_on_server(), + cygrpc.operation_send_initial_metadata(server_initial_metadata, + _EMPTY_FLAGS), + cygrpc.operation_receive_message(_EMPTY_FLAGS), + cygrpc.operation_send_message(RESPONSE, _EMPTY_FLAGS), + cygrpc.operation_receive_close_on_server(_EMPTY_FLAGS), cygrpc.operation_send_status_from_server( - server_trailing_metadata, SERVER_STATUS_CODE, SERVER_STATUS_DETAILS) + server_trailing_metadata, SERVER_STATUS_CODE, + SERVER_STATUS_DETAILS, _EMPTY_FLAGS) ], server_call_tag) self.assertEqual(cygrpc.CallError.ok, server_start_batch_result) diff --git a/src/python/grpcio/tests/unit/framework/common/test_constants.py b/src/python/grpcio/tests/unit/framework/common/test_constants.py index 8d89101e093900fc4d031addfbe69f7720775f75..b6682d396c9b9bcd2b5d489752bfb482a3c0697e 100644 --- a/src/python/grpcio/tests/unit/framework/common/test_constants.py +++ b/src/python/grpcio/tests/unit/framework/common/test_constants.py @@ -49,8 +49,13 @@ STREAM_LENGTH = 200 # The size of payloads to transmit in tests. PAYLOAD_SIZE = 256 * 1024 + 17 -# The parallelism to use in tests of parallel RPCs. -PARALLELISM = 200 +# The concurrency to use in tests of concurrent RPCs that will not create as +# many threads as RPCs. +RPC_CONCURRENCY = 200 + +# The concurrency to use in tests of concurrent RPCs that will create as many +# threads as RPCs. +THREAD_CONCURRENCY = 25 # The size of thread pools to use in tests. POOL_SIZE = 10 diff --git a/src/python/grpcio/tests/unit/framework/interfaces/face/_blocking_invocation_inline_service.py b/src/python/grpcio/tests/unit/framework/interfaces/face/_blocking_invocation_inline_service.py index 649892463aeee09e3b03a98294e3d2c78c2c65d5..e338aaa396d248c86fa5a02b26c8353f9f28dae1 100644 --- a/src/python/grpcio/tests/unit/framework/interfaces/face/_blocking_invocation_inline_service.py +++ b/src/python/grpcio/tests/unit/framework/interfaces/face/_blocking_invocation_inline_service.py @@ -146,13 +146,13 @@ class TestCase(six.with_metaclass(abc.ABCMeta, test_coverage.Coverage, unittest. test_messages.verify(second_request, second_response, self) def testParallelInvocations(self): - pool = logging_pool.pool(test_constants.PARALLELISM) + pool = logging_pool.pool(test_constants.THREAD_CONCURRENCY) for (group, method), test_messages_sequence in ( six.iteritems(self._digest.unary_unary_messages_sequences)): for test_messages in test_messages_sequence: requests = [] response_futures = [] - for _ in range(test_constants.PARALLELISM): + for _ in range(test_constants.THREAD_CONCURRENCY): request = test_messages.request() response_future = pool.submit( self._invoker.blocking(group, method), request, @@ -168,13 +168,13 @@ class TestCase(six.with_metaclass(abc.ABCMeta, test_coverage.Coverage, unittest. pool.shutdown(wait=True) def testWaitingForSomeButNotAllParallelInvocations(self): - pool = logging_pool.pool(test_constants.PARALLELISM) + pool = logging_pool.pool(test_constants.THREAD_CONCURRENCY) for (group, method), test_messages_sequence in ( six.iteritems(self._digest.unary_unary_messages_sequences)): for test_messages in test_messages_sequence: requests = [] response_futures_to_indices = {} - for index in range(test_constants.PARALLELISM): + for index in range(test_constants.THREAD_CONCURRENCY): request = test_messages.request() response_future = pool.submit( self._invoker.blocking(group, method), request, @@ -184,7 +184,7 @@ class TestCase(six.with_metaclass(abc.ABCMeta, test_coverage.Coverage, unittest. some_completed_response_futures_iterator = itertools.islice( futures.as_completed(response_futures_to_indices), - test_constants.PARALLELISM // 2) + test_constants.THREAD_CONCURRENCY // 2) for response_future in some_completed_response_futures_iterator: index = response_futures_to_indices[response_future] test_messages.verify(requests[index], response_future.result(), self) diff --git a/src/python/grpcio/tests/unit/framework/interfaces/face/_future_invocation_asynchronous_event_service.py b/src/python/grpcio/tests/unit/framework/interfaces/face/_future_invocation_asynchronous_event_service.py index c3813d5f3a8f7c70cdec7bf9f3bee115315ea51a..791620307b506c8c1f1b2529311bcb38ed095aa9 100644 --- a/src/python/grpcio/tests/unit/framework/interfaces/face/_future_invocation_asynchronous_event_service.py +++ b/src/python/grpcio/tests/unit/framework/interfaces/face/_future_invocation_asynchronous_event_service.py @@ -249,7 +249,7 @@ class TestCase(six.with_metaclass(abc.ABCMeta, test_coverage.Coverage, unittest. for test_messages in test_messages_sequence: requests = [] response_futures = [] - for _ in range(test_constants.PARALLELISM): + for _ in range(test_constants.THREAD_CONCURRENCY): request = test_messages.request() response_future = self._invoker.future(group, method)( request, test_constants.LONG_TIMEOUT) @@ -263,13 +263,13 @@ class TestCase(six.with_metaclass(abc.ABCMeta, test_coverage.Coverage, unittest. test_messages.verify(request, response, self) def testWaitingForSomeButNotAllParallelInvocations(self): - pool = logging_pool.pool(test_constants.PARALLELISM) + pool = logging_pool.pool(test_constants.THREAD_CONCURRENCY) for (group, method), test_messages_sequence in ( six.iteritems(self._digest.unary_unary_messages_sequences)): for test_messages in test_messages_sequence: requests = [] response_futures_to_indices = {} - for index in range(test_constants.PARALLELISM): + for index in range(test_constants.THREAD_CONCURRENCY): request = test_messages.request() inner_response_future = self._invoker.future(group, method)( request, test_constants.LONG_TIMEOUT) @@ -279,7 +279,7 @@ class TestCase(six.with_metaclass(abc.ABCMeta, test_coverage.Coverage, unittest. some_completed_response_futures_iterator = itertools.islice( futures.as_completed(response_futures_to_indices), - test_constants.PARALLELISM // 2) + test_constants.THREAD_CONCURRENCY // 2) for response_future in some_completed_response_futures_iterator: index = response_futures_to_indices[response_future] test_messages.verify(requests[index], response_future.result(), self) diff --git a/src/python/grpcio_health_checking/.gitignore b/src/python/grpcio_health_checking/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..85af46688660ab7c9f78193c6c9ec4694ec4c4ff --- /dev/null +++ b/src/python/grpcio_health_checking/.gitignore @@ -0,0 +1,5 @@ +*.proto +*_pb2.py +build/ +grpcio_health_checking.egg-info/ +dist/ diff --git a/src/python/grpcio_health_checking/MANIFEST.in b/src/python/grpcio_health_checking/MANIFEST.in index 498b55f20abb360e7fd59a43b5058ff8ac233f90..7d26647697e1ab4a4781c8d4554b0a1b4867d9c4 100644 --- a/src/python/grpcio_health_checking/MANIFEST.in +++ b/src/python/grpcio_health_checking/MANIFEST.in @@ -1,2 +1,3 @@ -graft grpc -include commands.py +include health_commands.py +graft grpc_health +global-exclude *.pyc diff --git a/src/python/grpcio_health_checking/grpc/health/v1/health.py b/src/python/grpcio_health_checking/grpc/health/v1/health.py deleted file mode 100644 index 4b5af15aa68a92fb0d34c1737969feac7c1ba710..0000000000000000000000000000000000000000 --- a/src/python/grpcio_health_checking/grpc/health/v1/health.py +++ /dev/null @@ -1,129 +0,0 @@ -# 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. - -"""Reference implementation for health checking in gRPC Python.""" - -import abc -import enum -import threading - -from grpc.health.v1 import health_pb2 - - -@enum.unique -class HealthStatus(enum.Enum): - """Statuses for a service mirroring the reference health.proto's values.""" - UNKNOWN = health_pb2.HealthCheckResponse.UNKNOWN - SERVING = health_pb2.HealthCheckResponse.SERVING - NOT_SERVING = health_pb2.HealthCheckResponse.NOT_SERVING - - -class _HealthServicer(health_pb2.EarlyAdopterHealthServicer): - """Servicer handling RPCs for service statuses.""" - - def __init__(self): - self._server_status_lock = threading.Lock() - self._server_status = {} - - def Check(self, request, context): - with self._server_status_lock: - if request.service not in self._server_status: - # TODO(atash): once the Python API has a way of setting the server - # status, bring us into conformance with the health check spec by - # returning the NOT_FOUND status here. - raise NotImplementedError() - else: - return health_pb2.HealthCheckResponse( - status=self._server_status[request.service].value) - - def set(service, status): - if not isinstance(status, HealthStatus): - raise TypeError('expected grpc.health.v1.health.HealthStatus ' - 'for argument `status` but got {}'.format(status)) - with self._server_status_lock: - self._server_status[service] = status - - -class HealthServer(health_pb2.EarlyAdopterHealthServer): - """Interface for the reference gRPC Python health server.""" - __metaclass__ = abc.ABCMeta - - @abc.abstractmethod - def start(self): - raise NotImplementedError() - - @abc.abstractmethod - def stop(self): - raise NotImplementedError() - - @abc.abstractmethod - def set(self, service, status): - """Set the status of the given service. - - Args: - service (str): service name of the service to set the reported status of - status (HealthStatus): status to set for the specified service - """ - raise NotImplementedError() - - -class _HealthServerImplementation(HealthServer): - """Implementation for the reference gRPC Python health server.""" - - def __init__(self, server, servicer): - self._server = server - self._servicer = servicer - - def start(self): - self._server.start() - - def stop(self): - self._server.stop() - - def set(self, service, status): - self._servicer.set(service, status) - - -def create_Health_server(port, private_key=None, certificate_chain=None): - """Get a HealthServer instance. - - Args: - port (int): port number passed through to health_pb2 server creation - routine. - private_key (str): to-be-created server's desired private key - certificate_chain (str): to-be-created server's desired certificate chain - - Returns: - An instance of HealthServer (conforming thus to - EarlyAdopterHealthServer and providing a method to set server status).""" - servicer = _HealthServicer() - server = health_pb2.early_adopter_create_Health_server( - servicer, port=port, private_key=private_key, - certificate_chain=certificate_chain) - return _HealthServerImplementation(server, servicer) diff --git a/src/python/grpcio_health_checking/grpc/__init__.py b/src/python/grpcio_health_checking/grpc_health/__init__.py similarity index 100% rename from src/python/grpcio_health_checking/grpc/__init__.py rename to src/python/grpcio_health_checking/grpc_health/__init__.py diff --git a/src/python/grpcio_health_checking/grpc/health/__init__.py b/src/python/grpcio_health_checking/grpc_health/health/__init__.py similarity index 100% rename from src/python/grpcio_health_checking/grpc/health/__init__.py rename to src/python/grpcio_health_checking/grpc_health/health/__init__.py diff --git a/src/python/grpcio_health_checking/grpc/health/v1/__init__.py b/src/python/grpcio_health_checking/grpc_health/health/v1/__init__.py similarity index 100% rename from src/python/grpcio_health_checking/grpc/health/v1/__init__.py rename to src/python/grpcio_health_checking/grpc_health/health/v1/__init__.py diff --git a/src/python/grpcio_health_checking/grpc_health/health/v1/health.py b/src/python/grpcio_health_checking/grpc_health/health/v1/health.py new file mode 100644 index 0000000000000000000000000000000000000000..8da60c70cb1d629c338d73d4cd0b0bd6fbc54494 --- /dev/null +++ b/src/python/grpcio_health_checking/grpc_health/health/v1/health.py @@ -0,0 +1,66 @@ +# 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. + +"""Reference implementation for health checking in gRPC Python.""" + +import threading + +from grpc_health.health.v1 import health_pb2 + + +class HealthServicer(health_pb2.BetaHealthServicer): + """Servicer handling RPCs for service statuses.""" + + def __init__(self): + self._server_status_lock = threading.Lock() + self._server_status = {} + + def Check(self, request, context): + with self._server_status_lock: + if request.service not in self._server_status: + # TODO(atash): once the Python API has a way of setting the server + # status, bring us into conformance with the health check spec by + # returning the NOT_FOUND status here. + raise NotImplementedError() + else: + return health_pb2.HealthCheckResponse( + status=self._server_status[request.service]) + + def set(self, service, status): + """Sets the status of a service. + + Args: + service: string, the name of the service. + NOTE, '' must be set. + status: HealthCheckResponse.status enum value indicating + the status of the service + """ + with self._server_status_lock: + self._server_status[service] = status + diff --git a/src/python/grpcio_health_checking/commands.py b/src/python/grpcio_health_checking/health_commands.py similarity index 80% rename from src/python/grpcio_health_checking/commands.py rename to src/python/grpcio_health_checking/health_commands.py index 3f4ea6e22f63b9d2b25e23d46caecea55495c25a..631066f33102aac79d4503cfa749b94153e7a4ef 100644 --- a/src/python/grpcio_health_checking/commands.py +++ b/src/python/grpcio_health_checking/health_commands.py @@ -33,11 +33,16 @@ import distutils import glob import os import os.path +import shutil import subprocess import sys import setuptools from setuptools.command import build_py +from setuptools.command import sdist + +ROOT_DIR = os.path.abspath(os.path.dirname(os.path.abspath(__file__))) +HEALTH_PROTO = os.path.join(ROOT_DIR, '../../proto/grpc/health/v1/health.proto') class BuildProtoModules(setuptools.Command): @@ -76,9 +81,34 @@ class BuildProtoModules(setuptools.Command): raise Exception('{}\nOutput:\n{}'.format(e.message, e.output)) +class CopyProtoModules(setuptools.Command): + """Command to copy proto modules from grpc/src/proto.""" + + def initialize_options(self): + pass + + def finalize_options(self): + pass + + def run(self): + if os.path.isfile(HEALTH_PROTO): + shutil.copyfile( + HEALTH_PROTO, + os.path.join(ROOT_DIR, 'grpc_health/health/v1/health.proto')) + + class BuildPy(build_py.build_py): """Custom project build command.""" def run(self): + self.run_command('copy_proto_modules') self.run_command('build_proto_modules') build_py.build_py.run(self) + + +class SDist(sdist.sdist): + """Custom project build command.""" + + def run(self): + self.run_command('copy_proto_modules') + sdist.sdist.run(self) diff --git a/src/python/grpcio_health_checking/setup.py b/src/python/grpcio_health_checking/setup.py index 35253ba31235343a1fe8c51d1d1194f4cafbe94b..d68a7ced8ed61dc392a607ec6dd2ad444793bc56 100644 --- a/src/python/grpcio_health_checking/setup.py +++ b/src/python/grpcio_health_checking/setup.py @@ -40,7 +40,7 @@ import setuptools os.chdir(os.path.dirname(os.path.abspath(__file__))) # Break import-style to ensure we can actually find our commands module. -import commands +import health_commands _PACKAGES = ( setuptools.find_packages('.') @@ -51,22 +51,21 @@ _PACKAGE_DIRECTORIES = { } _INSTALL_REQUIRES = ( - 'grpcio>=0.11.0b0', + 'grpcio>=0.13.1', ) -_SETUP_REQUIRES = _INSTALL_REQUIRES - _COMMAND_CLASS = { - 'build_proto_modules': commands.BuildProtoModules, - 'build_py': commands.BuildPy, + 'copy_proto_modules': health_commands.CopyProtoModules, + 'build_proto_modules': health_commands.BuildProtoModules, + 'build_py': health_commands.BuildPy, + 'sdist': health_commands.SDist, } setuptools.setup( name='grpcio_health_checking', - version='0.11.0b0', + version='0.14.0b0', packages=list(_PACKAGES), package_dir=_PACKAGE_DIRECTORIES, install_requires=_INSTALL_REQUIRES, - setup_requires=_SETUP_REQUIRES, cmdclass=_COMMAND_CLASS ) diff --git a/src/ruby/.rubocop.yml b/src/ruby/.rubocop.yml index d13ce4265537732de5770455009f6008dc43c4e8..34bb4775435bbcda79de87ea353ffd695887c4f9 100644 --- a/src/ruby/.rubocop.yml +++ b/src/ruby/.rubocop.yml @@ -11,10 +11,10 @@ AllCops: - 'pb/test/**/*' Metrics/CyclomaticComplexity: - Max: 8 + Max: 9 Metrics/PerceivedComplexity: - Max: 8 + Max: 9 Metrics/ClassLength: Max: 250 diff --git a/src/ruby/ext/grpc/extconf.rb b/src/ruby/ext/grpc/extconf.rb index 07f7bb93b8a04ce1fa0f23b8369653a89fbeda63..6d65db830670725a82e267f5abcf11fc5ea61523 100644 --- a/src/ruby/ext/grpc/extconf.rb +++ b/src/ruby/ext/grpc/extconf.rb @@ -78,9 +78,11 @@ output_dir = File.expand_path(RbConfig::CONFIG['topdir']) grpc_lib_dir = File.join(output_dir, 'libs', grpc_config) ENV['BUILDDIR'] = output_dir -puts 'Building internal gRPC into ' + grpc_lib_dir -system("make -j -C #{grpc_root} #{grpc_lib_dir}/libgrpc.a CONFIG=#{grpc_config}") -exit 1 unless $? == 0 +unless windows + puts 'Building internal gRPC into ' + grpc_lib_dir + system("make -j -C #{grpc_root} #{grpc_lib_dir}/libgrpc.a CONFIG=#{grpc_config}") + exit 1 unless $? == 0 +end $CFLAGS << ' -I' + File.join(grpc_root, 'include') $LDFLAGS << ' ' + File.join(grpc_lib_dir, 'libgrpc.a') unless windows diff --git a/src/ruby/ext/grpc/rb_byte_buffer.c b/src/ruby/ext/grpc/rb_byte_buffer.c index cba910d832a8f9e12fe7d4d0b555447257392830..1172691116c82b12a2ef1abfc01239cccf130f3c 100644 --- a/src/ruby/ext/grpc/rb_byte_buffer.c +++ b/src/ruby/ext/grpc/rb_byte_buffer.c @@ -32,11 +32,10 @@ */ #include <ruby/ruby.h> + #include "rb_grpc_imports.generated.h" #include "rb_byte_buffer.h" -#include <ruby/ruby.h> - #include <grpc/grpc.h> #include <grpc/byte_buffer_reader.h> #include <grpc/support/slice.h> diff --git a/src/ruby/ext/grpc/rb_call.c b/src/ruby/ext/grpc/rb_call.c index 48c49a21e91d5c6a52818b5a847c877c0598e1f3..1b06273af9d41c5769b30b6ace297ae0c1d8f9a7 100644 --- a/src/ruby/ext/grpc/rb_call.c +++ b/src/ruby/ext/grpc/rb_call.c @@ -32,11 +32,10 @@ */ #include <ruby/ruby.h> + #include "rb_grpc_imports.generated.h" #include "rb_call.h" -#include <ruby/ruby.h> - #include <grpc/grpc.h> #include <grpc/support/alloc.h> diff --git a/src/ruby/ext/grpc/rb_call_credentials.c b/src/ruby/ext/grpc/rb_call_credentials.c index 38bf1f7710f8c8fbe8b6d98703ee3d39fdf4d0df..79ca5b32cedaaba41887bd3ae5ff4e5e25a1666d 100644 --- a/src/ruby/ext/grpc/rb_call_credentials.c +++ b/src/ruby/ext/grpc/rb_call_credentials.c @@ -32,10 +32,10 @@ */ #include <ruby/ruby.h> + #include "rb_grpc_imports.generated.h" #include "rb_call_credentials.h" -#include <ruby/ruby.h> #include <ruby/thread.h> #include <grpc/grpc.h> @@ -86,11 +86,11 @@ static VALUE grpc_rb_call_credentials_callback_rescue(VALUE args, rb_funcall(exception_object, rb_intern("backtrace"), 0), rb_intern("join"), 1, rb_str_new2("\n\tfrom ")); - VALUE exception_info = rb_funcall(exception_object, rb_intern("to_s"), 0); + VALUE rb_exception_info = rb_funcall(exception_object, rb_intern("to_s"), 0); const char *exception_classname = rb_obj_classname(exception_object); (void)args; gpr_log(GPR_INFO, "Call credentials callback failed: %s: %s\n%s", - exception_classname, StringValueCStr(exception_info), + exception_classname, StringValueCStr(rb_exception_info), StringValueCStr(backtrace)); rb_hash_aset(result, rb_str_new2("metadata"), Qnil); /* Currently only gives the exception class name. It should be possible get diff --git a/src/ruby/ext/grpc/rb_channel.c b/src/ruby/ext/grpc/rb_channel.c index 984afad1073cf680f7b6194dffb9809621073eae..013321ffc8a3edd5ea8e43d9bef206bb211eded0 100644 --- a/src/ruby/ext/grpc/rb_channel.c +++ b/src/ruby/ext/grpc/rb_channel.c @@ -32,11 +32,10 @@ */ #include <ruby/ruby.h> + #include "rb_grpc_imports.generated.h" #include "rb_channel.h" -#include <ruby/ruby.h> - #include <grpc/grpc.h> #include <grpc/grpc_security.h> #include <grpc/support/alloc.h> diff --git a/src/ruby/ext/grpc/rb_channel_args.c b/src/ruby/ext/grpc/rb_channel_args.c index 2ffb8f41daeff5386bc2b1a66d3a2a2103fd09b6..87c0e0a7055bec5cac7210669aa475e439bb4d6d 100644 --- a/src/ruby/ext/grpc/rb_channel_args.c +++ b/src/ruby/ext/grpc/rb_channel_args.c @@ -32,11 +32,10 @@ */ #include <ruby/ruby.h> + #include "rb_grpc_imports.generated.h" #include "rb_channel_args.h" -#include <ruby/ruby.h> - #include <grpc/grpc.h> #include "rb_grpc.h" diff --git a/src/ruby/ext/grpc/rb_channel_credentials.c b/src/ruby/ext/grpc/rb_channel_credentials.c index 09bd3093a94d90c4edeb7414c86592feaf0b150f..cbb23885aa60bbd8151a8c0728572269615a2773 100644 --- a/src/ruby/ext/grpc/rb_channel_credentials.c +++ b/src/ruby/ext/grpc/rb_channel_credentials.c @@ -31,14 +31,13 @@ * */ +#include <ruby/ruby.h> + #include <string.h> -#include <ruby/ruby.h> #include "rb_grpc_imports.generated.h" #include "rb_channel_credentials.h" -#include <ruby/ruby.h> - #include <grpc/grpc.h> #include <grpc/grpc_security.h> #include <grpc/support/alloc.h> diff --git a/src/ruby/ext/grpc/rb_completion_queue.c b/src/ruby/ext/grpc/rb_completion_queue.c index 2a2eee190cdeec501f3b1fafaf7904e2d2b26b42..b6ddbe88dc895bc9a25dc1399f537d30e1de4f96 100644 --- a/src/ruby/ext/grpc/rb_completion_queue.c +++ b/src/ruby/ext/grpc/rb_completion_queue.c @@ -32,10 +32,10 @@ */ #include <ruby/ruby.h> + #include "rb_grpc_imports.generated.h" #include "rb_completion_queue.h" -#include <ruby/ruby.h> #include <ruby/thread.h> #include <grpc/grpc.h> @@ -52,21 +52,41 @@ typedef struct next_call_stack { grpc_event event; gpr_timespec timeout; void *tag; + volatile int interrupted; } next_call_stack; /* Calls grpc_completion_queue_next without holding the ruby GIL */ static void *grpc_rb_completion_queue_next_no_gil(void *param) { next_call_stack *const next_call = (next_call_stack*)param; - next_call->event = - grpc_completion_queue_next(next_call->cq, next_call->timeout, NULL); + gpr_timespec increment = gpr_time_from_millis(20, GPR_TIMESPAN); + gpr_timespec deadline; + do { + deadline = gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), increment); + next_call->event = grpc_completion_queue_next(next_call->cq, + deadline, NULL); + if (next_call->event.type != GRPC_QUEUE_TIMEOUT || + gpr_time_cmp(deadline, next_call->timeout) > 0) { + break; + } + } while (!next_call->interrupted); return NULL; } /* Calls grpc_completion_queue_pluck without holding the ruby GIL */ static void *grpc_rb_completion_queue_pluck_no_gil(void *param) { next_call_stack *const next_call = (next_call_stack*)param; - next_call->event = grpc_completion_queue_pluck(next_call->cq, next_call->tag, - next_call->timeout, NULL); + gpr_timespec increment = gpr_time_from_millis(20, GPR_TIMESPAN); + gpr_timespec deadline; + do { + deadline = gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), increment); + next_call->event = grpc_completion_queue_pluck(next_call->cq, + next_call->tag, + deadline, NULL); + if (next_call->event.type != GRPC_QUEUE_TIMEOUT || + gpr_time_cmp(deadline, next_call->timeout) > 0) { + break; + } + } while (!next_call->interrupted); return NULL; } @@ -139,6 +159,11 @@ static VALUE grpc_rb_completion_queue_alloc(VALUE cls) { return TypedData_Wrap_Struct(cls, &grpc_rb_completion_queue_data_type, cq); } +static void unblock_func(void *param) { + next_call_stack *const next_call = (next_call_stack*)param; + next_call->interrupted = 1; +} + /* Blocks until the next event for given tag is available, and returns the * event. */ grpc_event grpc_rb_completion_queue_pluck_event(VALUE self, VALUE tag, @@ -158,8 +183,23 @@ grpc_event grpc_rb_completion_queue_pluck_event(VALUE self, VALUE tag, next_call.tag = ROBJECT(tag); } next_call.event.type = GRPC_QUEUE_TIMEOUT; - rb_thread_call_without_gvl(grpc_rb_completion_queue_pluck_no_gil, - (void *)&next_call, NULL, NULL); + /* Loop until we finish a pluck without an interruption. The internal + pluck function runs either until it is interrupted or it gets an + event, or time runs out. + + The basic reason we need this relatively complicated construction is that + we need to re-acquire the GVL when an interrupt comes in, so that the ruby + interpreter can do what it needs to do with the interrupt. But we also need + to get back to plucking when the interrupt has been handled. */ + do { + next_call.interrupted = 0; + rb_thread_call_without_gvl(grpc_rb_completion_queue_pluck_no_gil, + (void *)&next_call, unblock_func, + (void *)&next_call); + /* If an interrupt prevented pluck from returning useful information, then + any plucks that did complete must have timed out */ + } while (next_call.interrupted && + next_call.event.type == GRPC_QUEUE_TIMEOUT); return next_call.event; } diff --git a/src/ruby/ext/grpc/rb_completion_queue.h b/src/ruby/ext/grpc/rb_completion_queue.h index 6cc4e96589b92d2b3af08e2953671bc021b39247..42de43c3fbb3604809c2c8459b13fa07698993c0 100644 --- a/src/ruby/ext/grpc/rb_completion_queue.h +++ b/src/ruby/ext/grpc/rb_completion_queue.h @@ -46,7 +46,7 @@ grpc_completion_queue *grpc_rb_get_wrapped_completion_queue(VALUE v); * * This avoids having code that holds the GIL repeated at multiple sites. */ -grpc_event grpc_rb_completion_queue_pluck_event(VALUE cqueue, VALUE tag, +grpc_event grpc_rb_completion_queue_pluck_event(VALUE self, VALUE tag, VALUE timeout); /* Initializes the CompletionQueue class. */ diff --git a/src/ruby/ext/grpc/rb_event_thread.c b/src/ruby/ext/grpc/rb_event_thread.c index 2649a1087f20531d53c402ce1d375948dcff3ce2..9e85bbcfbf2f46e2b8cfb89792d83995de77b1b1 100644 --- a/src/ruby/ext/grpc/rb_event_thread.c +++ b/src/ruby/ext/grpc/rb_event_thread.c @@ -32,12 +32,12 @@ */ #include <ruby/ruby.h> + #include "rb_grpc_imports.generated.h" #include "rb_event_thread.h" #include <stdbool.h> -#include <ruby/ruby.h> #include <ruby/thread.h> #include <grpc/support/alloc.h> #include <grpc/support/sync.h> diff --git a/src/ruby/ext/grpc/rb_grpc.c b/src/ruby/ext/grpc/rb_grpc.c index acb47b005583e830e96731d21883ba8888e4e97b..06a07ac646336796eb238ca10de06d375b3a855a 100644 --- a/src/ruby/ext/grpc/rb_grpc.c +++ b/src/ruby/ext/grpc/rb_grpc.c @@ -32,11 +32,11 @@ */ #include <ruby/ruby.h> + #include "rb_grpc_imports.generated.h" #include "rb_grpc.h" #include <math.h> -#include <ruby/ruby.h> #include <ruby/vm.h> #include <sys/time.h> diff --git a/src/ruby/ext/grpc/rb_grpc_imports.generated.c b/src/ruby/ext/grpc/rb_grpc_imports.generated.c index bc43f9d36b57aef34a7971d9cf4750474e060ca5..cebbe8c40feba774187743616512b427f310a4b8 100644 --- a/src/ruby/ext/grpc/rb_grpc_imports.generated.c +++ b/src/ruby/ext/grpc/rb_grpc_imports.generated.c @@ -125,6 +125,7 @@ grpc_header_key_is_legal_type grpc_header_key_is_legal_import; grpc_header_nonbin_value_is_legal_type grpc_header_nonbin_value_is_legal_import; grpc_is_binary_header_type grpc_is_binary_header_import; grpc_call_error_to_string_type grpc_call_error_to_string_import; +grpc_cronet_secure_channel_create_type grpc_cronet_secure_channel_create_import; grpc_auth_property_iterator_next_type grpc_auth_property_iterator_next_import; grpc_auth_context_property_iterator_type grpc_auth_context_property_iterator_import; grpc_auth_context_peer_identity_type grpc_auth_context_peer_identity_import; @@ -391,6 +392,7 @@ void grpc_rb_load_imports(HMODULE library) { grpc_header_nonbin_value_is_legal_import = (grpc_header_nonbin_value_is_legal_type) GetProcAddress(library, "grpc_header_nonbin_value_is_legal"); grpc_is_binary_header_import = (grpc_is_binary_header_type) GetProcAddress(library, "grpc_is_binary_header"); grpc_call_error_to_string_import = (grpc_call_error_to_string_type) GetProcAddress(library, "grpc_call_error_to_string"); + grpc_cronet_secure_channel_create_import = (grpc_cronet_secure_channel_create_type) GetProcAddress(library, "grpc_cronet_secure_channel_create"); grpc_auth_property_iterator_next_import = (grpc_auth_property_iterator_next_type) GetProcAddress(library, "grpc_auth_property_iterator_next"); grpc_auth_context_property_iterator_import = (grpc_auth_context_property_iterator_type) GetProcAddress(library, "grpc_auth_context_property_iterator"); grpc_auth_context_peer_identity_import = (grpc_auth_context_peer_identity_type) GetProcAddress(library, "grpc_auth_context_peer_identity"); diff --git a/src/ruby/ext/grpc/rb_grpc_imports.generated.h b/src/ruby/ext/grpc/rb_grpc_imports.generated.h index b67361ca25b96988054831aec05c924aa73017b9..d7ea6c574c8b8952725a7b2450677049373da521 100644 --- a/src/ruby/ext/grpc/rb_grpc_imports.generated.h +++ b/src/ruby/ext/grpc/rb_grpc_imports.generated.h @@ -43,6 +43,7 @@ #include <grpc/census.h> #include <grpc/compression.h> #include <grpc/grpc.h> +#include <grpc/grpc_cronet.h> #include <grpc/grpc_security.h> #include <grpc/impl/codegen/alloc.h> #include <grpc/impl/codegen/byte_buffer.h> @@ -325,6 +326,9 @@ extern grpc_is_binary_header_type grpc_is_binary_header_import; typedef const char *(*grpc_call_error_to_string_type)(grpc_call_error error); extern grpc_call_error_to_string_type grpc_call_error_to_string_import; #define grpc_call_error_to_string grpc_call_error_to_string_import +typedef grpc_channel *(*grpc_cronet_secure_channel_create_type)(void *engine, const char *target, const grpc_channel_args *args, void *reserved); +extern grpc_cronet_secure_channel_create_type grpc_cronet_secure_channel_create_import; +#define grpc_cronet_secure_channel_create grpc_cronet_secure_channel_create_import typedef const grpc_auth_property *(*grpc_auth_property_iterator_next_type)(grpc_auth_property_iterator *it); extern grpc_auth_property_iterator_next_type grpc_auth_property_iterator_next_import; #define grpc_auth_property_iterator_next grpc_auth_property_iterator_next_import diff --git a/src/ruby/ext/grpc/rb_server.c b/src/ruby/ext/grpc/rb_server.c index 96e60c67763e1b655b5697a3477970ca4365b47c..0899feb685db6f0c718351f5f49c76b7b15c9ee2 100644 --- a/src/ruby/ext/grpc/rb_server.c +++ b/src/ruby/ext/grpc/rb_server.c @@ -32,11 +32,10 @@ */ #include <ruby/ruby.h> + #include "rb_grpc_imports.generated.h" #include "rb_server.h" -#include <ruby/ruby.h> - #include <grpc/grpc.h> #include <grpc/grpc_security.h> #include "rb_call.h" @@ -61,6 +60,7 @@ typedef struct grpc_rb_server { VALUE mark; /* The actual server */ grpc_server *wrapped; + grpc_completion_queue *queue; } grpc_rb_server; /* Destroys server instances. */ @@ -146,6 +146,7 @@ static VALUE grpc_rb_server_init(VALUE self, VALUE cqueue, VALUE channel_args) { } grpc_server_register_completion_queue(srv, cq, NULL); wrapper->wrapped = srv; + wrapper->queue = cq; /* Add the cq as the server's mark object. This ensures the ruby cq can't be GCed before the server */ diff --git a/src/ruby/ext/grpc/rb_server_credentials.c b/src/ruby/ext/grpc/rb_server_credentials.c index b2d7280a30ac142b48c148cd7bb52913009822f8..3b0fb6c910df0bb069c579a97ea3441561d381f2 100644 --- a/src/ruby/ext/grpc/rb_server_credentials.c +++ b/src/ruby/ext/grpc/rb_server_credentials.c @@ -32,11 +32,10 @@ */ #include <ruby/ruby.h> + #include "rb_grpc_imports.generated.h" #include "rb_server_credentials.h" -#include <ruby/ruby.h> - #include <grpc/grpc.h> #include <grpc/grpc_security.h> diff --git a/src/ruby/lib/grpc/generic/active_call.rb b/src/ruby/lib/grpc/generic/active_call.rb index ecf3cc3293559409a94d22c2fbb361fde2e53a22..7fe588bd4c8af679c72e8dd3828d3054497c6427 100644 --- a/src/ruby/lib/grpc/generic/active_call.rb +++ b/src/ruby/lib/grpc/generic/active_call.rb @@ -28,6 +28,7 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. require 'forwardable' +require 'weakref' require_relative 'bidi_call' class Struct diff --git a/src/ruby/lib/grpc/generic/client_stub.rb b/src/ruby/lib/grpc/generic/client_stub.rb index 68e167a69fcc08368a429661b5b6e96f91d00391..12946fe819b662aa63f1b30c865c4a74ec2610bb 100644 --- a/src/ruby/lib/grpc/generic/client_stub.rb +++ b/src/ruby/lib/grpc/generic/client_stub.rb @@ -49,7 +49,12 @@ module GRPC fail(TypeError, '!Channel') unless alt_chan.is_a?(Core::Channel) return alt_chan end - kw['grpc.primary_user_agent'] = "grpc-ruby/#{VERSION}" + if kw['grpc.primary_user_agent'].nil? + kw['grpc.primary_user_agent'] = '' + else + kw['grpc.primary_user_agent'] += ' ' + end + kw['grpc.primary_user_agent'] += "grpc-ruby/#{VERSION}" unless creds.is_a?(Core::ChannelCredentials) || creds.is_a?(Symbol) fail(TypeError, '!ChannelCredentials or Symbol') end diff --git a/src/ruby/lib/grpc/generic/rpc_server.rb b/src/ruby/lib/grpc/generic/rpc_server.rb index 7f3a38a9f46e51ff0720f555c1ba5e0e2b339e82..e1496d491af57f9cb08be2424c8e8c41e52e8397 100644 --- a/src/ruby/lib/grpc/generic/rpc_server.rb +++ b/src/ruby/lib/grpc/generic/rpc_server.rb @@ -32,42 +32,8 @@ require_relative 'active_call' require_relative 'service' require 'thread' -# A global that contains signals the gRPC servers should respond to. -$grpc_signals = [] - # GRPC contains the General RPC module. module GRPC - # Handles the signals in $grpc_signals. - # - # @return false if the server should exit, true if not. - def handle_signals - loop do - sig = $grpc_signals.shift - case sig - when 'INT' - return false - when 'TERM' - return false - when nil - return true - end - end - true - end - module_function :handle_signals - - # Sets up a signal handler that adds signals to the signal handling global. - # - # Signal handlers should do as little as humanly possible. - # Here, they just add themselves to $grpc_signals - # - # RpcServer (and later other parts of gRPC) monitors the signals - # $grpc_signals in its own non-signal context. - def trap_signals - %w(INT TERM).each { |sig| trap(sig) { $grpc_signals << sig } } - end - module_function :trap_signals - # Pool is a simple thread pool. class Pool # Default keep alive period is 1s @@ -328,25 +294,6 @@ module GRPC end end - # Runs the server in its own thread, then waits for signal INT or TERM on - # the current thread to terminate it. - def run_till_terminated - GRPC.trap_signals - stopped = false - t = Thread.new do - run - stopped = true - end - wait_till_running - loop do - sleep SIGNAL_CHECK_PERIOD - break if stopped - break unless GRPC.handle_signals - end - stop - t.join - end - # handle registration of classes # # service is either a class that includes GRPC::GenericService and whose @@ -408,6 +355,8 @@ module GRPC loop_handle_server_calls end + alias_method :run_till_terminated, :run + # Sends RESOURCE_EXHAUSTED if there are too many unprocessed jobs def available?(an_rpc) jobs_count, max = @pool.jobs_waiting, @max_waiting_requests @@ -416,7 +365,7 @@ module GRPC GRPC.logger.warn("NOT AVAILABLE: too many jobs_waiting: #{an_rpc}") noop = proc { |x| x } c = ActiveCall.new(an_rpc.call, @cq, noop, noop, an_rpc.deadline) - c.send_status(StatusCodes::RESOURCE_EXHAUSTED, '') + c.send_status(GRPC::Core::StatusCodes::RESOURCE_EXHAUSTED, '') nil end @@ -427,7 +376,7 @@ module GRPC GRPC.logger.warn("UNIMPLEMENTED: #{an_rpc}") noop = proc { |x| x } c = ActiveCall.new(an_rpc.call, @cq, noop, noop, an_rpc.deadline) - c.send_status(StatusCodes::UNIMPLEMENTED, '') + c.send_status(GRPC::Core::StatusCodes::UNIMPLEMENTED, '') nil end @@ -443,7 +392,12 @@ module GRPC unless active_call.nil? @pool.schedule(active_call) do |ac| c, mth = ac - rpc_descs[mth].run_server_method(c, rpc_handlers[mth]) + begin + rpc_descs[mth].run_server_method(c, rpc_handlers[mth]) + rescue StandardError + c.send_status(GRPC::Core::StatusCodes::INTERNAL, + 'Server handler failed') + end end end rescue Core::CallError, RuntimeError => e @@ -500,10 +454,8 @@ module GRPC unless cls.include?(GenericService) fail "#{cls} must 'include GenericService'" end - if cls.rpc_descs.size.zero? - fail "#{cls} should specify some rpc descriptions" - end - cls.assert_rpc_descs_have_methods + fail "#{cls} should specify some rpc descriptions" if + cls.rpc_descs.size.zero? end # This should be called while holding @run_mutex diff --git a/src/ruby/lib/grpc/generic/service.rb b/src/ruby/lib/grpc/generic/service.rb index 8e940b5b13ee4e0a0a9f9ace61f03e3b1840d01b..0a166e823e488808e35cbb7b5014ebdc4fc79d02 100644 --- a/src/ruby/lib/grpc/generic/service.rb +++ b/src/ruby/lib/grpc/generic/service.rb @@ -110,6 +110,9 @@ module GRPC rpc_descs[name] = RpcDesc.new(name, input, output, marshal_class_method, unmarshal_class_method) + define_method(name) do + fail GRPC::BadStatus, GRPC::Core::StatusCodes::UNIMPLEMENTED + end end def inherited(subclass) @@ -199,19 +202,6 @@ module GRPC end end end - - # Asserts that the appropriate methods are defined for each added rpc - # spec. Is intended to aid verifying that server classes are correctly - # implemented. - def assert_rpc_descs_have_methods - rpc_descs.each_pair do |m, spec| - mth_name = GenericService.underscore(m.to_s).to_sym - unless instance_methods.include?(mth_name) - fail "#{self} does not provide instance method '#{mth_name}'" - end - spec.assert_arity_matches(instance_method(mth_name)) - end - end end def self.included(o) diff --git a/src/ruby/lib/grpc/version.rb b/src/ruby/lib/grpc/version.rb index 67c6a5d5a17ac071044b1a3ff04e82247f7f57f9..01c8c5ac8f19bc3870cd3cb0c69cf0aa4129bdf4 100644 --- a/src/ruby/lib/grpc/version.rb +++ b/src/ruby/lib/grpc/version.rb @@ -29,5 +29,5 @@ # GRPC contains the General RPC module. module GRPC - VERSION = '0.14.0.dev' + VERSION = '0.15.0.dev' end diff --git a/src/ruby/spec/generic/rpc_server_spec.rb b/src/ruby/spec/generic/rpc_server_spec.rb index e688057cb1772bce14b3b1006ffa0a1da5fcffa4..2a42736237de147b6560d32f1576923f8702304a 100644 --- a/src/ruby/spec/generic/rpc_server_spec.rb +++ b/src/ruby/spec/generic/rpc_server_spec.rb @@ -308,10 +308,6 @@ describe GRPC::RpcServer do expect { @srv.handle(EmptyService) }.to raise_error end - it 'raises if the service does not define its rpc methods' do - expect { @srv.handle(NoRpcImplementation) }.to raise_error - end - it 'raises if a handler method is already registered' do @srv.handle(EchoService) expect { r.handle(EchoService) }.to raise_error @@ -349,6 +345,25 @@ describe GRPC::RpcServer do t.join end + it 'should return UNIMPLEMENTED on unimplemented methods', server: true do + @srv.handle(NoRpcImplementation) + t = Thread.new { @srv.run } + @srv.wait_till_running + req = EchoMsg.new + blk = proc do + cq = GRPC::Core::CompletionQueue.new + stub = GRPC::ClientStub.new(@host, cq, :this_channel_is_insecure, + **client_opts) + stub.request_response('/an_rpc', req, marshal, unmarshal) + end + expect(&blk).to raise_error do |error| + expect(error).to be_a(GRPC::BadStatus) + expect(error.code).to be(GRPC::Core::StatusCodes::UNIMPLEMENTED) + end + @srv.stop + t.join + end + it 'should handle multiple sequential requests', server: true do @srv.handle(EchoService) t = Thread.new { @srv.run } diff --git a/src/ruby/spec/generic/service_spec.rb b/src/ruby/spec/generic/service_spec.rb index 5e7b6c7abaff82f0b6da36b4b9cdb7cc9a24f145..76034e4f7476e1a11fd1da1c11307f657e1a2f72 100644 --- a/src/ruby/spec/generic/service_spec.rb +++ b/src/ruby/spec/generic/service_spec.rb @@ -273,73 +273,4 @@ describe GenericService do end end end - - describe '#assert_rpc_descs_have_methods' do - it 'fails if there is no instance method for an rpc descriptor' do - c1 = Class.new do - include GenericService - rpc :AnRpc, GoodMsg, GoodMsg - end - expect { c1.assert_rpc_descs_have_methods }.to raise_error - - c2 = Class.new do - include GenericService - rpc :AnRpc, GoodMsg, GoodMsg - rpc :AnotherRpc, GoodMsg, GoodMsg - - def an_rpc - end - end - expect { c2.assert_rpc_descs_have_methods }.to raise_error - end - - it 'passes if there are corresponding methods for each descriptor' do - c = Class.new do - include GenericService - rpc :AnRpc, GoodMsg, GoodMsg - rpc :AServerStreamer, GoodMsg, stream(GoodMsg) - rpc :AClientStreamer, stream(GoodMsg), GoodMsg - rpc :ABidiStreamer, stream(GoodMsg), stream(GoodMsg) - - def an_rpc(_req, _call) - end - - def a_server_streamer(_req, _call) - end - - def a_client_streamer(_call) - end - - def a_bidi_streamer(_call) - end - end - expect { c.assert_rpc_descs_have_methods }.to_not raise_error - end - - it 'passes for subclasses of that include GenericService' do - base = Class.new do - include GenericService - rpc :AnRpc, GoodMsg, GoodMsg - - def an_rpc(_req, _call) - end - end - c = Class.new(base) - expect { c.assert_rpc_descs_have_methods }.to_not raise_error - expect(c.include?(GenericService)).to be(true) - end - - it 'passes if subclasses define the rpc methods' do - base = Class.new do - include GenericService - rpc :AnRpc, GoodMsg, GoodMsg - end - c = Class.new(base) do - def an_rpc(_req, _call) - end - end - expect { c.assert_rpc_descs_have_methods }.to_not raise_error - expect(c.include?(GenericService)).to be(true) - end - end end diff --git a/src/ruby/tools/bin/protoc.rb b/src/ruby/tools/bin/grpc_tools_ruby_protoc.rb similarity index 100% rename from src/ruby/tools/bin/protoc.rb rename to src/ruby/tools/bin/grpc_tools_ruby_protoc.rb diff --git a/src/ruby/tools/bin/protoc_grpc_ruby_plugin.rb b/src/ruby/tools/bin/grpc_tools_ruby_protoc_plugin.rb similarity index 100% rename from src/ruby/tools/bin/protoc_grpc_ruby_plugin.rb rename to src/ruby/tools/bin/grpc_tools_ruby_protoc_plugin.rb diff --git a/src/ruby/tools/grpc-tools.gemspec b/src/ruby/tools/grpc-tools.gemspec index af904de4a91006ef68832eea54e5df324c6683fd..9fa4b66392d9d78c3f4113c3b4295e6208680b2c 100644 --- a/src/ruby/tools/grpc-tools.gemspec +++ b/src/ruby/tools/grpc-tools.gemspec @@ -18,5 +18,5 @@ Gem::Specification.new do |s| s.platform = Gem::Platform::RUBY - s.executables = %w( protoc.rb protoc_grpc_ruby_plugin.rb ) + s.executables = %w( grpc_tools_ruby_protoc.rb grpc_tools_ruby_protoc_plugin.rb ) end diff --git a/src/ruby/tools/version.rb b/src/ruby/tools/version.rb index 12ad21b80eb20607db107b699f2fa288783cdfce..dca7fd7e72c39e7852c6cc3b1e5b3fe139f54898 100644 --- a/src/ruby/tools/version.rb +++ b/src/ruby/tools/version.rb @@ -29,6 +29,6 @@ module GRPC module Tools - VERSION = '0.14.0.dev' + VERSION = '0.15.0.dev' end end diff --git a/templates/Makefile.template b/templates/Makefile.template index e84ceebf221e037cabfec0c904d6dcca95ecb7cb..0d5f0ec5b53e5da8a14605e2aba432625c93d90f 100644 --- a/templates/Makefile.template +++ b/templates/Makefile.template @@ -49,6 +49,19 @@ sources_that_need_openssl = set() sources_that_don_t_need_openssl = set() + + # warnings we'd like, but that dont exist in all compilers + PREFERRED_WARNINGS=['shadow', 'extra-semi'] + CHECK_WARNINGS=PREFERRED_WARNINGS + ['no-shift-negative-value'] + + def warning_var(fmt, warning): + return fmt % warning.replace('-', '_').upper() + + def neg_warning(warning): + if warning[0:3] == 'no-': + return warning[3:] + else: + return 'no-' + warning %> @@ -187,17 +200,14 @@ CXX11_CHECK_CMD = $(CXX) -std=c++11 -o $(TMPOUT) -c test/build/c++11.cc HAS_CXX11 = $(shell $(CXX11_CHECK_CMD) 2> /dev/null && echo true || echo false) - CHECK_SHADOW_WORKS_CMD = $(CC) -std=c99 -Werror -Wshadow -o $(TMPOUT) -c test/build/shadow.c - HAS_WORKING_SHADOW = $(shell $(CHECK_SHADOW_WORKS_CMD) 2> /dev/null && echo true || echo false) - ifeq ($(HAS_WORKING_SHADOW),true) - W_SHADOW=-Wshadow - endif - - CHECK_NO_SHIFT_NEGATIVE_VALUE_CMD = $(CC) -std=c99 -Werror -Wno-shift-negative-value -o $(TMPOUT) -c test/build/empty.c - HAS_NO_SHIFT_NEGATIVE_VALUE = $(shell $(CHECK_NO_SHIFT_NEGATIVE_VALUE_CMD) 2> /dev/null && echo true || echo false) - ifeq ($(HAS_NO_SHIFT_NEGATIVE_VALUE),true) - W_NO_SHIFT_NEGATIVE_VALUE=-Wno-shift-negative-value + %for warning in CHECK_WARNINGS: + ${warning_var('CHECK_%s_WORKS_CMD', warning)} = $(CC) -std=c99 -Werror -W${warning} -o $(TMPOUT) -c test/build/${warning}.c + ${warning_var('HAS_WORKING_%s', warning)} = $(shell $(${warning_var('CHECK_%s_WORKS_CMD', warning)}) 2> /dev/null && echo true || echo false) + ifeq ($(${warning_var('HAS_WORKING_%s', warning)}),true) + ${warning_var('W_%s', warning)}=-W${warning} + ${warning_var('NO_W_%s', warning)}=-W${neg_warning(warning)} endif + %endfor # The HOST compiler settings are used to compile the protoc plugins. # In most cases, you won't have to change anything, but if you are @@ -213,7 +223,7 @@ DEFINES += $(EXTRA_DEFINES) endif - CFLAGS += -std=c99 -Wsign-conversion -Wconversion $(W_SHADOW) + CFLAGS += -std=c99 -Wsign-conversion -Wconversion ${' '.join(warning_var('$(W_%s)', warning) for warning in PREFERRED_WARNINGS)} ifeq ($(HAS_CXX11),true) CXXFLAGS += -std=c++11 else @@ -1698,7 +1708,7 @@ # boringssl needs an override to ensure that it does not include # system openssl headers regardless of other configuration # we do so here with a target specific variable assignment - $(${tgt.name.upper()}_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value + $(${tgt.name.upper()}_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) $(${tgt.name.upper()}_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS) $(${tgt.name.upper()}_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE % else: diff --git a/templates/gRPC.podspec.template b/templates/gRPC.podspec.template index a9948a41df4615f8219338bb6241e5d15929ae65..979cb1ef8e8fbb80e1308b84d315ae0f28538975 100644 --- a/templates/gRPC.podspec.template +++ b/templates/gRPC.podspec.template @@ -54,7 +54,7 @@ %> Pod::Spec.new do |s| s.name = 'gRPC' - version = '0.12.0' + version = '0.14.0' s.version = version s.summary = 'gRPC client library for iOS/OSX' s.homepage = 'http://www.grpc.io' @@ -62,7 +62,8 @@ s.authors = { 'The gRPC contributors' => 'grpc-packages@google.com' } s.source = { :git => 'https://github.com/grpc/grpc.git', - :tag => "release-#{version.gsub(/\./, '_')}-objectivec-#{version}" } + :tag => "release-#{version.gsub(/\./, '_')}-objectivec-#{version}", + :submodules => true } s.ios.deployment_target = '7.1' @@ -97,7 +98,7 @@ ss.requires_arc = false ss.libraries = 'z' - ss.dependency 'BoringSSL', '~> 2.0' + ss.dependency 'BoringSSL', '~> 3.0' # ss.compiler_flags = '-GCC_WARN_INHIBIT_ALL_WARNINGS', '-w' end diff --git a/templates/package.json.template b/templates/package.json.template index 11718b1ccbd407e2b86229b1496fa189c248a276..9d19ca062934f07f4866ce06bcc51b7b19b8a41b 100644 --- a/templates/package.json.template +++ b/templates/package.json.template @@ -69,6 +69,8 @@ "src/node/ext", "include/grpc", "src/core", + "src/boringssl", + "src/zlib", "third_party/nanopb", "third_party/zlib", "third_party/boringssl", diff --git a/templates/package.xml.template b/templates/package.xml.template index 63132dac947a96fd706a0b7566898237137883f0..85f9a7d19eab11376f6a78cf1cb287aed8c7a821 100644 --- a/templates/package.xml.template +++ b/templates/package.xml.template @@ -12,7 +12,7 @@ <email>grpc-packages@google.com</email> <active>yes</active> </lead> - <date>2016-04-19</date> + <date>2016-05-19</date> <time>16:06:07</time> <version> <release>${settings.php_version.php()}</release> @@ -24,7 +24,7 @@ </stability> <license>BSD</license> <notes> - - destroy grpc_byte_buffer after startBatch #6096 + - TBD </notes> <contents> <dir baseinstalldir="/" name="/"> @@ -172,8 +172,8 @@ </release> <release> <version> - <release>${settings.php_version.php()}</release> - <api>${settings.php_version.php()}</api> + <release>0.14.0</release> + <api>0.14.0</api> </version> <stability> <release>beta</release> @@ -185,5 +185,35 @@ - destroy grpc_byte_buffer after startBatch #6096 </notes> </release> + <release> + <version> + <release>0.14.2</release> + <api>0.14.2</api> + </version> + <stability> + <release>beta</release> + <api>beta</api> + </stability> + <date>2016-05-18</date> + <license>BSD</license> + <notes> + - Updated functions with TSRM macros for ZTS support #6607 + </notes> + </release> + <release> + <version> + <release>${settings.php_version.php()}</release> + <api>${settings.php_version.php()}</api> + </version> + <stability> + <release>beta</release> + <api>beta</api> + </stability> + <date>2016-05-19</date> + <license>BSD</license> + <notes> + - TBD + </notes> + </release> </changelog> </package> diff --git a/templates/src/csharp/build_packages.bat.template b/templates/src/csharp/build_packages.bat.template index 3b445a8ac94323662a28813691ab352585fe752a..122435af2e840f59bf77a07aecb9ae8ab440a057 100644 --- a/templates/src/csharp/build_packages.bat.template +++ b/templates/src/csharp/build_packages.bat.template @@ -1,10 +1,39 @@ %YAML 1.2 --- | + @rem Copyright 2016, Google Inc. + @rem All rights reserved. + @rem + @rem Redistribution and use in source and binary forms, with or without + @rem modification, are permitted provided that the following conditions are + @rem met: + @rem + @rem * Redistributions of source code must retain the above copyright + @rem notice, this list of conditions and the following disclaimer. + @rem * Redistributions in binary form must reproduce the above + @rem copyright notice, this list of conditions and the following disclaimer + @rem in the documentation and/or other materials provided with the + @rem distribution. + @rem * Neither the name of Google Inc. nor the names of its + @rem contributors may be used to endorse or promote products derived from + @rem this software without specific prior written permission. + @rem + @rem THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + @rem "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + @rem LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + @rem A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + @rem OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + @rem SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + @rem LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + @rem DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + @rem THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + @rem (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + @rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + @rem Builds gRPC NuGet packages @rem Current package versions set VERSION=${settings.csharp_version} - set PROTOBUF_VERSION=3.0.0-beta2 + set PROTOBUF_VERSION=3.0.0-beta3 @rem Packages that depend on prerelease packages (like Google.Protobuf) need to have prerelease suffix as well. set VERSION_WITH_BETA=%VERSION%-beta diff --git a/templates/src/node/tools/package.json.template b/templates/src/node/tools/package.json.template index 4f673c48d1cdbda004efa7372d4de2f98a805835..69ad71a3b83b6291b683213ff21cab7c65c85ea3 100644 --- a/templates/src/node/tools/package.json.template +++ b/templates/src/node/tools/package.json.template @@ -18,8 +18,8 @@ } ], "bin": { - "grpc-tools-protoc": "./bin/protoc.js", - "grpc-tools-plugin": "./bin/protoc_plugin.js" + "grpc_tools_node_protoc": "./bin/protoc.js", + "grpc_tools_node_protoc_plugin": "./bin/protoc_plugin.js" }, "scripts": { "install": "./node_modules/.bin/node-pre-gyp install" diff --git a/templates/src/python/grpcio/grpc/_cython/imports.generated.h.template b/templates/src/python/grpcio/grpc/_cython/imports.generated.h.template index 8e7c1831800e75f72c72414d6bddffc460e4d176..26e717e58dbd9be24d064977f4ce4f8106c9a9d8 100644 --- a/templates/src/python/grpcio/grpc/_cython/imports.generated.h.template +++ b/templates/src/python/grpcio/grpc/_cython/imports.generated.h.template @@ -64,14 +64,15 @@ #else /* !GPR_WIN32 */ - #include <grpc/support/alloc.h> - #include <grpc/support/slice.h> - #include <grpc/support/time.h> - #include <grpc/status.h> #include <grpc/byte_buffer.h> #include <grpc/byte_buffer_reader.h> + #include <grpc/compression.h> #include <grpc/grpc.h> #include <grpc/grpc_security.h> + #include <grpc/support/alloc.h> + #include <grpc/support/slice.h> + #include <grpc/support/time.h> + #include <grpc/status.h> #endif /* !GPR_WIN32 */ diff --git a/templates/tools/distrib/python/grpcio_tools/grpc_version.py.template b/templates/tools/distrib/python/grpcio_tools/grpc_version.py.template new file mode 100644 index 0000000000000000000000000000000000000000..200905d4f3f67c655fedddadd78f9b15fb13f44f --- /dev/null +++ b/templates/tools/distrib/python/grpcio_tools/grpc_version.py.template @@ -0,0 +1,34 @@ +%YAML 1.2 +--- | + # 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. + + # AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/distrib/python/grpcio_tools/grpc_version.py.template`!!! + + VERSION='${settings.python_version.pep440()}' diff --git a/templates/tools/dockerfile/stress_test/grpc_interop_stress_python/Dockerfile.template b/templates/tools/dockerfile/stress_test/grpc_interop_stress_python/Dockerfile.template new file mode 100644 index 0000000000000000000000000000000000000000..27e9eeec5a838cbdee017b258a33ec42f14985e4 --- /dev/null +++ b/templates/tools/dockerfile/stress_test/grpc_interop_stress_python/Dockerfile.template @@ -0,0 +1,45 @@ +%YAML 1.2 +--- | + # 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. + + FROM debian:jessie + + <%include file="../../apt_get_basic.include"/> + <%include file="../../ccache_setup.include"/> + <%include file="../../cxx_deps.include"/> + <%include file="../../gcp_api_libraries.include"/> + <%include file="../../python_deps.include"/> + + RUN pip install coverage + RUN pip install oauth2client + + # Define the default command. + CMD ["bash"] + diff --git a/templates/tools/dockerfile/test/sanity/Dockerfile.template b/templates/tools/dockerfile/test/sanity/Dockerfile.template index 8d6f52db54eefdca7985354c03ebc8bb90a8faac..8e2140e648bb2ebca5d36271a30d958f1d01051f 100644 --- a/templates/tools/dockerfile/test/sanity/Dockerfile.template +++ b/templates/tools/dockerfile/test/sanity/Dockerfile.template @@ -43,7 +43,17 @@ python-virtualenv ${"\\"} python-lxml RUN pip install simplejson mako - + + #====================================== + # More sanity test dependencies (bazel) + RUN echo "deb http://httpredir.debian.org/debian jessie-backports main" > \ + /etc/apt/sources.list.d/backports.list + RUN apt-get update + RUN apt-get -t jessie-backports install -y openjdk-8-jdk + RUN git clone https://github.com/bazelbuild/bazel.git /bazel + RUN cd /bazel && ./compile.sh + RUN ln -s /bazel/output/bazel /bin/ + #=================== # Docker "inception" # Note this is quite the ugly hack. diff --git a/test/build/extra-semi.c b/test/build/extra-semi.c new file mode 100644 index 0000000000000000000000000000000000000000..60466dda7864ca159cc84d0eb7edf8ea8f5bb750 --- /dev/null +++ b/test/build/extra-semi.c @@ -0,0 +1,34 @@ +/* + * + * 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. + * + */ + +int main(void) {} diff --git a/test/build/no-shift-negative-value.c b/test/build/no-shift-negative-value.c new file mode 100644 index 0000000000000000000000000000000000000000..58e4698aee27be74d5e8c47af49dc33e17e7b8c5 --- /dev/null +++ b/test/build/no-shift-negative-value.c @@ -0,0 +1,34 @@ +/* + * + * 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. + * + */ + +int main(void) {} diff --git a/test/core/bad_client/bad_client.c b/test/core/bad_client/bad_client.c index cd5b541249272747acc20c77c954aa82753a105f..e5820688ef143110dd7422f1adc8e466b5c31f3c 100644 --- a/test/core/bad_client/bad_client.c +++ b/test/core/bad_client/bad_client.c @@ -75,9 +75,22 @@ static void server_setup_transport(void *ts, grpc_transport *transport) { grpc_exec_ctx_finish(&exec_ctx); } -void grpc_run_bad_client_test(grpc_bad_client_server_side_validator validator, - const char *client_payload, - size_t client_payload_length, uint32_t flags) { +typedef struct { + grpc_bad_client_client_stream_validator validator; + gpr_slice_buffer incoming; + gpr_event read_done; +} read_args; + +static void read_done(grpc_exec_ctx *exec_ctx, void *arg, bool success) { + read_args *a = arg; + a->validator(&a->incoming); + gpr_event_set(&a->read_done, (void *)1); +} + +void grpc_run_bad_client_test( + grpc_bad_client_server_side_validator server_validator, + grpc_bad_client_client_stream_validator client_validator, + const char *client_payload, size_t client_payload_length, uint32_t flags) { grpc_endpoint_pair sfd; thd_args a; gpr_thd_id id; @@ -108,7 +121,7 @@ void grpc_run_bad_client_test(grpc_bad_client_server_side_validator validator, a.cq = grpc_completion_queue_create(NULL); gpr_event_init(&a.done_thd); gpr_event_init(&a.done_write); - a.validator = validator; + a.validator = server_validator; grpc_server_register_completion_queue(a.server, a.cq, NULL); a.registered_method = grpc_server_register_method(a.server, GRPC_BAD_CLIENT_REGISTERED_METHOD, @@ -151,8 +164,23 @@ void grpc_run_bad_client_test(grpc_bad_client_server_side_validator validator, GPR_ASSERT(gpr_event_wait(&a.done_thd, GRPC_TIMEOUT_SECONDS_TO_DEADLINE(5))); - /* Shutdown */ - if (sfd.client) { + if (sfd.client != NULL) { + // Validate client stream, if requested. + if (client_validator != NULL) { + read_args args; + args.validator = client_validator; + gpr_slice_buffer_init(&args.incoming); + gpr_event_init(&args.read_done); + grpc_closure read_done_closure; + grpc_closure_init(&read_done_closure, read_done, &args); + grpc_endpoint_read(&exec_ctx, sfd.client, &args.incoming, + &read_done_closure); + grpc_exec_ctx_finish(&exec_ctx); + GPR_ASSERT( + gpr_event_wait(&args.read_done, GRPC_TIMEOUT_SECONDS_TO_DEADLINE(5))); + gpr_slice_buffer_destroy(&args.incoming); + } + // Shutdown. grpc_endpoint_shutdown(&exec_ctx, sfd.client); grpc_endpoint_destroy(&exec_ctx, sfd.client); grpc_exec_ctx_finish(&exec_ctx); diff --git a/test/core/bad_client/bad_client.h b/test/core/bad_client/bad_client.h index 19ddba83bf01145b5925310a104b82662a9fce39..c8b2a4122f06149e522b464a6baf424d119ba2cc 100644 --- a/test/core/bad_client/bad_client.h +++ b/test/core/bad_client/bad_client.h @@ -44,18 +44,24 @@ typedef void (*grpc_bad_client_server_side_validator)(grpc_server *server, grpc_completion_queue *cq, void *registered_method); +typedef void (*grpc_bad_client_client_stream_validator)( + gpr_slice_buffer *incoming); + #define GRPC_BAD_CLIENT_DISCONNECT 1 /* Test runner. Create a server, and send client_payload to it as bytes from a client. - Execute validator in a separate thread to assert that the bytes are + Execute server_validator in a separate thread to assert that the bytes are handled as expected. */ -void grpc_run_bad_client_test(grpc_bad_client_server_side_validator validator, - const char *client_payload, - size_t client_payload_length, uint32_t flags); +void grpc_run_bad_client_test( + grpc_bad_client_server_side_validator server_validator, + grpc_bad_client_client_stream_validator client_validator, + const char *client_payload, size_t client_payload_length, uint32_t flags); -#define GRPC_RUN_BAD_CLIENT_TEST(validator, payload, flags) \ - grpc_run_bad_client_test(validator, payload, sizeof(payload) - 1, flags) +#define GRPC_RUN_BAD_CLIENT_TEST(server_validator, client_validator, payload, \ + flags) \ + grpc_run_bad_client_test(server_validator, client_validator, payload, \ + sizeof(payload) - 1, flags) #endif /* GRPC_TEST_CORE_BAD_CLIENT_BAD_CLIENT_H */ diff --git a/test/core/bad_client/gen_build_yaml.py b/test/core/bad_client/gen_build_yaml.py index d49858ed6d85caff647429786a252bc020536352..fb86525b1a16f75cc40939694a517e75ffeff8ec 100755 --- a/test/core/bad_client/gen_build_yaml.py +++ b/test/core/bad_client/gen_build_yaml.py @@ -29,7 +29,7 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -"""Generates the appropriate build.json data for all the end2end tests.""" +"""Generates the appropriate build.json data for all the bad_client tests.""" import collections @@ -45,6 +45,7 @@ BAD_CLIENT_TESTS = { 'headers': default_test_options._replace(cpu_cost=0.2), 'initial_settings_frame': default_test_options._replace(cpu_cost=0.2), 'head_of_line_blocking': default_test_options, + 'large_metadata': default_test_options, 'server_registered_method': default_test_options, 'simple_request': default_test_options, 'window_overflow': default_test_options, diff --git a/test/core/bad_client/tests/badreq.c b/test/core/bad_client/tests/badreq.c index b17e3b35ee40c9240b6e3820e4498c2a4777108f..5d9ffef3f20c4d2420b096cc0464227e454b54eb 100644 --- a/test/core/bad_client/tests/badreq.c +++ b/test/core/bad_client/tests/badreq.c @@ -56,7 +56,7 @@ int main(int argc, char **argv) { /* invalid content type */ GRPC_RUN_BAD_CLIENT_TEST( - verifier, PFX_STR + verifier, NULL, PFX_STR "\x00\x00\xc2\x01\x04\x00\x00\x00\x01" "\x10\x05:path\x08/foo/bar" "\x10\x07:scheme\x04http" @@ -71,7 +71,7 @@ int main(int argc, char **argv) { /* invalid te */ GRPC_RUN_BAD_CLIENT_TEST( - verifier, PFX_STR + verifier, NULL, PFX_STR "\x00\x00\xcb\x01\x04\x00\x00\x00\x01" "\x10\x05:path\x08/foo/bar" "\x10\x07:scheme\x04http" @@ -88,7 +88,7 @@ int main(int argc, char **argv) { /* two path headers */ GRPC_RUN_BAD_CLIENT_TEST( - verifier, PFX_STR + verifier, NULL, PFX_STR "\x00\x00\xd9\x01\x04\x00\x00\x00\x01" "\x10\x05:path\x08/foo/bar" "\x10\x05:path\x08/foo/bah" @@ -105,7 +105,7 @@ int main(int argc, char **argv) { /* bad accept-encoding algorithm */ GRPC_RUN_BAD_CLIENT_TEST( - verifier, PFX_STR + verifier, NULL, PFX_STR "\x00\x00\xd2\x01\x04\x00\x00\x00\x01" "\x10\x05:path\x08/foo/bar" "\x10\x07:scheme\x04http" @@ -121,7 +121,7 @@ int main(int argc, char **argv) { /* bad grpc-encoding algorithm */ GRPC_RUN_BAD_CLIENT_TEST( - verifier, PFX_STR + verifier, NULL, PFX_STR "\x00\x00\xf5\x01\x04\x00\x00\x00\x01" "\x10\x05:path\x08/foo/bar" "\x10\x07:scheme\x04http" diff --git a/test/core/bad_client/tests/connection_prefix.c b/test/core/bad_client/tests/connection_prefix.c index 9a30aad0e9315ceb4a12b6b903198f6306e771c8..bc5ed2e393401ee08cd8d25bba6e5b7458199038 100644 --- a/test/core/bad_client/tests/connection_prefix.c +++ b/test/core/bad_client/tests/connection_prefix.c @@ -46,29 +46,30 @@ static void verifier(grpc_server *server, grpc_completion_queue *cq, int main(int argc, char **argv) { grpc_test_init(argc, argv); - GRPC_RUN_BAD_CLIENT_TEST(verifier, "X", 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, "PX", 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRX", 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRIX", 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRI X", 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRI *X", 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRI * X", 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRI * HX", 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRI * HTX", 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRI * HTTX", 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRI * HTTPX", 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRI * HTTP/X", 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRI * HTTP/2X", 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRI * HTTP/2.X", 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRI * HTTP/2.0X", 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRI * HTTP/2.0\rX", 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRI * HTTP/2.0\r\nX", 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRI * HTTP/2.0\r\n\rX", 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRI * HTTP/2.0\r\n\r\nX", 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRI * HTTP/2.0\r\n\r\nSX", 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRI * HTTP/2.0\r\n\r\nSMX", 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRI * HTTP/2.0\r\n\r\nSM\rX", 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRI * HTTP/2.0\r\n\r\nSM\r\nX", 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, "PRI * HTTP/2.0\r\n\r\nSM\r\n\rX", 0); + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "X", 0); + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PX", 0); + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRX", 0); + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRIX", 0); + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRI X", 0); + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRI *X", 0); + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRI * X", 0); + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRI * HX", 0); + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRI * HTX", 0); + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRI * HTTX", 0); + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRI * HTTPX", 0); + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRI * HTTP/X", 0); + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRI * HTTP/2X", 0); + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRI * HTTP/2.X", 0); + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRI * HTTP/2.0X", 0); + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRI * HTTP/2.0\rX", 0); + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRI * HTTP/2.0\r\nX", 0); + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRI * HTTP/2.0\r\n\rX", 0); + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRI * HTTP/2.0\r\n\r\nX", 0); + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRI * HTTP/2.0\r\n\r\nSX", 0); + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRI * HTTP/2.0\r\n\r\nSMX", 0); + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRI * HTTP/2.0\r\n\r\nSM\rX", 0); + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRI * HTTP/2.0\r\n\r\nSM\r\nX", 0); + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, "PRI * HTTP/2.0\r\n\r\nSM\r\n\rX", + 0); return 0; } diff --git a/test/core/bad_client/tests/head_of_line_blocking.c b/test/core/bad_client/tests/head_of_line_blocking.c index 53cd4537b2ffdb8e76a1f38034d4a9aa2d3d63e1..e4051bb6685708a586ab045e27660858d71723d8 100644 --- a/test/core/bad_client/tests/head_of_line_blocking.c +++ b/test/core/bad_client/tests/head_of_line_blocking.c @@ -144,7 +144,7 @@ int main(int argc, char **argv) { addbuf(hdr, sizeof(hdr)); addbuf(msg, FRAME_SIZE); } - grpc_run_bad_client_test(verifier, g_buffer, g_count, 0); + grpc_run_bad_client_test(verifier, NULL, g_buffer, g_count, 0); gpr_free(g_buffer); return 0; diff --git a/test/core/bad_client/tests/headers.c b/test/core/bad_client/tests/headers.c index 4c1a76743e302a72d4b371a03e3d464c28e56f83..f872e5006a7bfa46cefe95ca141782dd1f94e494 100644 --- a/test/core/bad_client/tests/headers.c +++ b/test/core/bad_client/tests/headers.c @@ -51,249 +51,251 @@ int main(int argc, char **argv) { grpc_test_init(argc, argv); /* partial http2 header prefixes */ - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00", + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00", GRPC_BAD_CLIENT_DISCONNECT); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00\x00", + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00", GRPC_BAD_CLIENT_DISCONNECT); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00\x00\x00", + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x00", GRPC_BAD_CLIENT_DISCONNECT); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00\x00\x00\x01", + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x00\x01", GRPC_BAD_CLIENT_DISCONNECT); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00\x00\x00\x01\x00", + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x00\x01\x00", GRPC_BAD_CLIENT_DISCONNECT); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00\x00\x00\x01\x04", + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x00\x01\x04", GRPC_BAD_CLIENT_DISCONNECT); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00\x00\x00\x01\x05", + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x00\x01\x05", GRPC_BAD_CLIENT_DISCONNECT); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00\x00\x00\x01\x04\x00", + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x00\x01\x04\x00", GRPC_BAD_CLIENT_DISCONNECT); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00\x00\x00\x01\x04\x00\x00", + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, + PFX_STR "\x00\x00\x00\x01\x04\x00\x00", GRPC_BAD_CLIENT_DISCONNECT); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00\x00\x00\x01\x04\x00\x00\x00", + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, + PFX_STR "\x00\x00\x00\x01\x04\x00\x00\x00", GRPC_BAD_CLIENT_DISCONNECT); - GRPC_RUN_BAD_CLIENT_TEST(verifier, + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x00\x01\x04\x00\x00\x00\x00", GRPC_BAD_CLIENT_DISCONNECT); - GRPC_RUN_BAD_CLIENT_TEST(verifier, + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x00\x01\x04\x00\x00\x00\x01", GRPC_BAD_CLIENT_DISCONNECT); /* test adding prioritization data */ - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x01\x01\x24\x00\x00\x00\x01" "\x00", 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x02\x01\x24\x00\x00\x00\x01" "\x00\x00", 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x03\x01\x24\x00\x00\x00\x01" "\x00\x00\x00", 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x04\x01\x24\x00\x00\x00\x01" "\x00\x00\x00\x00", 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x05\x01\x24\x00\x00\x00\x01" "", GRPC_BAD_CLIENT_DISCONNECT); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x05\x01\x24\x00\x00\x00\x01" "\x00", GRPC_BAD_CLIENT_DISCONNECT); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x05\x01\x24\x00\x00\x00\x01" "\x00\x00", GRPC_BAD_CLIENT_DISCONNECT); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x05\x01\x24\x00\x00\x00\x01" "\x00\x00\x00", GRPC_BAD_CLIENT_DISCONNECT); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x05\x01\x24\x00\x00\x00\x01" "\x00\x00\x00\x00", GRPC_BAD_CLIENT_DISCONNECT); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x05\x01\x24\x00\x00\x00\x01" "\x00\x00\x00\x00\x00", GRPC_BAD_CLIENT_DISCONNECT); /* test looking up an invalid index */ - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x01\x01\x04\x00\x00\x00\x01" "\xfe", 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x04\x01\x04\x00\x00\x00\x01" "\x7f\x7f\x01" "a", 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x04\x01\x04\x00\x00\x00\x01" "\x0f\x7f\x01" "a", 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x04\x01\x04\x00\x00\x00\x01" "\x1f\x7f\x01" "a", 0); /* test nvr, not indexed in static table */ - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x03\x01\x04\x00\x00\x00\x01" "\x01\x01" "a", GRPC_BAD_CLIENT_DISCONNECT); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x03\x01\x04\x00\x00\x00\x01" "\x11\x01" "a", GRPC_BAD_CLIENT_DISCONNECT); /* illegal op code */ - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x01\x01\x04\x00\x00\x00\x01" "\x80", 0); /* parse some long indices */ - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x02\x01\x04\x00\x00\x00\x01" "\xff\x00", 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x03\x01\x04\x00\x00\x00\x01" "\xff\x80\x00", 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x04\x01\x04\x00\x00\x00\x01" "\xff\x80\x80\x00", 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x05\x01\x04\x00\x00\x00\x01" "\xff\x80\x80\x80\x00", 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x06\x01\x04\x00\x00\x00\x01" "\xff\x80\x80\x80\x80\x00", 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x07\x01\x04\x00\x00\x00\x01" "\xff\x80\x80\x80\x80\x80\x00", 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x08\x01\x04\x00\x00\x00\x01" "\xff", GRPC_BAD_CLIENT_DISCONNECT); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x08\x01\x04\x00\x00\x00\x01" "\xff\x80", GRPC_BAD_CLIENT_DISCONNECT); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x08\x01\x04\x00\x00\x00\x01" "\xff\x80\x80", GRPC_BAD_CLIENT_DISCONNECT); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x08\x01\x04\x00\x00\x00\x01" "\xff\x80\x80\x80", GRPC_BAD_CLIENT_DISCONNECT); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x08\x01\x04\x00\x00\x00\x01" "\xff\x80\x80\x80\x80", GRPC_BAD_CLIENT_DISCONNECT); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x08\x01\x04\x00\x00\x00\x01" "\xff\x80\x80\x80\x80\x80", GRPC_BAD_CLIENT_DISCONNECT); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x08\x01\x04\x00\x00\x00\x01" "\xff\x80\x80\x80\x80\x80\x80", GRPC_BAD_CLIENT_DISCONNECT); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x08\x01\x04\x00\x00\x00\x01" "\xff\x80\x80\x80\x80\x80\x80\x00", 0); /* overflow on byte 4 */ - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x06\x01\x04\x00\x00\x00\x01" "\xff\x80\x80\x80\x80\x7f", GRPC_BAD_CLIENT_DISCONNECT); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x06\x01\x04\x00\x00\x00\x01" "\xff\xff\xff\xff\xff\x0f", GRPC_BAD_CLIENT_DISCONNECT); /* overflow after byte 4 */ - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x08\x01\x04\x00\x00\x00\x01" "\xff\x80\x80\x80\x80\x80\x80\x02", 0); /* end of headers mid-opcode */ - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x01\x01\x04\x00\x00\x00\x01" "\x01", GRPC_BAD_CLIENT_DISCONNECT); /* dynamic table size update: set to default */ - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x03\x01\x04\x00\x00\x00\x01" "\x3f\xe1\x1f", GRPC_BAD_CLIENT_DISCONNECT); /* dynamic table size update: set too large */ - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x03\x01\x04\x00\x00\x00\x01" "\x3f\xf1\x1f", 0); /* dynamic table size update: set twice */ - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x04\x01\x04\x00\x00\x00\x01" "\x20\x3f\xe1\x1f", GRPC_BAD_CLIENT_DISCONNECT); /* dynamic table size update: set thrice */ - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x03\x01\x04\x00\x00\x00\x01" "\x20\x20\x20", 0); /* non-ending header followed by continuation frame */ - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x00\x01\x00\x00\x00\x00\x01" "\x00\x00\x00\x09\x04\x00\x00\x00\x01", GRPC_BAD_CLIENT_DISCONNECT); /* non-ending header followed by non-continuation frame */ - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x00\x01\x00\x00\x00\x00\x01" "\x00\x00\x00\x00\x04\x00\x00\x00\x01", 0); /* non-ending header followed by a continuation frame for a different stream */ - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x00\x01\x04\x00\x00\x00\x01" "\x00\x00\x00\x01\x00\x00\x00\x00\x03" "\x00\x00\x00\x09\x04\x00\x00\x00\x01", 0); /* opening with a continuation frame */ - GRPC_RUN_BAD_CLIENT_TEST(verifier, + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x00\x09\x04\x00\x00\x00\x01", 0); /* three header frames */ - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x00\x01\x04\x00\x00\x00\x01" "\x00\x00\x00\x01\x04\x00\x00\x00\x01" "\x00\x00\x00\x01\x04\x00\x00\x00\x01", GRPC_BAD_CLIENT_DISCONNECT); /* an invalid header found with fuzzing */ - GRPC_RUN_BAD_CLIENT_TEST(verifier, + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x00\x01\x39\x67\xed\x1d\x64", GRPC_BAD_CLIENT_DISCONNECT); /* a badly encoded timeout value */ - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x19\x01\x04\x00\x00\x00\x01" "\x10\x0cgrpc-timeout\x0a" "15 seconds", GRPC_BAD_CLIENT_DISCONNECT); /* a badly encoded timeout value: twice (catches caching) */ - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x19\x01\x04\x00\x00\x00\x01" "\x10\x0cgrpc-timeout\x0a" "15 seconds" diff --git a/test/core/bad_client/tests/initial_settings_frame.c b/test/core/bad_client/tests/initial_settings_frame.c index 63a770df91f28641259d68fbc8dafbbfadc554d2..b84b67a7e58bfb31c8d39960fa3dadc62af0e27e 100644 --- a/test/core/bad_client/tests/initial_settings_frame.c +++ b/test/core/bad_client/tests/initial_settings_frame.c @@ -50,70 +50,72 @@ int main(int argc, char **argv) { grpc_test_init(argc, argv); /* various partial prefixes */ - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00", + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00", GRPC_BAD_CLIENT_DISCONNECT); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00\x00", + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00", GRPC_BAD_CLIENT_DISCONNECT); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00\x00\x00", + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x00", GRPC_BAD_CLIENT_DISCONNECT); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x06", + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x06", GRPC_BAD_CLIENT_DISCONNECT); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00\x06", + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x06", GRPC_BAD_CLIENT_DISCONNECT); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00\x00\x06", + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x06", GRPC_BAD_CLIENT_DISCONNECT); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00\x00\x00\x04", + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x00\x04", GRPC_BAD_CLIENT_DISCONNECT); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00\x00\x00\x04\x00", + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x00\x04\x00", GRPC_BAD_CLIENT_DISCONNECT); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00\x00\x00\x04\x01", + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x00\x04\x01", GRPC_BAD_CLIENT_DISCONNECT); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00\x00\x00\x04\xff", + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x00\x04\xff", GRPC_BAD_CLIENT_DISCONNECT); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00\x00\x00\x04\x00\x00", + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x00\x04\x00\x00", GRPC_BAD_CLIENT_DISCONNECT); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00\x00\x00\x04\x00\x00\x00", + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, + PFX_STR "\x00\x00\x00\x04\x00\x00\x00", GRPC_BAD_CLIENT_DISCONNECT); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR "\x00\x00\x00\x04\x00\x00\x00\x00", + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, + PFX_STR "\x00\x00\x00\x04\x00\x00\x00\x00", GRPC_BAD_CLIENT_DISCONNECT); /* must not send frames with stream id != 0 */ - GRPC_RUN_BAD_CLIENT_TEST(verifier, + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x00\x04\x00\x00\x00\x00\x01", 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x00\x04\x00\x40\x00\x00\x00", 0); /* settings frame must be a multiple of six bytes long */ - GRPC_RUN_BAD_CLIENT_TEST(verifier, + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x01\x04\x00\x00\x00\x00\x00", 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x02\x04\x00\x00\x00\x00\x00", 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x03\x04\x00\x00\x00\x00\x00", 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x04\x04\x00\x00\x00\x00\x00", 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x05\x04\x00\x00\x00\x00\x00", 0); /* some settings values are illegal */ /* max frame size = 0 */ - GRPC_RUN_BAD_CLIENT_TEST(verifier, + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR ONE_SETTING_HDR "\x00\x05\x00\x00\x00\x00", GRPC_BAD_CLIENT_DISCONNECT); - GRPC_RUN_BAD_CLIENT_TEST(verifier, + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR ONE_SETTING_HDR "\x00\x06\xff\xff\xff\xff", GRPC_BAD_CLIENT_DISCONNECT); /* update intiial window size */ - GRPC_RUN_BAD_CLIENT_TEST(verifier, + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR ONE_SETTING_HDR "\x00\x04\x00\x01\x00\x00", GRPC_BAD_CLIENT_DISCONNECT); /* ack with data */ - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x00\x04\x00\x00\x00\x00\x00" "\x00\x00\x01\x04\x01\x00\x00\x00\x00", 0); /* settings frame with invalid flags */ - GRPC_RUN_BAD_CLIENT_TEST(verifier, + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x00\x04\x10\x00\x00\x00\x00", 0); /* unknown settings should be ignored */ - GRPC_RUN_BAD_CLIENT_TEST(verifier, + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR ONE_SETTING_HDR "\x00\x99\x00\x00\x00\x00", GRPC_BAD_CLIENT_DISCONNECT); diff --git a/test/core/bad_client/tests/large_metadata.c b/test/core/bad_client/tests/large_metadata.c new file mode 100644 index 0000000000000000000000000000000000000000..b7d329cb7415f1033f074b521d6926fef61a3458 --- /dev/null +++ b/test/core/bad_client/tests/large_metadata.c @@ -0,0 +1,247 @@ +/* + * + * 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 "test/core/bad_client/bad_client.h" + +#include <string.h> + +#include <grpc/support/alloc.h> +#include <grpc/support/string_util.h> +#include "src/core/lib/support/string.h" +#include "src/core/lib/surface/server.h" +#include "test/core/end2end/cq_verifier.h" + +// The large-metadata headers that we're adding for this test are not +// actually appended to this in a single string, since the string would +// be longer than the C99 string literal limit. Instead, we dynamically +// construct it by adding the large headers one at a time. +#define PFX_TOO_MUCH_METADATA_FROM_CLIENT_PREFIX_STR \ + "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n" /* settings frame */ \ + "\x00\x00\x00\x04\x00\x00\x00\x00\x00" /* headers: generated from \ + large_metadata.headers in this \ + directory */ \ + "\x00" \ + "5{\x01\x05\x00\x00\x00\x01" \ + "\x10\x05:path\x08/foo/bar" \ + "\x10\x07:scheme\x04http" \ + "\x10\x07:method\x04POST" \ + "\x10\x0a:authority\x09localhost" \ + "\x10\x0c" \ + "content-type\x10" \ + "application/grpc" \ + "\x10\x14grpc-accept-encoding\x15identity,deflate,gzip" \ + "\x10\x02te\x08trailers" \ + "\x10\x0auser-agent\"bad-client grpc-c/0.12.0.0 (linux)" + +// Each large-metadata header is constructed from these start and end +// strings, with a two-digit number in between. +#define PFX_TOO_MUCH_METADATA_FROM_CLIENT_HEADER_START_STR "\x10\x0duser-header" +#define PFX_TOO_MUCH_METADATA_FROM_CLIENT_HEADER_END_STR \ + "~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" \ + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + +// The size of each large-metadata header string. +#define PFX_TOO_MUCH_METADATA_FROM_CLIENT_HEADER_SIZE \ + ((sizeof(PFX_TOO_MUCH_METADATA_FROM_CLIENT_HEADER_START_STR) - 1) + 2 + \ + (sizeof(PFX_TOO_MUCH_METADATA_FROM_CLIENT_HEADER_END_STR) - 1)) + +// The number of headers we're adding and the total size of the client +// payload. +#define NUM_HEADERS 95 +#define PFX_TOO_MUCH_METADATA_FROM_CLIENT_PAYLOAD_SIZE \ + ((sizeof(PFX_TOO_MUCH_METADATA_FROM_CLIENT_PREFIX_STR) - 1) + \ + (NUM_HEADERS * PFX_TOO_MUCH_METADATA_FROM_CLIENT_HEADER_SIZE) + 1) + +#define PFX_TOO_MUCH_METADATA_FROM_SERVER_STR \ + "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n" /* settings frame: sets \ + MAX_HEADER_LIST_SIZE to 16K */ \ + "\x00\x00\x06\x04\x00\x00\x00\x00\x00\x00\x06\x00\x00\x40\x00" /* headers: \ + generated \ + from \ + simple_request.headers \ + in this \ + directory \ + */ \ + "\x00\x00\xc9\x01\x04\x00\x00\x00\x01" \ + "\x10\x05:path\x08/foo/bar" \ + "\x10\x07:scheme\x04http" \ + "\x10\x07:method\x04POST" \ + "\x10\x0a:authority\x09localhost" \ + "\x10\x0c" \ + "content-type\x10" \ + "application/grpc" \ + "\x10\x14grpc-accept-encoding\x15" \ + "deflate,identity,gzip" \ + "\x10\x02te\x08trailers" \ + "\x10\x0auser-agent\"bad-client grpc-c/0.12.0.0 (linux)" + +static void *tag(intptr_t t) { return (void *)t; } + +static void server_verifier(grpc_server *server, grpc_completion_queue *cq, + void *registered_method) { + grpc_call_error error; + grpc_call *s; + grpc_call_details call_details; + cq_verifier *cqv = cq_verifier_create(cq); + grpc_metadata_array request_metadata_recv; + + grpc_call_details_init(&call_details); + grpc_metadata_array_init(&request_metadata_recv); + + error = grpc_server_request_call(server, &s, &call_details, + &request_metadata_recv, cq, cq, tag(101)); + GPR_ASSERT(GRPC_CALL_OK == error); + cq_expect_completion(cqv, tag(101), 1); + cq_verify(cqv); + + GPR_ASSERT(0 == strcmp(call_details.host, "localhost")); + GPR_ASSERT(0 == strcmp(call_details.method, "/foo/bar")); + + grpc_metadata_array_destroy(&request_metadata_recv); + grpc_call_details_destroy(&call_details); + grpc_call_destroy(s); + cq_verifier_destroy(cqv); +} + +static void server_verifier_sends_too_much_metadata(grpc_server *server, + grpc_completion_queue *cq, + void *registered_method) { + grpc_call_error error; + grpc_call *s; + grpc_call_details call_details; + cq_verifier *cqv = cq_verifier_create(cq); + grpc_metadata_array request_metadata_recv; + + grpc_call_details_init(&call_details); + grpc_metadata_array_init(&request_metadata_recv); + + error = grpc_server_request_call(server, &s, &call_details, + &request_metadata_recv, cq, cq, tag(101)); + GPR_ASSERT(GRPC_CALL_OK == error); + cq_expect_completion(cqv, tag(101), 1); + cq_verify(cqv); + + GPR_ASSERT(0 == strcmp(call_details.host, "localhost")); + GPR_ASSERT(0 == strcmp(call_details.method, "/foo/bar")); + + const size_t metadata_value_size = 16 * 1024; + grpc_metadata meta; + meta.key = "key"; + meta.value = gpr_malloc(metadata_value_size + 1); + memset((char *)meta.value, 'a', metadata_value_size); + ((char *)meta.value)[metadata_value_size] = 0; + meta.value_length = metadata_value_size; + + grpc_op op; + op.op = GRPC_OP_SEND_INITIAL_METADATA; + op.data.send_initial_metadata.count = 1; + op.data.send_initial_metadata.metadata = &meta; + op.flags = 0; + op.reserved = NULL; + error = grpc_call_start_batch(s, &op, 1, tag(102), NULL); + GPR_ASSERT(GRPC_CALL_OK == error); + cq_expect_completion(cqv, tag(102), 0); // Operation fails. + cq_verify(cqv); + + gpr_free((char *)meta.value); + grpc_metadata_array_destroy(&request_metadata_recv); + grpc_call_details_destroy(&call_details); + grpc_call_destroy(s); + cq_verifier_destroy(cqv); +} + +static void client_validator(gpr_slice_buffer *incoming) { + // Get last frame from incoming slice buffer. + gpr_slice_buffer last_frame_buffer; + gpr_slice_buffer_init(&last_frame_buffer); + gpr_slice_buffer_trim_end(incoming, 13, &last_frame_buffer); + GPR_ASSERT(last_frame_buffer.count == 1); + gpr_slice last_frame = last_frame_buffer.slices[0]; + // Construct expected frame. + gpr_slice expected = gpr_slice_malloc(13); + uint8_t *p = GPR_SLICE_START_PTR(expected); + // Length. + *p++ = 0; + *p++ = 0; + *p++ = 4; + // Frame type (RST_STREAM). + *p++ = 3; + // Flags. + *p++ = 0; + // Stream ID. + *p++ = 0; + *p++ = 0; + *p++ = 0; + *p++ = 1; + // Payload (error code). + *p++ = 0; + *p++ = 0; + *p++ = 0; + *p++ = 11; + // Compare actual and expected. + GPR_ASSERT(gpr_slice_cmp(last_frame, expected) == 0); + gpr_slice_buffer_destroy(&last_frame_buffer); +} + +int main(int argc, char **argv) { + grpc_test_init(argc, argv); + + // Test sending more metadata than the server will accept. + gpr_strvec headers; + gpr_strvec_init(&headers); + for (int i = 0; i < NUM_HEADERS; ++i) { + char *str; + gpr_asprintf(&str, "%s%02d%s", + PFX_TOO_MUCH_METADATA_FROM_CLIENT_HEADER_START_STR, i, + PFX_TOO_MUCH_METADATA_FROM_CLIENT_HEADER_END_STR); + gpr_strvec_add(&headers, str); + } + size_t headers_len; + const char *client_headers = gpr_strvec_flatten(&headers, &headers_len); + gpr_strvec_destroy(&headers); + char client_payload[PFX_TOO_MUCH_METADATA_FROM_CLIENT_PAYLOAD_SIZE] = + PFX_TOO_MUCH_METADATA_FROM_CLIENT_PREFIX_STR; + memcpy( + client_payload + sizeof(PFX_TOO_MUCH_METADATA_FROM_CLIENT_PREFIX_STR) - 1, + client_headers, headers_len); + GRPC_RUN_BAD_CLIENT_TEST(server_verifier, client_validator, client_payload, + 0); + gpr_free((void *)client_headers); + + // Test sending more metadata than the client will accept. + GRPC_RUN_BAD_CLIENT_TEST(server_verifier_sends_too_much_metadata, + client_validator, + PFX_TOO_MUCH_METADATA_FROM_SERVER_STR, 0); + + return 0; +} diff --git a/test/core/bad_client/tests/large_metadata.headers b/test/core/bad_client/tests/large_metadata.headers new file mode 100644 index 0000000000000000000000000000000000000000..75de3ef100141c0789444c4990a29e3d73848914 --- /dev/null +++ b/test/core/bad_client/tests/large_metadata.headers @@ -0,0 +1,106 @@ +# headers used in simple_request.c +# use tools/codegen/core/gen_header_frame.py --set_end_stream to generate +# the binary strings contained in the source code +:path: /foo/bar +:scheme: http +:method: POST +:authority: localhost +content-type: application/grpc +grpc-accept-encoding: identity,deflate,gzip +te: trailers +user-agent: bad-client grpc-c/0.12.0.0 (linux) +user-header00: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header01: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header02: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header03: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header04: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header05: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header06: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header07: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header08: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header09: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header10: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header11: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header12: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header13: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header14: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header15: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header16: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header17: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header18: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header19: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header20: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header21: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header22: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header23: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header24: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header25: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header26: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header27: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header28: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header29: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header30: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header31: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header32: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header33: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header34: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header35: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header36: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header37: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header38: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header39: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header40: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header41: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header42: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header43: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header44: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header45: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header46: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header47: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header48: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header49: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header50: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header51: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header52: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header53: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header54: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header55: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header56: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header57: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header58: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header59: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header60: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header61: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header62: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header63: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header64: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header65: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header66: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header67: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header68: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header69: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header70: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header71: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header72: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header73: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header74: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header75: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header76: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header77: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header78: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header79: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header80: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header81: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header82: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header83: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header84: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header85: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header86: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header87: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header88: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header89: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header90: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header91: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header92: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header93: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +user-header94: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/test/core/bad_client/tests/server_registered_method.c b/test/core/bad_client/tests/server_registered_method.c index 60d3b890b224a503d5085d4e8bf8e400c445912b..6216553a6148ae0f1e8e52e1a6e9ad1ef09a8831 100644 --- a/test/core/bad_client/tests/server_registered_method.c +++ b/test/core/bad_client/tests/server_registered_method.c @@ -111,43 +111,43 @@ int main(int argc, char **argv) { /* body generated with * tools/codegen/core/gen_server_registered_method_bad_client_test_body.py */ - GRPC_RUN_BAD_CLIENT_TEST(verifier_fails, + GRPC_RUN_BAD_CLIENT_TEST(verifier_fails, NULL, PFX_STR "\x00\x00\x00\x00\x00\x00\x00\x00\x01", GRPC_BAD_CLIENT_DISCONNECT); - GRPC_RUN_BAD_CLIENT_TEST(verifier_fails, + GRPC_RUN_BAD_CLIENT_TEST(verifier_fails, NULL, PFX_STR "\x00\x00\x01\x00\x00\x00\x00\x00\x01\x00", GRPC_BAD_CLIENT_DISCONNECT); - GRPC_RUN_BAD_CLIENT_TEST(verifier_fails, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier_fails, NULL, PFX_STR "\x00\x00\x02\x00\x00\x00\x00\x00\x01\x00\x00", GRPC_BAD_CLIENT_DISCONNECT); - GRPC_RUN_BAD_CLIENT_TEST(verifier_fails, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier_fails, NULL, PFX_STR "\x00\x00\x03\x00\x00\x00\x00\x00\x01\x00\x00\x00", GRPC_BAD_CLIENT_DISCONNECT); GRPC_RUN_BAD_CLIENT_TEST( - verifier_fails, + verifier_fails, NULL, PFX_STR "\x00\x00\x04\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00", GRPC_BAD_CLIENT_DISCONNECT); GRPC_RUN_BAD_CLIENT_TEST( - verifier_succeeds, + verifier_succeeds, NULL, PFX_STR "\x00\x00\x05\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00", 0); GRPC_RUN_BAD_CLIENT_TEST( - verifier_fails, + verifier_fails, NULL, PFX_STR "\x00\x00\x05\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x01", GRPC_BAD_CLIENT_DISCONNECT); GRPC_RUN_BAD_CLIENT_TEST( - verifier_succeeds, + verifier_succeeds, NULL, PFX_STR "\x00\x00\x06\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x01\x00", 0); GRPC_RUN_BAD_CLIENT_TEST( - verifier_fails, + verifier_fails, NULL, PFX_STR "\x00\x00\x05\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x02", GRPC_BAD_CLIENT_DISCONNECT); GRPC_RUN_BAD_CLIENT_TEST( - verifier_fails, + verifier_fails, NULL, PFX_STR "\x00\x00\x06\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x02\x00", GRPC_BAD_CLIENT_DISCONNECT); GRPC_RUN_BAD_CLIENT_TEST( - verifier_succeeds, PFX_STR + verifier_succeeds, NULL, PFX_STR "\x00\x00\x07\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x02\x00\x00", 0); diff --git a/test/core/bad_client/tests/simple_request.c b/test/core/bad_client/tests/simple_request.c index 3ae6eb3592d2fcb0e38b9862e15c9e69e3458f24..25bbe968e4a804930dd12344992fd2dd0b26a021 100644 --- a/test/core/bad_client/tests/simple_request.c +++ b/test/core/bad_client/tests/simple_request.c @@ -139,42 +139,42 @@ int main(int argc, char **argv) { grpc_test_init(argc, argv); /* basic request: check that things are working */ - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR, 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR_UNUSUAL, 0); - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR_UNUSUAL2, 0); + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR, 0); + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR_UNUSUAL, 0); + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR_UNUSUAL2, 0); /* push an illegal data frame */ - GRPC_RUN_BAD_CLIENT_TEST(verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x05\x00\x00\x00\x00\x00\x01" "\x34\x00\x00\x00\x00", 0); /* push a data frame with bad flags */ - GRPC_RUN_BAD_CLIENT_TEST(verifier, + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x00\x00\x02\x00\x00\x00\x01", 0); /* push a window update with a bad length */ - GRPC_RUN_BAD_CLIENT_TEST(failure_verifier, + GRPC_RUN_BAD_CLIENT_TEST(failure_verifier, NULL, PFX_STR "\x00\x00\x01\x08\x00\x00\x00\x00\x01", 0); /* push a window update with bad flags */ - GRPC_RUN_BAD_CLIENT_TEST(failure_verifier, + GRPC_RUN_BAD_CLIENT_TEST(failure_verifier, NULL, PFX_STR "\x00\x00\x00\x08\x10\x00\x00\x00\x01", 0); /* push a window update with bad data */ - GRPC_RUN_BAD_CLIENT_TEST(failure_verifier, PFX_STR + GRPC_RUN_BAD_CLIENT_TEST(failure_verifier, NULL, PFX_STR "\x00\x00\x04\x08\x00\x00\x00\x00\x01" "\xff\xff\xff\xff", 0); /* push a short goaway */ - GRPC_RUN_BAD_CLIENT_TEST(failure_verifier, + GRPC_RUN_BAD_CLIENT_TEST(failure_verifier, NULL, PFX_STR "\x00\x00\x04\x07\x00\x00\x00\x00\x00", 0); /* disconnect before sending goaway */ - GRPC_RUN_BAD_CLIENT_TEST(failure_verifier, + GRPC_RUN_BAD_CLIENT_TEST(failure_verifier, NULL, PFX_STR "\x00\x01\x12\x07\x00\x00\x00\x00\x00", GRPC_BAD_CLIENT_DISCONNECT); /* push a rst_stream with a bad length */ - GRPC_RUN_BAD_CLIENT_TEST(failure_verifier, + GRPC_RUN_BAD_CLIENT_TEST(failure_verifier, NULL, PFX_STR "\x00\x00\x01\x03\x00\x00\x00\x00\x01", 0); /* push a rst_stream with bad flags */ - GRPC_RUN_BAD_CLIENT_TEST(failure_verifier, + GRPC_RUN_BAD_CLIENT_TEST(failure_verifier, NULL, PFX_STR "\x00\x00\x00\x03\x10\x00\x00\x00\x01", 0); return 0; diff --git a/test/core/bad_client/tests/unknown_frame.c b/test/core/bad_client/tests/unknown_frame.c index f3870a181385fabf98ab2d8df452b97428ed7095..4f483d21f2ef267969d8853e331d54cd73c0fa37 100644 --- a/test/core/bad_client/tests/unknown_frame.c +++ b/test/core/bad_client/tests/unknown_frame.c @@ -51,7 +51,7 @@ int main(int argc, char **argv) { grpc_test_init(argc, argv); /* test adding prioritization data */ - GRPC_RUN_BAD_CLIENT_TEST(verifier, + GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR "\x00\x00\x00\x88\x00\x00\x00\x00\x01", GRPC_BAD_CLIENT_DISCONNECT); diff --git a/test/core/bad_client/tests/window_overflow.c b/test/core/bad_client/tests/window_overflow.c index 16f11e7dd0ab0e91ce75090b27f9b496e92461ca..0d17dbe448e1a878f5c1c93085fa2801040adfd5 100644 --- a/test/core/bad_client/tests/window_overflow.c +++ b/test/core/bad_client/tests/window_overflow.c @@ -105,7 +105,7 @@ int main(int argc, char **argv) { addbuf(message, sizeof(message)); } } - grpc_run_bad_client_test(verifier, g_buffer, g_count, 0); + grpc_run_bad_client_test(verifier, NULL, g_buffer, g_count, 0); gpr_free(g_buffer); return 0; diff --git a/test/core/channel/channel_args_test.c b/test/core/channel/channel_args_test.c index c7fc25960c095e14514cabf6fc7ee79722b102e7..c2fc05095aaafac5e50b17f3376da77efb9037be 100644 --- a/test/core/channel/channel_args_test.c +++ b/test/core/channel/channel_args_test.c @@ -77,7 +77,8 @@ static void test_set_compression_algorithm(void) { ch_args = grpc_channel_args_set_compression_algorithm(NULL, GRPC_COMPRESS_GZIP); GPR_ASSERT(ch_args->num_args == 1); - GPR_ASSERT(strcmp(ch_args->args[0].key, GRPC_COMPRESSION_ALGORITHM_ARG) == 0); + GPR_ASSERT(strcmp(ch_args->args[0].key, + GRPC_COMPRESSION_CHANNEL_DEFAULT_ALGORITHM) == 0); GPR_ASSERT(ch_args->args[0].type == GRPC_ARG_INTEGER); grpc_channel_args_destroy(ch_args); diff --git a/test/core/client_config/lb_policies_test.c b/test/core/client_config/lb_policies_test.c index e766672cf5d110a45b7d98160a41eb2edba6aa9f..2ec46124a890f49f418934ba414707c95e988138 100644 --- a/test/core/client_config/lb_policies_test.c +++ b/test/core/client_config/lb_policies_test.c @@ -438,9 +438,9 @@ static grpc_call **perform_multirequest(servers_fixture *f, return calls; } -static void assert_channel_connectivity( - grpc_channel *ch, size_t num_accepted_conn_states, - grpc_connectivity_state accepted_conn_state, ...) { +static void assert_channel_connectivity(grpc_channel *ch, + size_t num_accepted_conn_states, + int accepted_conn_state, ...) { size_t i; grpc_channel_stack *client_stack; grpc_channel_element *client_channel_filter; @@ -456,7 +456,7 @@ static void assert_channel_connectivity( grpc_exec_ctx_finish(&exec_ctx); va_start(ap, accepted_conn_state); for (i = 0; i < num_accepted_conn_states; i++) { - if (actual_conn_state == accepted_conn_state) { + if ((int)actual_conn_state == accepted_conn_state) { break; } accepted_conn_state = va_arg(ap, grpc_connectivity_state); diff --git a/test/core/client_config/set_initial_connect_string_test.c b/test/core/client_config/set_initial_connect_string_test.c index 83058d9b2c33d31845bc4d974657934f0c088568..c1b84528663a40a381064fbdad7f58fc361fade1 100644 --- a/test/core/client_config/set_initial_connect_string_test.c +++ b/test/core/client_config/set_initial_connect_string_test.c @@ -37,6 +37,7 @@ #include <grpc/support/host_port.h> #include <grpc/support/log.h> #include <grpc/support/slice.h> +#include <grpc/support/thd.h> #include "src/core/ext/client_config/initial_connect_string.h" #include "src/core/lib/iomgr/sockaddr.h" @@ -56,7 +57,7 @@ struct rpc_state { gpr_slice_buffer incoming_buffer; gpr_slice_buffer temp_incoming_buffer; grpc_endpoint *tcp; - int done; + gpr_atm done_atm; }; static const char *magic_connect_string = "magic initial string"; @@ -69,7 +70,7 @@ static void handle_read(grpc_exec_ctx *exec_ctx, void *arg, bool success) { gpr_slice_buffer_move_into(&state.temp_incoming_buffer, &state.incoming_buffer); if (state.incoming_buffer.length > strlen(magic_connect_string)) { - state.done = 1; + gpr_atm_rel_store(&state.done_atm, 1); grpc_endpoint_shutdown(exec_ctx, state.tcp); grpc_endpoint_destroy(exec_ctx, state.tcp); } else { @@ -116,7 +117,7 @@ static gpr_timespec n_sec_deadline(int seconds) { } static void start_rpc(int use_creds, int target_port) { - state.done = 0; + gpr_atm_rel_store(&state.done_atm, 0); state.cq = grpc_completion_queue_create(NULL); if (use_creds) { state.creds = grpc_fake_transport_security_credentials_create(); @@ -139,7 +140,7 @@ static void start_rpc(int use_creds, int target_port) { state.op.reserved = NULL; GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(state.call, &state.op, (size_t)(1), NULL, NULL)); - grpc_completion_queue_next(state.cq, n_sec_deadline(1), NULL); + grpc_completion_queue_next(state.cq, n_sec_deadline(5), NULL); } static void cleanup_rpc(void) { @@ -157,12 +158,29 @@ static void cleanup_rpc(void) { gpr_free(state.target); } -static void poll_server_until_read_done(test_tcp_server *server) { - gpr_timespec deadline = n_sec_deadline(5); - while (state.done == 0 && +typedef struct { + test_tcp_server *server; + gpr_event *signal_when_done; +} poll_args; + +static void actually_poll_server(void *arg) { + poll_args *pa = arg; + gpr_timespec deadline = n_sec_deadline(10); + while (gpr_atm_acq_load(&state.done_atm) == 0 && gpr_time_cmp(gpr_now(GPR_CLOCK_REALTIME), deadline) < 0) { - test_tcp_server_poll(server, 1); + test_tcp_server_poll(pa->server, 1); } + gpr_event_set(pa->signal_when_done, (void *)1); + gpr_free(pa); +} + +static void poll_server_until_read_done(test_tcp_server *server, + gpr_event *signal_when_done) { + gpr_thd_id id; + poll_args *pa = gpr_malloc(sizeof(*pa)); + pa->server = server; + pa->signal_when_done = signal_when_done; + gpr_thd_new(&id, actually_poll_server, pa, NULL); } static void match_initial_magic_string(gpr_slice_buffer *buffer) { @@ -180,20 +198,26 @@ static void match_initial_magic_string(gpr_slice_buffer *buffer) { } static void test_initial_string(test_tcp_server *server, int secure) { + gpr_event ev; + gpr_event_init(&ev); grpc_test_set_initial_connect_string_function(set_magic_initial_string); + poll_server_until_read_done(server, &ev); start_rpc(secure, server_port); - poll_server_until_read_done(server); + gpr_event_wait(&ev, gpr_inf_future(GPR_CLOCK_REALTIME)); match_initial_magic_string(&state.incoming_buffer); cleanup_rpc(); } static void test_initial_string_with_redirect(test_tcp_server *server, int secure) { + gpr_event ev; + gpr_event_init(&ev); int another_port = grpc_pick_unused_port_or_die(); grpc_test_set_initial_connect_string_function( reset_addr_and_set_magic_string); + poll_server_until_read_done(server, &ev); start_rpc(secure, another_port); - poll_server_until_read_done(server); + gpr_event_wait(&ev, gpr_inf_future(GPR_CLOCK_REALTIME)); match_initial_magic_string(&state.incoming_buffer); cleanup_rpc(); } diff --git a/test/core/end2end/dualstack_socket_test.c b/test/core/end2end/dualstack_socket_test.c index 81f76ea79c20886c9f8b1609ef2b6a574ee6eb3d..202fb3b6a86457ca5167776e92f9e0a1f6926e23 100644 --- a/test/core/end2end/dualstack_socket_test.c +++ b/test/core/end2end/dualstack_socket_test.c @@ -88,9 +88,11 @@ void test_connect(const char *server_host, const char *client_host, int port, int was_cancelled = 2; grpc_call_details call_details; char *peer; + int picked_port = 0; if (port == 0) { port = grpc_pick_unused_port_or_die(); + picked_port = 1; } gpr_join_host_port(&server_hostport, server_host, port); @@ -263,6 +265,9 @@ void test_connect(const char *server_host, const char *client_host, int port, grpc_call_details_destroy(&call_details); gpr_free(details); + if (picked_port) { + grpc_recycle_unused_port(port); + } } int external_dns_works(const char *host) { diff --git a/test/core/end2end/fixtures/h2_census.c b/test/core/end2end/fixtures/h2_census.c index ff2f028f096a0ea6c51177be0716075c9824b211..e46b39e476fc573870d3feb8287722401eeaf9c3 100644 --- a/test/core/end2end/fixtures/h2_census.c +++ b/test/core/end2end/fixtures/h2_census.c @@ -111,7 +111,7 @@ void chttp2_tear_down_fullstack(grpc_end2end_test_fixture *f) { /* All test configurations */ static grpc_end2end_test_config configs[] = { - {"chttp2/fullstack", FEATURE_MASK_SUPPORTS_DELAYED_CONNECTION, + {"chttp2/fullstack+census", FEATURE_MASK_SUPPORTS_DELAYED_CONNECTION, chttp2_create_fixture_fullstack, chttp2_init_client_fullstack, chttp2_init_server_fullstack, chttp2_tear_down_fullstack}, }; diff --git a/test/core/end2end/fixtures/h2_proxy.c b/test/core/end2end/fixtures/h2_proxy.c index 863673a4e0120ca931e7fdfcaed0c7ff446cfdf7..8c50eeb5d5bc27b2c90ce3dde7f4f0cd734d092a 100644 --- a/test/core/end2end/fixtures/h2_proxy.c +++ b/test/core/end2end/fixtures/h2_proxy.c @@ -55,14 +55,16 @@ typedef struct fullstack_fixture_data { grpc_end2end_proxy *proxy; } fullstack_fixture_data; -static grpc_server *create_proxy_server(const char *port) { - grpc_server *s = grpc_server_create(NULL, NULL); +static grpc_server *create_proxy_server(const char *port, + grpc_channel_args *server_args) { + grpc_server *s = grpc_server_create(server_args, NULL); GPR_ASSERT(grpc_server_add_insecure_http2_port(s, port)); return s; } -static grpc_channel *create_proxy_client(const char *target) { - return grpc_insecure_channel_create(target, NULL, NULL); +static grpc_channel *create_proxy_client(const char *target, + grpc_channel_args *client_args) { + return grpc_insecure_channel_create(target, client_args, NULL); } static const grpc_end2end_proxy_def proxy_def = {create_proxy_server, @@ -74,7 +76,7 @@ static grpc_end2end_test_fixture chttp2_create_fixture_fullstack( fullstack_fixture_data *ffd = gpr_malloc(sizeof(fullstack_fixture_data)); memset(&f, 0, sizeof(f)); - ffd->proxy = grpc_end2end_proxy_create(&proxy_def); + ffd->proxy = grpc_end2end_proxy_create(&proxy_def, client_args, server_args); f.fixture_data = ffd; f.cq = grpc_completion_queue_create(NULL); diff --git a/test/core/end2end/fixtures/h2_ssl_cert.c b/test/core/end2end/fixtures/h2_ssl_cert.c index cd031ca4826993ffe4f0fa8b27beef7440e0bfd3..f4dea2cc01a7b002c04f6f22c83b488949bee690 100644 --- a/test/core/end2end/fixtures/h2_ssl_cert.c +++ b/test/core/end2end/fixtures/h2_ssl_cert.c @@ -143,11 +143,11 @@ static int fail_server_auth_check(grpc_channel_args *server_args) { chttp2_init_server_secure_fullstack(f, server_args, ssl_creds); \ } -SERVER_INIT(GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE); -SERVER_INIT(GRPC_SSL_REQUEST_CLIENT_CERTIFICATE_BUT_DONT_VERIFY); -SERVER_INIT(GRPC_SSL_REQUEST_CLIENT_CERTIFICATE_AND_VERIFY); -SERVER_INIT(GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_BUT_DONT_VERIFY); -SERVER_INIT(GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY); +SERVER_INIT(GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE) +SERVER_INIT(GRPC_SSL_REQUEST_CLIENT_CERTIFICATE_BUT_DONT_VERIFY) +SERVER_INIT(GRPC_SSL_REQUEST_CLIENT_CERTIFICATE_AND_VERIFY) +SERVER_INIT(GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_BUT_DONT_VERIFY) +SERVER_INIT(GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY) #define CLIENT_INIT_NAME(cert_type) \ chttp2_init_client_simple_ssl_secure_fullstack_##cert_type @@ -189,10 +189,10 @@ typedef enum { NONE, SELF_SIGNED, SIGNED, BAD_CERT_PAIR } certtype; grpc_channel_args_destroy(new_client_args); \ } -CLIENT_INIT(NONE); -CLIENT_INIT(SELF_SIGNED); -CLIENT_INIT(SIGNED); -CLIENT_INIT(BAD_CERT_PAIR); +CLIENT_INIT(NONE) +CLIENT_INIT(SELF_SIGNED) +CLIENT_INIT(SIGNED) +CLIENT_INIT(BAD_CERT_PAIR) #define TEST_NAME(enum_name, cert_type, result) \ "chttp2/ssl_" #enum_name "_" #cert_type "_" #result "_" diff --git a/test/core/end2end/fixtures/h2_ssl_proxy.c b/test/core/end2end/fixtures/h2_ssl_proxy.c index 1403b760f5056251a0386fe06ddded3887ce4f77..151a86cb8f5aee04783754d0fb28b0e6f0c3eedc 100644 --- a/test/core/end2end/fixtures/h2_ssl_proxy.c +++ b/test/core/end2end/fixtures/h2_ssl_proxy.c @@ -54,8 +54,9 @@ typedef struct fullstack_secure_fixture_data { grpc_end2end_proxy *proxy; } fullstack_secure_fixture_data; -static grpc_server *create_proxy_server(const char *port) { - grpc_server *s = grpc_server_create(NULL, NULL); +static grpc_server *create_proxy_server(const char *port, + grpc_channel_args *server_args) { + grpc_server *s = grpc_server_create(server_args, NULL); grpc_ssl_pem_key_cert_pair pem_cert_key_pair = {test_server1_key, test_server1_cert}; grpc_server_credentials *ssl_creds = @@ -65,18 +66,20 @@ static grpc_server *create_proxy_server(const char *port) { return s; } -static grpc_channel *create_proxy_client(const char *target) { +static grpc_channel *create_proxy_client(const char *target, + grpc_channel_args *client_args) { grpc_channel *channel; grpc_channel_credentials *ssl_creds = grpc_ssl_credentials_create(NULL, NULL, NULL); grpc_arg ssl_name_override = {GRPC_ARG_STRING, GRPC_SSL_TARGET_NAME_OVERRIDE_ARG, {"foo.test.google.fr"}}; - grpc_channel_args client_args; - client_args.num_args = 1; - client_args.args = &ssl_name_override; - channel = grpc_secure_channel_create(ssl_creds, target, &client_args, NULL); + grpc_channel_args *new_client_args = + grpc_channel_args_copy_and_add(client_args, &ssl_name_override, 1); + channel = + grpc_secure_channel_create(ssl_creds, target, new_client_args, NULL); grpc_channel_credentials_release(ssl_creds); + grpc_channel_args_destroy(new_client_args); return channel; } @@ -90,7 +93,7 @@ static grpc_end2end_test_fixture chttp2_create_fixture_secure_fullstack( gpr_malloc(sizeof(fullstack_secure_fixture_data)); memset(&f, 0, sizeof(f)); - ffd->proxy = grpc_end2end_proxy_create(&proxy_def); + ffd->proxy = grpc_end2end_proxy_create(&proxy_def, client_args, server_args); f.fixture_data = ffd; f.cq = grpc_completion_queue_create(NULL); diff --git a/test/core/end2end/fixtures/proxy.c b/test/core/end2end/fixtures/proxy.c index a6487a17ac29df4c81100ae5e5e104189ce8bf92..f6e01ec41c5a5a236434072694bd9f1aeac5a81a 100644 --- a/test/core/end2end/fixtures/proxy.c +++ b/test/core/end2end/fixtures/proxy.c @@ -89,8 +89,9 @@ typedef struct { static void thread_main(void *arg); static void request_call(grpc_end2end_proxy *proxy); -grpc_end2end_proxy *grpc_end2end_proxy_create( - const grpc_end2end_proxy_def *def) { +grpc_end2end_proxy *grpc_end2end_proxy_create(const grpc_end2end_proxy_def *def, + grpc_channel_args *client_args, + grpc_channel_args *server_args) { gpr_thd_options opt = gpr_thd_options_default(); int proxy_port = grpc_pick_unused_port_or_die(); int server_port = grpc_pick_unused_port_or_die(); @@ -105,8 +106,8 @@ grpc_end2end_proxy *grpc_end2end_proxy_create( proxy->server_port); proxy->cq = grpc_completion_queue_create(NULL); - proxy->server = def->create_server(proxy->proxy_port); - proxy->client = def->create_client(proxy->server_port); + proxy->server = def->create_server(proxy->proxy_port, server_args); + proxy->client = def->create_client(proxy->server_port, client_args); grpc_server_register_completion_queue(proxy->server, proxy->cq, NULL); grpc_server_start(proxy->server); diff --git a/test/core/end2end/fixtures/proxy.h b/test/core/end2end/fixtures/proxy.h index c1cf01d39a47710ead334197a05ec3944cd7e67d..75b75d1331967151e204765ec20a7205ce5d6d14 100644 --- a/test/core/end2end/fixtures/proxy.h +++ b/test/core/end2end/fixtures/proxy.h @@ -41,12 +41,15 @@ typedef struct grpc_end2end_proxy grpc_end2end_proxy; typedef struct grpc_end2end_proxy_def { - grpc_server *(*create_server)(const char *port); - grpc_channel *(*create_client)(const char *target); + grpc_server *(*create_server)(const char *port, + grpc_channel_args *server_args); + grpc_channel *(*create_client)(const char *target, + grpc_channel_args *client_args); } grpc_end2end_proxy_def; -grpc_end2end_proxy *grpc_end2end_proxy_create( - const grpc_end2end_proxy_def *def); +grpc_end2end_proxy *grpc_end2end_proxy_create(const grpc_end2end_proxy_def *def, + grpc_channel_args *client_args, + grpc_channel_args *server_args); void grpc_end2end_proxy_destroy(grpc_end2end_proxy *proxy); const char *grpc_end2end_proxy_get_client_target(grpc_end2end_proxy *proxy); diff --git a/test/core/end2end/fuzzers/api_fuzzer.c b/test/core/end2end/fuzzers/api_fuzzer.c index b133a948ee0a048c2936eccdad2ec2c686c65bb7..cdfa9606236ee58b75f1813edba78a7762076d8a 100644 --- a/test/core/end2end/fuzzers/api_fuzzer.c +++ b/test/core/end2end/fuzzers/api_fuzzer.c @@ -340,6 +340,8 @@ static void free_non_null(void *p) { typedef enum { ROOT, CLIENT, SERVER, PENDING_SERVER } call_state_type; +#define DONE_FLAG_CALL_CLOSED ((uint64_t)(1 << 0)) + typedef struct call_state { call_state_type type; grpc_call *call; @@ -352,6 +354,10 @@ typedef struct call_state { int cancelled; int pending_ops; grpc_call_details call_details; + grpc_byte_buffer *send_message; + // starts at 0, individual flags from DONE_FLAG_xxx are set + // as different operations are completed + uint64_t done_flags; // array of pointers to free later size_t num_to_free; @@ -449,10 +455,41 @@ static void finished_request_call(void *csp, bool success) { } } -static void finished_batch(void *csp, bool success) { - call_state *cs = csp; - --cs->pending_ops; - maybe_delete_call_state(cs); +typedef struct { + call_state *cs; + uint8_t has_ops; +} batch_info; + +static void finished_batch(void *p, bool success) { + batch_info *bi = p; + --bi->cs->pending_ops; + if ((bi->has_ops & (1u << GRPC_OP_RECV_MESSAGE)) && + (bi->cs->done_flags & DONE_FLAG_CALL_CLOSED)) { + GPR_ASSERT(bi->cs->recv_message == NULL); + } + if ((bi->has_ops & (1u << GRPC_OP_RECV_MESSAGE) && + bi->cs->recv_message != NULL)) { + grpc_byte_buffer_destroy(bi->cs->recv_message); + bi->cs->recv_message = NULL; + } + if ((bi->has_ops & (1u << GRPC_OP_SEND_MESSAGE))) { + grpc_byte_buffer_destroy(bi->cs->send_message); + bi->cs->send_message = NULL; + } + if ((bi->has_ops & (1u << GRPC_OP_RECV_STATUS_ON_CLIENT)) || + (bi->has_ops & (1u << GRPC_OP_RECV_CLOSE_ON_SERVER))) { + bi->cs->done_flags |= DONE_FLAG_CALL_CLOSED; + } + maybe_delete_call_state(bi->cs); + gpr_free(bi); +} + +static validator *make_finished_batch_validator(call_state *cs, + uint8_t has_ops) { + batch_info *bi = gpr_malloc(sizeof(*bi)); + bi->cs = cs; + bi->has_ops = has_ops; + return create_validator(finished_batch, bi); } int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { @@ -579,6 +616,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { } else { end(&inp); } + break; } // begin server shutdown case 5: { @@ -700,6 +738,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { bool ok = true; size_t i; grpc_op *op; + uint8_t has_ops = 0; for (i = 0; i < num_ops; i++) { op = &ops[i]; switch (next_byte(&inp)) { @@ -710,19 +749,28 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { break; case GRPC_OP_SEND_INITIAL_METADATA: op->op = GRPC_OP_SEND_INITIAL_METADATA; + has_ops |= 1 << GRPC_OP_SEND_INITIAL_METADATA; read_metadata(&inp, &op->data.send_initial_metadata.count, &op->data.send_initial_metadata.metadata, g_active_call); break; case GRPC_OP_SEND_MESSAGE: op->op = GRPC_OP_SEND_MESSAGE; - op->data.send_message = read_message(&inp); + if (g_active_call->send_message != NULL) { + ok = false; + } else { + has_ops |= 1 << GRPC_OP_SEND_MESSAGE; + g_active_call->send_message = op->data.send_message = + read_message(&inp); + } break; case GRPC_OP_SEND_CLOSE_FROM_CLIENT: op->op = GRPC_OP_SEND_CLOSE_FROM_CLIENT; + has_ops |= 1 << GRPC_OP_SEND_CLOSE_FROM_CLIENT; break; case GRPC_OP_SEND_STATUS_FROM_SERVER: op->op = GRPC_OP_SEND_STATUS_FROM_SERVER; + has_ops |= 1 << GRPC_OP_SEND_STATUS_FROM_SERVER; read_metadata( &inp, &op->data.send_status_from_server.trailing_metadata_count, @@ -734,11 +782,13 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { break; case GRPC_OP_RECV_INITIAL_METADATA: op->op = GRPC_OP_RECV_INITIAL_METADATA; + has_ops |= 1 << GRPC_OP_RECV_INITIAL_METADATA; op->data.recv_initial_metadata = &g_active_call->recv_initial_metadata; break; case GRPC_OP_RECV_MESSAGE: op->op = GRPC_OP_RECV_MESSAGE; + has_ops |= 1 << GRPC_OP_RECV_MESSAGE; op->data.recv_message = &g_active_call->recv_message; break; case GRPC_OP_RECV_STATUS_ON_CLIENT: @@ -753,6 +803,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { break; case GRPC_OP_RECV_CLOSE_ON_SERVER: op->op = GRPC_OP_RECV_CLOSE_ON_SERVER; + has_ops |= 1 << GRPC_OP_RECV_CLOSE_ON_SERVER; op->data.recv_close_on_server.cancelled = &g_active_call->cancelled; break; @@ -761,7 +812,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { op->flags = read_uint32(&inp); } if (ok) { - validator *v = create_validator(finished_batch, g_active_call); + validator *v = make_finished_batch_validator(g_active_call, has_ops); g_active_call->pending_ops++; grpc_call_error error = grpc_call_start_batch(g_active_call->call, ops, num_ops, v, NULL); @@ -772,17 +823,18 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { } else { end(&inp); } + if (!ok && (has_ops & (1 << GRPC_OP_SEND_MESSAGE))) { + grpc_byte_buffer_destroy(g_active_call->send_message); + g_active_call->send_message = NULL; + } for (i = 0; i < num_ops; i++) { op = &ops[i]; switch (op->op) { - case GRPC_OP_SEND_INITIAL_METADATA: - break; - case GRPC_OP_SEND_MESSAGE: - grpc_byte_buffer_destroy(op->data.send_message); - break; case GRPC_OP_SEND_STATUS_FROM_SERVER: gpr_free((void *)op->data.send_status_from_server.status_details); break; + case GRPC_OP_SEND_MESSAGE: + case GRPC_OP_SEND_INITIAL_METADATA: case GRPC_OP_SEND_CLOSE_FROM_CLIENT: case GRPC_OP_RECV_INITIAL_METADATA: case GRPC_OP_RECV_MESSAGE: diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/001ea98069c10f808c281da9bbdd84cc05c3bad1 b/test/core/end2end/fuzzers/api_fuzzer_corpus/001ea98069c10f808c281da9bbdd84cc05c3bad1 new file mode 100644 index 0000000000000000000000000000000000000000..11d72eb9f38bb36e0cb26a161f9b47a169169d87 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/001ea98069c10f808c281da9bbdd84cc05c3bad1 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/01f52e31dfffdab89d83acd39925c3dd81baa76f b/test/core/end2end/fuzzers/api_fuzzer_corpus/01f52e31dfffdab89d83acd39925c3dd81baa76f new file mode 100644 index 0000000000000000000000000000000000000000..1d2f30d2e905d3be606ea4cd2b385b0c0353ce3f Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/01f52e31dfffdab89d83acd39925c3dd81baa76f differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/02c3cf8d52fbc43f89b5f516a17cea23b68fc8d5 b/test/core/end2end/fuzzers/api_fuzzer_corpus/02c3cf8d52fbc43f89b5f516a17cea23b68fc8d5 new file mode 100644 index 0000000000000000000000000000000000000000..3e1eee3511357d164341d4307278eed032302560 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/02c3cf8d52fbc43f89b5f516a17cea23b68fc8d5 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/032744b59cafd3320cc932ad39926a9bc92f589e b/test/core/end2end/fuzzers/api_fuzzer_corpus/032744b59cafd3320cc932ad39926a9bc92f589e new file mode 100644 index 0000000000000000000000000000000000000000..18bf82869631f2c0d529c8591cdfaa2f17da00d1 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/032744b59cafd3320cc932ad39926a9bc92f589e differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/0385c7b41263419e25a4342fbfc44fbd65eb2ed5 b/test/core/end2end/fuzzers/api_fuzzer_corpus/0385c7b41263419e25a4342fbfc44fbd65eb2ed5 new file mode 100644 index 0000000000000000000000000000000000000000..aac4f3c29664e54d4f8698479727a84acab4c898 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/0385c7b41263419e25a4342fbfc44fbd65eb2ed5 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/04d93c9df413717f71abd091592b5238afb799e8 b/test/core/end2end/fuzzers/api_fuzzer_corpus/04d93c9df413717f71abd091592b5238afb799e8 new file mode 100644 index 0000000000000000000000000000000000000000..10f3d31aeb49a3be885796616091fea009761d1e Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/04d93c9df413717f71abd091592b5238afb799e8 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/064d50aee4416ccf32f4e4fe7b770b7802265ffe b/test/core/end2end/fuzzers/api_fuzzer_corpus/064d50aee4416ccf32f4e4fe7b770b7802265ffe new file mode 100644 index 0000000000000000000000000000000000000000..ce911ad130d4431f3245ea03e825160ee096ed45 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/064d50aee4416ccf32f4e4fe7b770b7802265ffe differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/066e7fcb68e83b432c414f63f6de73e5f5099e49 b/test/core/end2end/fuzzers/api_fuzzer_corpus/066e7fcb68e83b432c414f63f6de73e5f5099e49 new file mode 100644 index 0000000000000000000000000000000000000000..1ea89115e4d58a344a35570f9089dba2833c67e3 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/066e7fcb68e83b432c414f63f6de73e5f5099e49 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/06c714e289673cf982ce2ac0670707a15f2ac5ea b/test/core/end2end/fuzzers/api_fuzzer_corpus/06c714e289673cf982ce2ac0670707a15f2ac5ea new file mode 100644 index 0000000000000000000000000000000000000000..f43c3fb015df606b3038023ff6de94cca04fdd9a Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/06c714e289673cf982ce2ac0670707a15f2ac5ea differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/071247b8fddda8aa520d9142c89039fbf8bf6cee b/test/core/end2end/fuzzers/api_fuzzer_corpus/071247b8fddda8aa520d9142c89039fbf8bf6cee new file mode 100644 index 0000000000000000000000000000000000000000..06505f52fc95a33ceec37f31d8fa43d0b618e7ec Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/071247b8fddda8aa520d9142c89039fbf8bf6cee differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/07cb3b9baca1bbcce2e199e551073ba2fdd4e05c b/test/core/end2end/fuzzers/api_fuzzer_corpus/07cb3b9baca1bbcce2e199e551073ba2fdd4e05c new file mode 100644 index 0000000000000000000000000000000000000000..f6320aaf1b7804626e48fc68379113e93a90e966 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/07cb3b9baca1bbcce2e199e551073ba2fdd4e05c differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/07fa2b6ed650d436f423adcccfcbe63ce6253de0 b/test/core/end2end/fuzzers/api_fuzzer_corpus/07fa2b6ed650d436f423adcccfcbe63ce6253de0 new file mode 100644 index 0000000000000000000000000000000000000000..a359ef35ff8b94c563b27750e1bfeef4071a5024 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/07fa2b6ed650d436f423adcccfcbe63ce6253de0 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/081e3248dfca2b32837c4738daee3a4698caaf15 b/test/core/end2end/fuzzers/api_fuzzer_corpus/081e3248dfca2b32837c4738daee3a4698caaf15 new file mode 100644 index 0000000000000000000000000000000000000000..e29f8846c3c8660eea12ea4c8ee38afaf6fef7d4 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/081e3248dfca2b32837c4738daee3a4698caaf15 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/088bf259e854abd9508d91b23983737f8e9e242c b/test/core/end2end/fuzzers/api_fuzzer_corpus/088bf259e854abd9508d91b23983737f8e9e242c new file mode 100644 index 0000000000000000000000000000000000000000..b60cdde80ff3bd2331a8b07421caf37f6f61a42d Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/088bf259e854abd9508d91b23983737f8e9e242c differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/0976de1461fb037c6987d77d088416440b524dde b/test/core/end2end/fuzzers/api_fuzzer_corpus/0976de1461fb037c6987d77d088416440b524dde new file mode 100644 index 0000000000000000000000000000000000000000..57b8f4c7daee15f9fd7a318454aab78ebc165059 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/0976de1461fb037c6987d77d088416440b524dde differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/0adaf5f559e1fb9cd8cd5b29911e13bca315c606 b/test/core/end2end/fuzzers/api_fuzzer_corpus/0adaf5f559e1fb9cd8cd5b29911e13bca315c606 new file mode 100644 index 0000000000000000000000000000000000000000..c6be6e0779d2a72dbffd0b7e277dec814d00c1ae Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/0adaf5f559e1fb9cd8cd5b29911e13bca315c606 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/0af5adf68560b3a7036ad23af62e4f9749eca690 b/test/core/end2end/fuzzers/api_fuzzer_corpus/0af5adf68560b3a7036ad23af62e4f9749eca690 new file mode 100644 index 0000000000000000000000000000000000000000..9acf28719e248de4bce65028743785013bd87af9 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/0af5adf68560b3a7036ad23af62e4f9749eca690 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/0becc6ede499ddc452fd4e6c3c0413a1107a8373 b/test/core/end2end/fuzzers/api_fuzzer_corpus/0becc6ede499ddc452fd4e6c3c0413a1107a8373 new file mode 100644 index 0000000000000000000000000000000000000000..a942070681a9542238294017716e4e5bcebd9852 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/0becc6ede499ddc452fd4e6c3c0413a1107a8373 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/0c531e03e56a5cf48bdd531a8c11a19e4a3b0aeb b/test/core/end2end/fuzzers/api_fuzzer_corpus/0c531e03e56a5cf48bdd531a8c11a19e4a3b0aeb new file mode 100644 index 0000000000000000000000000000000000000000..3dcd1e53232e92a815de66b214c99dda4ebe7066 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/0c531e03e56a5cf48bdd531a8c11a19e4a3b0aeb differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/0c65733bc09e8527347e20f5c876c5b64570d423 b/test/core/end2end/fuzzers/api_fuzzer_corpus/0c65733bc09e8527347e20f5c876c5b64570d423 new file mode 100644 index 0000000000000000000000000000000000000000..1170a8efdac5bda895b240ea24c8c14243a7179f Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/0c65733bc09e8527347e20f5c876c5b64570d423 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/0c7b763d22885462527123656fa17af7520fc55d b/test/core/end2end/fuzzers/api_fuzzer_corpus/0c7b763d22885462527123656fa17af7520fc55d new file mode 100644 index 0000000000000000000000000000000000000000..0f07f6b95e75244106c28491a99c93b74937faeb Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/0c7b763d22885462527123656fa17af7520fc55d differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/0d604693a9d3e76f54d28a26142abd729b0a9acd b/test/core/end2end/fuzzers/api_fuzzer_corpus/0d604693a9d3e76f54d28a26142abd729b0a9acd new file mode 100644 index 0000000000000000000000000000000000000000..d0d56daf49e01cd06797f575414a3c7b778e6136 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/0d604693a9d3e76f54d28a26142abd729b0a9acd differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/0d993b34021ec088f1aa3e5acdd98089b4104b07 b/test/core/end2end/fuzzers/api_fuzzer_corpus/0d993b34021ec088f1aa3e5acdd98089b4104b07 new file mode 100644 index 0000000000000000000000000000000000000000..ca3a14bc42e25318da5bfc181a8e388f54cd994d Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/0d993b34021ec088f1aa3e5acdd98089b4104b07 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/0def53b5575cc6ab2fbbd17e2bc6a24de9656f84 b/test/core/end2end/fuzzers/api_fuzzer_corpus/0def53b5575cc6ab2fbbd17e2bc6a24de9656f84 new file mode 100644 index 0000000000000000000000000000000000000000..30addfc11206482ae1b5ff9af6a1662a54ac91a5 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/0def53b5575cc6ab2fbbd17e2bc6a24de9656f84 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/0e2ddbe92c08eb9ad3cbee1d0db2264baaca12df b/test/core/end2end/fuzzers/api_fuzzer_corpus/0e2ddbe92c08eb9ad3cbee1d0db2264baaca12df new file mode 100644 index 0000000000000000000000000000000000000000..3fc360ddd8edc40915643d80afe3c25504e71c91 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/0e2ddbe92c08eb9ad3cbee1d0db2264baaca12df differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/0ea509d249ae28faba8980aacb972c7ea28d3fd5 b/test/core/end2end/fuzzers/api_fuzzer_corpus/0ea509d249ae28faba8980aacb972c7ea28d3fd5 new file mode 100644 index 0000000000000000000000000000000000000000..4c213b1fba6414481e9c5a23fb9a7c78e30de7e4 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/0ea509d249ae28faba8980aacb972c7ea28d3fd5 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/0f16eeeecdebcb59022bda5a0972d1b3429648fd b/test/core/end2end/fuzzers/api_fuzzer_corpus/0f16eeeecdebcb59022bda5a0972d1b3429648fd new file mode 100644 index 0000000000000000000000000000000000000000..0116d006ca08234099795c68dad1aad9cf81f526 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/0f16eeeecdebcb59022bda5a0972d1b3429648fd differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/0f81830560dbb9c6d3889b5d581b918c6cade65f b/test/core/end2end/fuzzers/api_fuzzer_corpus/0f81830560dbb9c6d3889b5d581b918c6cade65f new file mode 100644 index 0000000000000000000000000000000000000000..789a99463eb1edbaf7cb1e27948b59674d4f4d52 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/0f81830560dbb9c6d3889b5d581b918c6cade65f differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/105d9784648fe2d6c22fbefa69c9a26fff1c6481 b/test/core/end2end/fuzzers/api_fuzzer_corpus/105d9784648fe2d6c22fbefa69c9a26fff1c6481 new file mode 100644 index 0000000000000000000000000000000000000000..a6aa6cbed0c905cf8a7d507ff54eef3d0488de2b Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/105d9784648fe2d6c22fbefa69c9a26fff1c6481 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/11153bfeee3cdede86a52151dbb939c3ffee48ed b/test/core/end2end/fuzzers/api_fuzzer_corpus/11153bfeee3cdede86a52151dbb939c3ffee48ed new file mode 100644 index 0000000000000000000000000000000000000000..5885a28948616425b8f664e9ec7291243ddc5e6d Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/11153bfeee3cdede86a52151dbb939c3ffee48ed differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/113c1d1bac15d550124f1ffb9012c32755adf27f b/test/core/end2end/fuzzers/api_fuzzer_corpus/113c1d1bac15d550124f1ffb9012c32755adf27f new file mode 100644 index 0000000000000000000000000000000000000000..d7eba10ba7a73c2d5b42b7cc95fe0502b81c96e9 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/113c1d1bac15d550124f1ffb9012c32755adf27f differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/11759723c597e6806f8873e5062d31516cdb97ea b/test/core/end2end/fuzzers/api_fuzzer_corpus/11759723c597e6806f8873e5062d31516cdb97ea new file mode 100644 index 0000000000000000000000000000000000000000..34812d5b024e02e2a4eed2e5d75a61a6d61e6ea8 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/11759723c597e6806f8873e5062d31516cdb97ea differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/12abf5dcf2aba770f7b94ce5d96d7a8565a9aa19 b/test/core/end2end/fuzzers/api_fuzzer_corpus/12abf5dcf2aba770f7b94ce5d96d7a8565a9aa19 new file mode 100644 index 0000000000000000000000000000000000000000..494f031d55de42153a80dd54d6f040c9b44eabce Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/12abf5dcf2aba770f7b94ce5d96d7a8565a9aa19 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/12b904b97ed234fa45073b4e346ebe3211558528 b/test/core/end2end/fuzzers/api_fuzzer_corpus/12b904b97ed234fa45073b4e346ebe3211558528 new file mode 100644 index 0000000000000000000000000000000000000000..482fd747da81c72c03d75789d8a3f57d21652be6 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/12b904b97ed234fa45073b4e346ebe3211558528 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/12c00ed8945bdae03f03142cb964a47ea0c5786e b/test/core/end2end/fuzzers/api_fuzzer_corpus/12c00ed8945bdae03f03142cb964a47ea0c5786e new file mode 100644 index 0000000000000000000000000000000000000000..abc3d1348b67f1532ae4c138eb1b1e529ab8548f Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/12c00ed8945bdae03f03142cb964a47ea0c5786e differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/12f977ee18a7499d18a503a47e71b4f241052640 b/test/core/end2end/fuzzers/api_fuzzer_corpus/12f977ee18a7499d18a503a47e71b4f241052640 new file mode 100644 index 0000000000000000000000000000000000000000..ad424b846e4883a809e10671cd43161489ad35bc Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/12f977ee18a7499d18a503a47e71b4f241052640 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/145acf7c03a0bc6c4a40d710ba5813b9f28efe2a b/test/core/end2end/fuzzers/api_fuzzer_corpus/145acf7c03a0bc6c4a40d710ba5813b9f28efe2a new file mode 100644 index 0000000000000000000000000000000000000000..2e55e9f3acee9270c028e315693bca7f0ec77fc6 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/145acf7c03a0bc6c4a40d710ba5813b9f28efe2a differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/14ccbe1d9d7302d642e51ede3d4d846e85310fc2 b/test/core/end2end/fuzzers/api_fuzzer_corpus/14ccbe1d9d7302d642e51ede3d4d846e85310fc2 new file mode 100644 index 0000000000000000000000000000000000000000..4940dc4a7697321b015466dba843fa121882fc05 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/14ccbe1d9d7302d642e51ede3d4d846e85310fc2 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/1586adc8c21b5796ba52203379faeb5f251f5c1d b/test/core/end2end/fuzzers/api_fuzzer_corpus/1586adc8c21b5796ba52203379faeb5f251f5c1d new file mode 100644 index 0000000000000000000000000000000000000000..13577d48bceafa20022945cf668ef56d08c89a04 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/1586adc8c21b5796ba52203379faeb5f251f5c1d differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/1608a688768bdecdb205a455401ce5d9a1424a22 b/test/core/end2end/fuzzers/api_fuzzer_corpus/1608a688768bdecdb205a455401ce5d9a1424a22 new file mode 100644 index 0000000000000000000000000000000000000000..a7f9e4603996583b46d9a603d26cc7aaf72a232e Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/1608a688768bdecdb205a455401ce5d9a1424a22 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/162b4ec7cf39df091898e01057b2fa39605b34bb b/test/core/end2end/fuzzers/api_fuzzer_corpus/162b4ec7cf39df091898e01057b2fa39605b34bb new file mode 100644 index 0000000000000000000000000000000000000000..9eb2a6e422d061c98246af8b91be0854d9ad5808 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/162b4ec7cf39df091898e01057b2fa39605b34bb differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/16858f1f9db0e248a15ce09d9848612de1f4bba6 b/test/core/end2end/fuzzers/api_fuzzer_corpus/16858f1f9db0e248a15ce09d9848612de1f4bba6 new file mode 100644 index 0000000000000000000000000000000000000000..de7a5823b5437f14751ca6b4e648adedfb0a0057 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/16858f1f9db0e248a15ce09d9848612de1f4bba6 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/16e681f1867a1ac5612e1a88fddaed0bcb4521e7 b/test/core/end2end/fuzzers/api_fuzzer_corpus/16e681f1867a1ac5612e1a88fddaed0bcb4521e7 new file mode 100644 index 0000000000000000000000000000000000000000..ca737650d5dd96bd7676e89b2633366c8f893d25 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/16e681f1867a1ac5612e1a88fddaed0bcb4521e7 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/16ebac3f7cea2b46f660ec6a5ef3401c3e17a2e9 b/test/core/end2end/fuzzers/api_fuzzer_corpus/16ebac3f7cea2b46f660ec6a5ef3401c3e17a2e9 new file mode 100644 index 0000000000000000000000000000000000000000..417e588e644444e65d86bba0d3387d3b92e7f9fe Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/16ebac3f7cea2b46f660ec6a5ef3401c3e17a2e9 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/17ec0503991dc248d2b188edfa3d28573a1c2154 b/test/core/end2end/fuzzers/api_fuzzer_corpus/17ec0503991dc248d2b188edfa3d28573a1c2154 new file mode 100644 index 0000000000000000000000000000000000000000..6728e2ac4cfcb347bedae64eadf9ff779f33a78f Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/17ec0503991dc248d2b188edfa3d28573a1c2154 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/17fb35db0b73c331a66120dbc491300b2d1665e0 b/test/core/end2end/fuzzers/api_fuzzer_corpus/17fb35db0b73c331a66120dbc491300b2d1665e0 new file mode 100644 index 0000000000000000000000000000000000000000..af0fe1ddc9a112a4d4386c49daac0becad11fb89 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/17fb35db0b73c331a66120dbc491300b2d1665e0 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/190c4ca0cf29c99bc987d2792c7f62e1007c0245 b/test/core/end2end/fuzzers/api_fuzzer_corpus/190c4ca0cf29c99bc987d2792c7f62e1007c0245 new file mode 100644 index 0000000000000000000000000000000000000000..fbc532d25dc68fc6936ffcb072a3aa28107b14de Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/190c4ca0cf29c99bc987d2792c7f62e1007c0245 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/1949f4a75f7d501d5279a01f58a444640379bd78 b/test/core/end2end/fuzzers/api_fuzzer_corpus/1949f4a75f7d501d5279a01f58a444640379bd78 new file mode 100644 index 0000000000000000000000000000000000000000..8a39c9d8eefbbe77cc44b20b48990d10d7d26479 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/1949f4a75f7d501d5279a01f58a444640379bd78 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/1972f535ae202777efdd15a09138efc37e07ac01 b/test/core/end2end/fuzzers/api_fuzzer_corpus/1972f535ae202777efdd15a09138efc37e07ac01 new file mode 100644 index 0000000000000000000000000000000000000000..5c66b0ac5a1eb386357485772eadbad3faa83b51 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/1972f535ae202777efdd15a09138efc37e07ac01 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/198e691a9dabd23ed5c156f3a6e2c06a4379c15b b/test/core/end2end/fuzzers/api_fuzzer_corpus/198e691a9dabd23ed5c156f3a6e2c06a4379c15b new file mode 100644 index 0000000000000000000000000000000000000000..29be724e323f097a9f01f557a57c4b9253892a5a Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/198e691a9dabd23ed5c156f3a6e2c06a4379c15b differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/1a16a4b32cb0cb3a759ec20edf332cdfc5d1717e b/test/core/end2end/fuzzers/api_fuzzer_corpus/1a16a4b32cb0cb3a759ec20edf332cdfc5d1717e new file mode 100644 index 0000000000000000000000000000000000000000..ec2f8fec5e3b5c96a9ab7b46d556b69030a11d1a Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/1a16a4b32cb0cb3a759ec20edf332cdfc5d1717e differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/1af0744fe0ccad11d6df023803ab699e1464c8da b/test/core/end2end/fuzzers/api_fuzzer_corpus/1af0744fe0ccad11d6df023803ab699e1464c8da new file mode 100644 index 0000000000000000000000000000000000000000..b84ca7113851359d83e9749ea0467fe6bc74e6e0 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/1af0744fe0ccad11d6df023803ab699e1464c8da differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/1b6d8326532cea974655dc86657d8e3b9ba021de b/test/core/end2end/fuzzers/api_fuzzer_corpus/1b6d8326532cea974655dc86657d8e3b9ba021de new file mode 100644 index 0000000000000000000000000000000000000000..461677d9d23b344c6506464e57e2a16253217ce2 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/1b6d8326532cea974655dc86657d8e3b9ba021de differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/1b78d906803b539ea9f135e41b58257365948855 b/test/core/end2end/fuzzers/api_fuzzer_corpus/1b78d906803b539ea9f135e41b58257365948855 new file mode 100644 index 0000000000000000000000000000000000000000..ac120a85a685b16ba3a271fd078548a55ed4ccdc Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/1b78d906803b539ea9f135e41b58257365948855 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/1ba0190ef2cde93332f850753a05b89ae5f39f1f b/test/core/end2end/fuzzers/api_fuzzer_corpus/1ba0190ef2cde93332f850753a05b89ae5f39f1f new file mode 100644 index 0000000000000000000000000000000000000000..373e44f6cd511a8999cee6f9f8b499c64948c091 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/1ba0190ef2cde93332f850753a05b89ae5f39f1f differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/1c24396c21f2c6aa2ad9b9a14877b7edf0ce61d2 b/test/core/end2end/fuzzers/api_fuzzer_corpus/1c24396c21f2c6aa2ad9b9a14877b7edf0ce61d2 new file mode 100644 index 0000000000000000000000000000000000000000..1610b54300b6048a9e8b35f2849baeedd270974f Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/1c24396c21f2c6aa2ad9b9a14877b7edf0ce61d2 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/1c86c4f2d173059e5cfe67b446fdfa285743f61f b/test/core/end2end/fuzzers/api_fuzzer_corpus/1c86c4f2d173059e5cfe67b446fdfa285743f61f new file mode 100644 index 0000000000000000000000000000000000000000..3fc1394f1d3db14bada264f1e27f5ad79d09ff13 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/1c86c4f2d173059e5cfe67b446fdfa285743f61f differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/1cbbae18babaa20229b42b4633ef812bd3b40ad4 b/test/core/end2end/fuzzers/api_fuzzer_corpus/1cbbae18babaa20229b42b4633ef812bd3b40ad4 new file mode 100644 index 0000000000000000000000000000000000000000..21cc2e1a4304e63a43120262c665c2f5f22c6137 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/1cbbae18babaa20229b42b4633ef812bd3b40ad4 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/1d259d9c908db8a0a7012c054bfde7f86474dab7 b/test/core/end2end/fuzzers/api_fuzzer_corpus/1d259d9c908db8a0a7012c054bfde7f86474dab7 new file mode 100644 index 0000000000000000000000000000000000000000..35ee3b7240c396d37962ea42a98b3f542ba679a9 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/1d259d9c908db8a0a7012c054bfde7f86474dab7 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/1d55650c5bc30ea68168a9287820e25d2d53ab4c b/test/core/end2end/fuzzers/api_fuzzer_corpus/1d55650c5bc30ea68168a9287820e25d2d53ab4c new file mode 100644 index 0000000000000000000000000000000000000000..042200467ce4909bc748ed81589425e40d1b2699 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/1d55650c5bc30ea68168a9287820e25d2d53ab4c differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/1d795268725d3a08883b05b021a437654aaed908 b/test/core/end2end/fuzzers/api_fuzzer_corpus/1d795268725d3a08883b05b021a437654aaed908 new file mode 100644 index 0000000000000000000000000000000000000000..a852bac00f03d419b73e62ba635d29cdbc553559 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/1d795268725d3a08883b05b021a437654aaed908 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/1d7bd5961f6963c65054fb9a24d913601f37bf3d b/test/core/end2end/fuzzers/api_fuzzer_corpus/1d7bd5961f6963c65054fb9a24d913601f37bf3d new file mode 100644 index 0000000000000000000000000000000000000000..932ef7418a591c22fbdd39fbdb18dbdc5f347044 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/1d7bd5961f6963c65054fb9a24d913601f37bf3d differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/1eefda69c1787cc55a8bd43774ca13563e0972bc b/test/core/end2end/fuzzers/api_fuzzer_corpus/1eefda69c1787cc55a8bd43774ca13563e0972bc new file mode 100644 index 0000000000000000000000000000000000000000..92e91dc9312360322d0347b6b7b316a134f25cab Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/1eefda69c1787cc55a8bd43774ca13563e0972bc differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/1f4d0adab39a988792cca201626c28293e247226 b/test/core/end2end/fuzzers/api_fuzzer_corpus/1f4d0adab39a988792cca201626c28293e247226 new file mode 100644 index 0000000000000000000000000000000000000000..b50ddd0adf50f315c288a7ab1bcb8ec9c2b66b74 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/1f4d0adab39a988792cca201626c28293e247226 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/1f7847ed44c5acbc52c5d16b0222b44067076478 b/test/core/end2end/fuzzers/api_fuzzer_corpus/1f7847ed44c5acbc52c5d16b0222b44067076478 new file mode 100644 index 0000000000000000000000000000000000000000..c78706008d9df7bf2f31a36f6467554b004ee872 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/1f7847ed44c5acbc52c5d16b0222b44067076478 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/200521ca3891bfed841ca8c22691196a1a03ccd3 b/test/core/end2end/fuzzers/api_fuzzer_corpus/200521ca3891bfed841ca8c22691196a1a03ccd3 new file mode 100644 index 0000000000000000000000000000000000000000..cf69ac852f8a204d4b6f7d9196f2bc6bd9aae97a Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/200521ca3891bfed841ca8c22691196a1a03ccd3 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/205dd562c7202d4231b232a6804889e77eba5292 b/test/core/end2end/fuzzers/api_fuzzer_corpus/205dd562c7202d4231b232a6804889e77eba5292 new file mode 100644 index 0000000000000000000000000000000000000000..21b314de4d22b64b53e3d2ca1ae17311cc69846f Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/205dd562c7202d4231b232a6804889e77eba5292 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/2193a1e20caee37676d08c88154a462acf120fb0 b/test/core/end2end/fuzzers/api_fuzzer_corpus/2193a1e20caee37676d08c88154a462acf120fb0 new file mode 100644 index 0000000000000000000000000000000000000000..e3f46b434ce7a82653b410cb86d38154b8e8c9e1 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/2193a1e20caee37676d08c88154a462acf120fb0 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/21da45db854aeae9bef8576d6cb5859c0cf7a34c b/test/core/end2end/fuzzers/api_fuzzer_corpus/21da45db854aeae9bef8576d6cb5859c0cf7a34c new file mode 100644 index 0000000000000000000000000000000000000000..1c7966c21b1156b6b165a6fbd54a4b21ea5946c3 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/21da45db854aeae9bef8576d6cb5859c0cf7a34c differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/226b0315f87b08521c9a2d3e2b50c01ec421be14 b/test/core/end2end/fuzzers/api_fuzzer_corpus/226b0315f87b08521c9a2d3e2b50c01ec421be14 new file mode 100644 index 0000000000000000000000000000000000000000..14b54da6948877baf556f010f0cde795d2d91380 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/226b0315f87b08521c9a2d3e2b50c01ec421be14 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/22c9ed2979d9963bce6500997f1e0433988e7e37 b/test/core/end2end/fuzzers/api_fuzzer_corpus/22c9ed2979d9963bce6500997f1e0433988e7e37 new file mode 100644 index 0000000000000000000000000000000000000000..76f10b71dbb1e48a4e6d7a9a3637c0224ca25765 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/22c9ed2979d9963bce6500997f1e0433988e7e37 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/247d0d09deeeb76422cd1d06305a63378a498656 b/test/core/end2end/fuzzers/api_fuzzer_corpus/247d0d09deeeb76422cd1d06305a63378a498656 new file mode 100644 index 0000000000000000000000000000000000000000..4dac3e9fc486c12cb6d98df63f301f243c333d43 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/247d0d09deeeb76422cd1d06305a63378a498656 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/24fbdfa73f26686633871ddad9698d7059db488f b/test/core/end2end/fuzzers/api_fuzzer_corpus/24fbdfa73f26686633871ddad9698d7059db488f new file mode 100644 index 0000000000000000000000000000000000000000..64182618e5c526e98135460741615920b418fb48 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/24fbdfa73f26686633871ddad9698d7059db488f differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/2535940afe69b3106b7696a486a2617d0d9a7150 b/test/core/end2end/fuzzers/api_fuzzer_corpus/2535940afe69b3106b7696a486a2617d0d9a7150 new file mode 100644 index 0000000000000000000000000000000000000000..59c07a03ff4b0a40f69ab2e1d92f90f25289a0b8 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/2535940afe69b3106b7696a486a2617d0d9a7150 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/25aa74daea95f9fc46a78239bd2e78ccf0fb3ffc b/test/core/end2end/fuzzers/api_fuzzer_corpus/25aa74daea95f9fc46a78239bd2e78ccf0fb3ffc new file mode 100644 index 0000000000000000000000000000000000000000..9f027183326bc9a0296232dde9ad1846541c59c6 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/25aa74daea95f9fc46a78239bd2e78ccf0fb3ffc differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/26930c35fbe83e4d165b8b7f218ac8ea231c87dd b/test/core/end2end/fuzzers/api_fuzzer_corpus/26930c35fbe83e4d165b8b7f218ac8ea231c87dd new file mode 100644 index 0000000000000000000000000000000000000000..074833e78526a068ae99dc6f6672e7f0195af9b2 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/26930c35fbe83e4d165b8b7f218ac8ea231c87dd differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/26dfa46c2bb2e6af6f52bac6f03a9e4406c6e700 b/test/core/end2end/fuzzers/api_fuzzer_corpus/26dfa46c2bb2e6af6f52bac6f03a9e4406c6e700 new file mode 100644 index 0000000000000000000000000000000000000000..39212d96c60d4b6c4eb729c868019082a380237c Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/26dfa46c2bb2e6af6f52bac6f03a9e4406c6e700 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/27a8643ba6047e12de1b2a4f7d0994a2c095a6d5 b/test/core/end2end/fuzzers/api_fuzzer_corpus/27a8643ba6047e12de1b2a4f7d0994a2c095a6d5 new file mode 100644 index 0000000000000000000000000000000000000000..2c3a0b74d9c077b3ffad2203d0784e7e40732b0e Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/27a8643ba6047e12de1b2a4f7d0994a2c095a6d5 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/27f5e317e8a3a1098e786b96175c15d0855c4855 b/test/core/end2end/fuzzers/api_fuzzer_corpus/27f5e317e8a3a1098e786b96175c15d0855c4855 new file mode 100644 index 0000000000000000000000000000000000000000..736534e7ac5b09abccaaeb5d8594a263b85636af Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/27f5e317e8a3a1098e786b96175c15d0855c4855 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/285b0b9b11fe506527c880d3a866ba94f8038cdf b/test/core/end2end/fuzzers/api_fuzzer_corpus/285b0b9b11fe506527c880d3a866ba94f8038cdf new file mode 100644 index 0000000000000000000000000000000000000000..9f3f0a85dedbc95359e4596d083e1bea515e923a Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/285b0b9b11fe506527c880d3a866ba94f8038cdf differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/28851da472cd09123465241e0d59697f563f53a8 b/test/core/end2end/fuzzers/api_fuzzer_corpus/28851da472cd09123465241e0d59697f563f53a8 new file mode 100644 index 0000000000000000000000000000000000000000..8a42c044d4173b551cd77d80ca02fb50dd89f4f0 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/28851da472cd09123465241e0d59697f563f53a8 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/28c56acb0f9b47ead49f34c0d92a661fa04952c2 b/test/core/end2end/fuzzers/api_fuzzer_corpus/28c56acb0f9b47ead49f34c0d92a661fa04952c2 new file mode 100644 index 0000000000000000000000000000000000000000..fa5c7468e5126a95fe57f577f56c4e3672c5ec95 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/28c56acb0f9b47ead49f34c0d92a661fa04952c2 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/2923d9c864597016358f37ce4014c61648b7290a b/test/core/end2end/fuzzers/api_fuzzer_corpus/2923d9c864597016358f37ce4014c61648b7290a new file mode 100644 index 0000000000000000000000000000000000000000..0476a9337a6c21fd978bb8518a85b53688c61d00 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/2923d9c864597016358f37ce4014c61648b7290a differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/29a6d7ab3e7ea8d331358df45e5b0926e768e227 b/test/core/end2end/fuzzers/api_fuzzer_corpus/29a6d7ab3e7ea8d331358df45e5b0926e768e227 new file mode 100644 index 0000000000000000000000000000000000000000..8792e3bffd56c38b69222d2f3744a0899b769265 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/29a6d7ab3e7ea8d331358df45e5b0926e768e227 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/2a410e3d783bc93e63206e28f92b6a40e1db09cf b/test/core/end2end/fuzzers/api_fuzzer_corpus/2a410e3d783bc93e63206e28f92b6a40e1db09cf new file mode 100644 index 0000000000000000000000000000000000000000..803b4bf5634014326c786055f6a661bd59a86895 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/2a410e3d783bc93e63206e28f92b6a40e1db09cf differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/2b80854b52267dd70b622670e401280387f15dd2 b/test/core/end2end/fuzzers/api_fuzzer_corpus/2b80854b52267dd70b622670e401280387f15dd2 new file mode 100644 index 0000000000000000000000000000000000000000..1a8b38bb8c88016e20b29421b3dd2ca3caefd7f0 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/2b80854b52267dd70b622670e401280387f15dd2 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/2d5613b7bc0f5060eb1fa0449face6a9c503b589 b/test/core/end2end/fuzzers/api_fuzzer_corpus/2d5613b7bc0f5060eb1fa0449face6a9c503b589 new file mode 100644 index 0000000000000000000000000000000000000000..5659e0c0b06eb1e99971b636507729afc431c4f4 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/2d5613b7bc0f5060eb1fa0449face6a9c503b589 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/2d7f42d3df4a206d09a9fa3126333a61f5e678ec b/test/core/end2end/fuzzers/api_fuzzer_corpus/2d7f42d3df4a206d09a9fa3126333a61f5e678ec new file mode 100644 index 0000000000000000000000000000000000000000..7058beb84c0e35e9ea43a61f2b4f5d516f4f147c Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/2d7f42d3df4a206d09a9fa3126333a61f5e678ec differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/2d82b2376d689485814ade91df8f65ee08395a02 b/test/core/end2end/fuzzers/api_fuzzer_corpus/2d82b2376d689485814ade91df8f65ee08395a02 new file mode 100644 index 0000000000000000000000000000000000000000..f7ee1cd45b2dba557e1bcda4ed0d185abe54edf8 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/2d82b2376d689485814ade91df8f65ee08395a02 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/2df65610f1c24ad1cf9a5b22614434c96ffc12fb b/test/core/end2end/fuzzers/api_fuzzer_corpus/2df65610f1c24ad1cf9a5b22614434c96ffc12fb new file mode 100644 index 0000000000000000000000000000000000000000..31012976fab8b6b9e5be34c3faf6f33b3119cdc8 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/2df65610f1c24ad1cf9a5b22614434c96ffc12fb differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/2e48a9c8d204975060e81f37c7a46ab501750067 b/test/core/end2end/fuzzers/api_fuzzer_corpus/2e48a9c8d204975060e81f37c7a46ab501750067 new file mode 100644 index 0000000000000000000000000000000000000000..7fddf563c196ae04ff2018a578c3dd793fbe5ec3 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/2e48a9c8d204975060e81f37c7a46ab501750067 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/2e7441eacf8fcc7043f24b3beba4fcbe3c0c5ea0 b/test/core/end2end/fuzzers/api_fuzzer_corpus/2e7441eacf8fcc7043f24b3beba4fcbe3c0c5ea0 new file mode 100644 index 0000000000000000000000000000000000000000..c6a5e1dc5b2d356016f5e0a8c10d3d2816dbb4df Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/2e7441eacf8fcc7043f24b3beba4fcbe3c0c5ea0 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/2ef149e8fd68e06fcb7ba2fb43a17cc1dcfd989b b/test/core/end2end/fuzzers/api_fuzzer_corpus/2ef149e8fd68e06fcb7ba2fb43a17cc1dcfd989b new file mode 100644 index 0000000000000000000000000000000000000000..185c9c96985181ef9caabdbd4fbff3d901d2a9e3 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/2ef149e8fd68e06fcb7ba2fb43a17cc1dcfd989b differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/2f35914500b09477fe245bc130f86bbd15112ce7 b/test/core/end2end/fuzzers/api_fuzzer_corpus/2f35914500b09477fe245bc130f86bbd15112ce7 new file mode 100644 index 0000000000000000000000000000000000000000..d1d5abecd7d62c40c8043a399426a6c416f22835 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/2f35914500b09477fe245bc130f86bbd15112ce7 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/2fece42b158854855dd42eac3fc7b8f1eb61fb04 b/test/core/end2end/fuzzers/api_fuzzer_corpus/2fece42b158854855dd42eac3fc7b8f1eb61fb04 new file mode 100644 index 0000000000000000000000000000000000000000..d998323d93cc1afeb6959bf4c4dbcea163b23c43 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/2fece42b158854855dd42eac3fc7b8f1eb61fb04 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/3017e9f66dacf5a01f8c7d65b8a72d4f68aa6a28 b/test/core/end2end/fuzzers/api_fuzzer_corpus/3017e9f66dacf5a01f8c7d65b8a72d4f68aa6a28 new file mode 100644 index 0000000000000000000000000000000000000000..90a40e4756b61a05266300dd35daf95643b1c0f7 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/3017e9f66dacf5a01f8c7d65b8a72d4f68aa6a28 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/30948ba77c2e56903a9ad5190cc74e59d42f67fe b/test/core/end2end/fuzzers/api_fuzzer_corpus/30948ba77c2e56903a9ad5190cc74e59d42f67fe new file mode 100644 index 0000000000000000000000000000000000000000..eb9d316626482677ede9c191de6d40b622a0c021 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/30948ba77c2e56903a9ad5190cc74e59d42f67fe differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/30d6ca02d96fe1d1b91b7fa5180789a6cc9d0d45 b/test/core/end2end/fuzzers/api_fuzzer_corpus/30d6ca02d96fe1d1b91b7fa5180789a6cc9d0d45 new file mode 100644 index 0000000000000000000000000000000000000000..9a482a0d773a37f1f766e13a7062988d209e644e Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/30d6ca02d96fe1d1b91b7fa5180789a6cc9d0d45 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/30fc581d975cd8384b86be0ae59792a605ca68c6 b/test/core/end2end/fuzzers/api_fuzzer_corpus/30fc581d975cd8384b86be0ae59792a605ca68c6 new file mode 100644 index 0000000000000000000000000000000000000000..52d3fdb728c81267146d9f154bb41eb29010b162 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/30fc581d975cd8384b86be0ae59792a605ca68c6 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/3152365a4d8540623c9fb3a93712d096bf6b34e6 b/test/core/end2end/fuzzers/api_fuzzer_corpus/3152365a4d8540623c9fb3a93712d096bf6b34e6 new file mode 100644 index 0000000000000000000000000000000000000000..97cf797ca69c01a9180b4e3f7756c8722a61c21e Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/3152365a4d8540623c9fb3a93712d096bf6b34e6 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/324b9341bfc56b24a60f0687a52981fcdeaa8733 b/test/core/end2end/fuzzers/api_fuzzer_corpus/324b9341bfc56b24a60f0687a52981fcdeaa8733 new file mode 100644 index 0000000000000000000000000000000000000000..06be6c9fd0379234f8ca674c6a8a6c5255b55c70 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/324b9341bfc56b24a60f0687a52981fcdeaa8733 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/32a6ea045d1288418617e5e0c52ae02c1f6598aa b/test/core/end2end/fuzzers/api_fuzzer_corpus/32a6ea045d1288418617e5e0c52ae02c1f6598aa new file mode 100644 index 0000000000000000000000000000000000000000..1bcaa23bc3ab6ff3a455a343c9035fa4fa7b92c8 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/32a6ea045d1288418617e5e0c52ae02c1f6598aa differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/3356fa1721a0dec9fedacba8d86e6100a49d5316 b/test/core/end2end/fuzzers/api_fuzzer_corpus/3356fa1721a0dec9fedacba8d86e6100a49d5316 new file mode 100644 index 0000000000000000000000000000000000000000..f742dc0d03e1014f5b2d74487c73da97f76dd848 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/3356fa1721a0dec9fedacba8d86e6100a49d5316 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/33af00c8deb0f0fdfc113f21c3cb5769aa474587 b/test/core/end2end/fuzzers/api_fuzzer_corpus/33af00c8deb0f0fdfc113f21c3cb5769aa474587 new file mode 100644 index 0000000000000000000000000000000000000000..e7174156a52b9f280210861a960f44107c763669 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/33af00c8deb0f0fdfc113f21c3cb5769aa474587 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/33b7cb7d4dcd380b207f1137722fe394de2a0f8e b/test/core/end2end/fuzzers/api_fuzzer_corpus/33b7cb7d4dcd380b207f1137722fe394de2a0f8e new file mode 100644 index 0000000000000000000000000000000000000000..b2a16c7344ce80d0c6fc6e0e7bfef48c65becd40 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/33b7cb7d4dcd380b207f1137722fe394de2a0f8e differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/33ff864434b4f0c0e08c00ec2442cb521e9f79ed b/test/core/end2end/fuzzers/api_fuzzer_corpus/33ff864434b4f0c0e08c00ec2442cb521e9f79ed new file mode 100644 index 0000000000000000000000000000000000000000..c60986409d8b2e93e7c5b2de38a17c19e2f03650 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/33ff864434b4f0c0e08c00ec2442cb521e9f79ed differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/34aca5e37920615e8c141ed1fe4e419ae2e4df65 b/test/core/end2end/fuzzers/api_fuzzer_corpus/34aca5e37920615e8c141ed1fe4e419ae2e4df65 new file mode 100644 index 0000000000000000000000000000000000000000..e70d70e5a6ca81a1435a082891ff7d12df282451 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/34aca5e37920615e8c141ed1fe4e419ae2e4df65 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/35ba1a4df4d362ea98e9386269bfbb95c5ed4874 b/test/core/end2end/fuzzers/api_fuzzer_corpus/35ba1a4df4d362ea98e9386269bfbb95c5ed4874 new file mode 100644 index 0000000000000000000000000000000000000000..82db6b0f859ae341bb0b4f623709851ab24bf8be Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/35ba1a4df4d362ea98e9386269bfbb95c5ed4874 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/3662f5312562bbe4503018a820692962e7dd66c8 b/test/core/end2end/fuzzers/api_fuzzer_corpus/3662f5312562bbe4503018a820692962e7dd66c8 new file mode 100644 index 0000000000000000000000000000000000000000..81692d01e6c2ff165023f147778c60e37340dc0a Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/3662f5312562bbe4503018a820692962e7dd66c8 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/37309bbfb4f0d78e6138b13a4e5da5944c95b97d b/test/core/end2end/fuzzers/api_fuzzer_corpus/37309bbfb4f0d78e6138b13a4e5da5944c95b97d new file mode 100644 index 0000000000000000000000000000000000000000..18d50ccab5eb15a80a2045de2875f10cd910316d Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/37309bbfb4f0d78e6138b13a4e5da5944c95b97d differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/37bc0646132afe8c79cda5e76de150a473fc0680 b/test/core/end2end/fuzzers/api_fuzzer_corpus/37bc0646132afe8c79cda5e76de150a473fc0680 new file mode 100644 index 0000000000000000000000000000000000000000..d4a1f9539f16fa83760287e48f2599c1da33d78a Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/37bc0646132afe8c79cda5e76de150a473fc0680 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/385626d51cd29e1b32befeaecde5df7248270754 b/test/core/end2end/fuzzers/api_fuzzer_corpus/385626d51cd29e1b32befeaecde5df7248270754 new file mode 100644 index 0000000000000000000000000000000000000000..c300faecf57307ded2378fc892b56797e4414813 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/385626d51cd29e1b32befeaecde5df7248270754 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/39160bc99597105d50cf7a15698090399a2482ea b/test/core/end2end/fuzzers/api_fuzzer_corpus/39160bc99597105d50cf7a15698090399a2482ea new file mode 100644 index 0000000000000000000000000000000000000000..5c7ff7b283da0aad7701c49054d2c454cdc624b2 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/39160bc99597105d50cf7a15698090399a2482ea differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/391ef74273ae5e1cd8a2342c5370fde5df1a7140 b/test/core/end2end/fuzzers/api_fuzzer_corpus/391ef74273ae5e1cd8a2342c5370fde5df1a7140 new file mode 100644 index 0000000000000000000000000000000000000000..dbdef3f3cfd13848af0ace03717b7ae72d0d6144 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/391ef74273ae5e1cd8a2342c5370fde5df1a7140 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/39525bbff413519199d1cf2c564d62b9c3c7736e b/test/core/end2end/fuzzers/api_fuzzer_corpus/39525bbff413519199d1cf2c564d62b9c3c7736e new file mode 100644 index 0000000000000000000000000000000000000000..6e61ae8b08d0fd82a054bb07044fc6f2f33480a4 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/39525bbff413519199d1cf2c564d62b9c3c7736e differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/39b6daa9ae088667c5080709ca829cf51e66212d b/test/core/end2end/fuzzers/api_fuzzer_corpus/39b6daa9ae088667c5080709ca829cf51e66212d new file mode 100644 index 0000000000000000000000000000000000000000..e72f3419ca4055189067fa0aae754dac47531541 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/39b6daa9ae088667c5080709ca829cf51e66212d differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/3a90fbc998ad7219e447db6155e6174e0117dd49 b/test/core/end2end/fuzzers/api_fuzzer_corpus/3a90fbc998ad7219e447db6155e6174e0117dd49 new file mode 100644 index 0000000000000000000000000000000000000000..7c2bacc2409afcc772a7369da754f6bebaad2267 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/3a90fbc998ad7219e447db6155e6174e0117dd49 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/3af9522626ddfeb1ef461e3ba0f397ea4b2d99fb b/test/core/end2end/fuzzers/api_fuzzer_corpus/3af9522626ddfeb1ef461e3ba0f397ea4b2d99fb new file mode 100644 index 0000000000000000000000000000000000000000..bbbacc88ca9d16b88abd018c187a719ce7c013f1 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/3af9522626ddfeb1ef461e3ba0f397ea4b2d99fb differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/3b60e6663ac7ceaa40f91d3a68fcb9c35e3e99b8 b/test/core/end2end/fuzzers/api_fuzzer_corpus/3b60e6663ac7ceaa40f91d3a68fcb9c35e3e99b8 new file mode 100644 index 0000000000000000000000000000000000000000..99a6322e75717761b6ec0ee8adb38fe9140a7cf2 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/3b60e6663ac7ceaa40f91d3a68fcb9c35e3e99b8 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/3bdfaad171c20468a866329355621cd579eff21c b/test/core/end2end/fuzzers/api_fuzzer_corpus/3bdfaad171c20468a866329355621cd579eff21c new file mode 100644 index 0000000000000000000000000000000000000000..a48c03445c930fba97c44608f54ab26e3b16f730 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/3bdfaad171c20468a866329355621cd579eff21c differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/3c18f7c2d8fef6f119fe5bdbb5d191a92c627cb3 b/test/core/end2end/fuzzers/api_fuzzer_corpus/3c18f7c2d8fef6f119fe5bdbb5d191a92c627cb3 new file mode 100644 index 0000000000000000000000000000000000000000..d9450a95c61c1259bca5f69eb04802929e684726 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/3c18f7c2d8fef6f119fe5bdbb5d191a92c627cb3 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/3c933aea09501c81d7e065c671cdc3bd55f8caf9 b/test/core/end2end/fuzzers/api_fuzzer_corpus/3c933aea09501c81d7e065c671cdc3bd55f8caf9 new file mode 100644 index 0000000000000000000000000000000000000000..d09a0cbca3d4af7654201809dcf229d6b0724dee Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/3c933aea09501c81d7e065c671cdc3bd55f8caf9 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/3cac139b58decec7c0d1f1318e8f1f28f9650c19 b/test/core/end2end/fuzzers/api_fuzzer_corpus/3cac139b58decec7c0d1f1318e8f1f28f9650c19 new file mode 100644 index 0000000000000000000000000000000000000000..60b2a10c4b4b997b2e7e3c744efcdae6da97d463 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/3cac139b58decec7c0d1f1318e8f1f28f9650c19 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/3cd19f8138a81f242cb92212df2b4812cde8385a b/test/core/end2end/fuzzers/api_fuzzer_corpus/3cd19f8138a81f242cb92212df2b4812cde8385a new file mode 100644 index 0000000000000000000000000000000000000000..f9395ccf93b608df7f5b3fb0a5cb5f17590f6120 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/3cd19f8138a81f242cb92212df2b4812cde8385a differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/3d7d13b272c46ccceca36729e9893e5142961fd3 b/test/core/end2end/fuzzers/api_fuzzer_corpus/3d7d13b272c46ccceca36729e9893e5142961fd3 new file mode 100644 index 0000000000000000000000000000000000000000..a46741ee5093997c22667b23c7421f9e71e6cfda Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/3d7d13b272c46ccceca36729e9893e5142961fd3 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/3d9534f373e79edd704cc9529600efd62451fb78 b/test/core/end2end/fuzzers/api_fuzzer_corpus/3d9534f373e79edd704cc9529600efd62451fb78 new file mode 100644 index 0000000000000000000000000000000000000000..7ce51c1d4adec4a66371e31d33a8752b350b734c Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/3d9534f373e79edd704cc9529600efd62451fb78 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/3e4c1755d1ad78103f10c2af7c7d2f86326f02f6 b/test/core/end2end/fuzzers/api_fuzzer_corpus/3e4c1755d1ad78103f10c2af7c7d2f86326f02f6 new file mode 100644 index 0000000000000000000000000000000000000000..ba043af2794fbbcbb5f33566549665275233ec6b Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/3e4c1755d1ad78103f10c2af7c7d2f86326f02f6 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/3e8bef87bb89525914b5e7964969a66eabc78eee b/test/core/end2end/fuzzers/api_fuzzer_corpus/3e8bef87bb89525914b5e7964969a66eabc78eee new file mode 100644 index 0000000000000000000000000000000000000000..673ce21225492f6ef9c152868f39c66b19d878b8 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/3e8bef87bb89525914b5e7964969a66eabc78eee differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/3fada97db682f675597cb58c5d43a72e283ab960 b/test/core/end2end/fuzzers/api_fuzzer_corpus/3fada97db682f675597cb58c5d43a72e283ab960 new file mode 100644 index 0000000000000000000000000000000000000000..2acdaaa9125ffff0757353b37ee475e5c24b6f2e Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/3fada97db682f675597cb58c5d43a72e283ab960 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/40fb9f1d9086ace2de0ad59648d196ba0705ae00 b/test/core/end2end/fuzzers/api_fuzzer_corpus/40fb9f1d9086ace2de0ad59648d196ba0705ae00 new file mode 100644 index 0000000000000000000000000000000000000000..935f92be43157e9a142d83fb6c93c85ab18b7c32 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/40fb9f1d9086ace2de0ad59648d196ba0705ae00 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/41921ba00dfc038778074b1af81104555ca74927 b/test/core/end2end/fuzzers/api_fuzzer_corpus/41921ba00dfc038778074b1af81104555ca74927 new file mode 100644 index 0000000000000000000000000000000000000000..c1ec996a9a98915d85a75452b8d7adf9d422822c Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/41921ba00dfc038778074b1af81104555ca74927 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/41de80653b78b98f5caa7f6d00a96d72bc245068 b/test/core/end2end/fuzzers/api_fuzzer_corpus/41de80653b78b98f5caa7f6d00a96d72bc245068 new file mode 100644 index 0000000000000000000000000000000000000000..101bb724586da3d1d8a01b1aa67b8c9fdc156372 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/41de80653b78b98f5caa7f6d00a96d72bc245068 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/4212d95c0bfdf34b9c7fbd05bc732fa1bbb226ce b/test/core/end2end/fuzzers/api_fuzzer_corpus/4212d95c0bfdf34b9c7fbd05bc732fa1bbb226ce new file mode 100644 index 0000000000000000000000000000000000000000..7f9038760ca717dd4549601f054840cbd7526cad Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/4212d95c0bfdf34b9c7fbd05bc732fa1bbb226ce differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/4236180c7d6f2edba5355b79bbe1a5c16266dd95 b/test/core/end2end/fuzzers/api_fuzzer_corpus/4236180c7d6f2edba5355b79bbe1a5c16266dd95 new file mode 100644 index 0000000000000000000000000000000000000000..9bd671dee9d2ae7c68224fcedfaa227f5921e447 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/4236180c7d6f2edba5355b79bbe1a5c16266dd95 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/428b5b04a92ad6c28fc38451236c85338b9f8ce0 b/test/core/end2end/fuzzers/api_fuzzer_corpus/428b5b04a92ad6c28fc38451236c85338b9f8ce0 new file mode 100644 index 0000000000000000000000000000000000000000..9da7676d41f5893e1f3638259a7e978402757c9f Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/428b5b04a92ad6c28fc38451236c85338b9f8ce0 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/42a92ac224829067ee7dbadafb777bd38f076c6f b/test/core/end2end/fuzzers/api_fuzzer_corpus/42a92ac224829067ee7dbadafb777bd38f076c6f new file mode 100644 index 0000000000000000000000000000000000000000..8b800cacc9b9be08e172f0a63576c2bc7564c61f Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/42a92ac224829067ee7dbadafb777bd38f076c6f differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/42c2e90f2e228d6bec0d81e55f08647a2d651bbe b/test/core/end2end/fuzzers/api_fuzzer_corpus/42c2e90f2e228d6bec0d81e55f08647a2d651bbe new file mode 100644 index 0000000000000000000000000000000000000000..6ea6ab3759df3c9ba916f0e3361b17028171279a Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/42c2e90f2e228d6bec0d81e55f08647a2d651bbe differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/42c50f9543819ff7f440a7ac660cea374355c455 b/test/core/end2end/fuzzers/api_fuzzer_corpus/42c50f9543819ff7f440a7ac660cea374355c455 new file mode 100644 index 0000000000000000000000000000000000000000..9e377e755d181201b910564c836178a3084c4291 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/42c50f9543819ff7f440a7ac660cea374355c455 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/42c5f1965243b4bdf0212123d3430010bdacefaa b/test/core/end2end/fuzzers/api_fuzzer_corpus/42c5f1965243b4bdf0212123d3430010bdacefaa new file mode 100644 index 0000000000000000000000000000000000000000..93385ceece9a73c1bf0f00c319fc11e2f1cb37f8 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/42c5f1965243b4bdf0212123d3430010bdacefaa differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/4305b19e8a214d2cf47436d964d52d10e430575f b/test/core/end2end/fuzzers/api_fuzzer_corpus/4305b19e8a214d2cf47436d964d52d10e430575f new file mode 100644 index 0000000000000000000000000000000000000000..33f855c4adc0e75fb92ffa1317c9b74305a3e1ae Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/4305b19e8a214d2cf47436d964d52d10e430575f differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/43646936116c18140ff0f01306d16280943eedac b/test/core/end2end/fuzzers/api_fuzzer_corpus/43646936116c18140ff0f01306d16280943eedac new file mode 100644 index 0000000000000000000000000000000000000000..43d84183ee4849f202fb2c03ccefbd8da65de1d1 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/43646936116c18140ff0f01306d16280943eedac differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/43874e2bb721b485a93d80b7f1c3e3630f746b02 b/test/core/end2end/fuzzers/api_fuzzer_corpus/43874e2bb721b485a93d80b7f1c3e3630f746b02 new file mode 100644 index 0000000000000000000000000000000000000000..272ee2cc0192b3d42a877fced18a4383177099c2 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/43874e2bb721b485a93d80b7f1c3e3630f746b02 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/43ed8f46ad700ddd4c2a7a15f0cd209954f0a774 b/test/core/end2end/fuzzers/api_fuzzer_corpus/43ed8f46ad700ddd4c2a7a15f0cd209954f0a774 new file mode 100644 index 0000000000000000000000000000000000000000..722278a9fa2b0f0f94d87dfd6483472820e29ea8 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/43ed8f46ad700ddd4c2a7a15f0cd209954f0a774 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/43f79e748c5da73a13555b00cf5050af68f07829 b/test/core/end2end/fuzzers/api_fuzzer_corpus/43f79e748c5da73a13555b00cf5050af68f07829 new file mode 100644 index 0000000000000000000000000000000000000000..e5389150cbd5cff158155734767a9df4d5143b37 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/43f79e748c5da73a13555b00cf5050af68f07829 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/43ff758aba2eca1e355f0062ca8fa2dcc8edc69c b/test/core/end2end/fuzzers/api_fuzzer_corpus/43ff758aba2eca1e355f0062ca8fa2dcc8edc69c new file mode 100644 index 0000000000000000000000000000000000000000..6a84f69fd1b0c97de8711f182012dede5e647521 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/43ff758aba2eca1e355f0062ca8fa2dcc8edc69c differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/4427b547b6693c39f08ba67c5d2ad012d5088f83 b/test/core/end2end/fuzzers/api_fuzzer_corpus/4427b547b6693c39f08ba67c5d2ad012d5088f83 new file mode 100644 index 0000000000000000000000000000000000000000..0be2c14af676c76b40221ee739eee191130e7cf8 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/4427b547b6693c39f08ba67c5d2ad012d5088f83 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/442bb0df4955b8dc95cc69af79a522a04c23dfe1 b/test/core/end2end/fuzzers/api_fuzzer_corpus/442bb0df4955b8dc95cc69af79a522a04c23dfe1 new file mode 100644 index 0000000000000000000000000000000000000000..1564b00429cde51fe004dc9222de033b82d6327e Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/442bb0df4955b8dc95cc69af79a522a04c23dfe1 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/44378830a865936e205bb757a69bdf8d788bf26e b/test/core/end2end/fuzzers/api_fuzzer_corpus/44378830a865936e205bb757a69bdf8d788bf26e new file mode 100644 index 0000000000000000000000000000000000000000..c320596f3cf2946c3e6f47f1a8cfdfd87d454a2b Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/44378830a865936e205bb757a69bdf8d788bf26e differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/4471ee009359844e7600175546a3b36a21329666 b/test/core/end2end/fuzzers/api_fuzzer_corpus/4471ee009359844e7600175546a3b36a21329666 new file mode 100644 index 0000000000000000000000000000000000000000..b41b650c78f5d366a00d51eb9311b6019598becb Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/4471ee009359844e7600175546a3b36a21329666 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/454fb5eab23aacdba559ed9a9a36941732eb3276 b/test/core/end2end/fuzzers/api_fuzzer_corpus/454fb5eab23aacdba559ed9a9a36941732eb3276 new file mode 100644 index 0000000000000000000000000000000000000000..55ab577147abb64de948a047240fdb8941cc82aa Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/454fb5eab23aacdba559ed9a9a36941732eb3276 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/461949a48f4f2234cce6bfc1476bc9fd96552c0e b/test/core/end2end/fuzzers/api_fuzzer_corpus/461949a48f4f2234cce6bfc1476bc9fd96552c0e new file mode 100644 index 0000000000000000000000000000000000000000..9ec340d8634387665316e36ebbf261ce71cab8ba Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/461949a48f4f2234cce6bfc1476bc9fd96552c0e differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/462ae7e1d7eb4a4d8b4d5daaa1422b7cf835e127 b/test/core/end2end/fuzzers/api_fuzzer_corpus/462ae7e1d7eb4a4d8b4d5daaa1422b7cf835e127 new file mode 100644 index 0000000000000000000000000000000000000000..66adcdf83f0ea5e2b560d6c919afffb82795b410 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/462ae7e1d7eb4a4d8b4d5daaa1422b7cf835e127 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/46325fcd7a3a718f2188f49e28ad9d0c9dcd06a9 b/test/core/end2end/fuzzers/api_fuzzer_corpus/46325fcd7a3a718f2188f49e28ad9d0c9dcd06a9 new file mode 100644 index 0000000000000000000000000000000000000000..99748fb1af3b98fe9fcdbbd3414840dd0dd3ec49 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/46325fcd7a3a718f2188f49e28ad9d0c9dcd06a9 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/4667156173c437c62fdea99a199f3aed0b504fe0 b/test/core/end2end/fuzzers/api_fuzzer_corpus/4667156173c437c62fdea99a199f3aed0b504fe0 new file mode 100644 index 0000000000000000000000000000000000000000..1b98c74204e6efc8ae8194f88e5836fc765a657b Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/4667156173c437c62fdea99a199f3aed0b504fe0 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/46f88af92fbd99c386bd24d8a045a9a9c2469d53 b/test/core/end2end/fuzzers/api_fuzzer_corpus/46f88af92fbd99c386bd24d8a045a9a9c2469d53 new file mode 100644 index 0000000000000000000000000000000000000000..6e6744a38fbf7da15bb7fe963c1d799ac8cd63ba Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/46f88af92fbd99c386bd24d8a045a9a9c2469d53 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/4799a2aacdba08bd3e418c5659060829a997d715 b/test/core/end2end/fuzzers/api_fuzzer_corpus/4799a2aacdba08bd3e418c5659060829a997d715 new file mode 100644 index 0000000000000000000000000000000000000000..e4d5db3bd79348884b2601a3c12f965cc974075a Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/4799a2aacdba08bd3e418c5659060829a997d715 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/47f2ead1b9cd99a8603dc5fd583afe3d4287deab b/test/core/end2end/fuzzers/api_fuzzer_corpus/47f2ead1b9cd99a8603dc5fd583afe3d4287deab new file mode 100644 index 0000000000000000000000000000000000000000..f4d2647ee7910d7c32ea8d8175677cb85b938e7e Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/47f2ead1b9cd99a8603dc5fd583afe3d4287deab differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/485410954a625f5749bce6ae923a620371542ed8 b/test/core/end2end/fuzzers/api_fuzzer_corpus/485410954a625f5749bce6ae923a620371542ed8 new file mode 100644 index 0000000000000000000000000000000000000000..376c38eb8e1a68789c511fb3903f3f8a0a66e9f4 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/485410954a625f5749bce6ae923a620371542ed8 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/48f56289592da153b3c50bcc26ad6d4d3a7e443b b/test/core/end2end/fuzzers/api_fuzzer_corpus/48f56289592da153b3c50bcc26ad6d4d3a7e443b new file mode 100644 index 0000000000000000000000000000000000000000..b31f82db7803bbfd996cbf7c9a6086b199af4c27 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/48f56289592da153b3c50bcc26ad6d4d3a7e443b differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/49d816ae44b329820f47979c5790eebc8eadafd7 b/test/core/end2end/fuzzers/api_fuzzer_corpus/49d816ae44b329820f47979c5790eebc8eadafd7 new file mode 100644 index 0000000000000000000000000000000000000000..d75351ca0102bee539d2e90ecb4d75af3c7667dd Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/49d816ae44b329820f47979c5790eebc8eadafd7 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/4a2ee017facf4df1929e7db4b34b12018b64461c b/test/core/end2end/fuzzers/api_fuzzer_corpus/4a2ee017facf4df1929e7db4b34b12018b64461c new file mode 100644 index 0000000000000000000000000000000000000000..7a7c0e5270211da4fca1b894dc7cafd478dd82c3 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/4a2ee017facf4df1929e7db4b34b12018b64461c differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/4a6c8938a8a30567a481599eddfc137fa5454b21 b/test/core/end2end/fuzzers/api_fuzzer_corpus/4a6c8938a8a30567a481599eddfc137fa5454b21 new file mode 100644 index 0000000000000000000000000000000000000000..ac5edb5ae091a6785b061dce4766333195809ae8 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/4a6c8938a8a30567a481599eddfc137fa5454b21 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/4a97016bb83b0db1c51fbb4d4f9c909dd85bdb41 b/test/core/end2end/fuzzers/api_fuzzer_corpus/4a97016bb83b0db1c51fbb4d4f9c909dd85bdb41 new file mode 100644 index 0000000000000000000000000000000000000000..a3cea9c48156a97b814472f06af512590b83237a Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/4a97016bb83b0db1c51fbb4d4f9c909dd85bdb41 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/4b011706723e645407b871241c2c11004103d628 b/test/core/end2end/fuzzers/api_fuzzer_corpus/4b011706723e645407b871241c2c11004103d628 new file mode 100644 index 0000000000000000000000000000000000000000..9d30e8feb10f7ecf811e2cf1eee614d316dc9ecf Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/4b011706723e645407b871241c2c11004103d628 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/4bedfc6d01a2d6bc0911d48123d6b8b30a46732e b/test/core/end2end/fuzzers/api_fuzzer_corpus/4bedfc6d01a2d6bc0911d48123d6b8b30a46732e new file mode 100644 index 0000000000000000000000000000000000000000..9e55ca62a7f1f94f3cdf64185d72d773b031aba2 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/4bedfc6d01a2d6bc0911d48123d6b8b30a46732e differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/4c03f9d60bfc5a2ab41c1703672a339838890ef3 b/test/core/end2end/fuzzers/api_fuzzer_corpus/4c03f9d60bfc5a2ab41c1703672a339838890ef3 new file mode 100644 index 0000000000000000000000000000000000000000..2d42a416402f9a0c03d2165a904d145c9c2469dc Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/4c03f9d60bfc5a2ab41c1703672a339838890ef3 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/4c34bbb26218f40a8ea1bafc8c50cd814a781cd2 b/test/core/end2end/fuzzers/api_fuzzer_corpus/4c34bbb26218f40a8ea1bafc8c50cd814a781cd2 new file mode 100644 index 0000000000000000000000000000000000000000..f632c98cb5022776f9e6a2cced740aeeb1c94025 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/4c34bbb26218f40a8ea1bafc8c50cd814a781cd2 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/4c6258b5299bd03560e292fcf3008efc60bc6cd1 b/test/core/end2end/fuzzers/api_fuzzer_corpus/4c6258b5299bd03560e292fcf3008efc60bc6cd1 new file mode 100644 index 0000000000000000000000000000000000000000..e37ca84cc3af669460aa3bffd1c5b6deba627d56 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/4c6258b5299bd03560e292fcf3008efc60bc6cd1 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/4d7b5b98536de248387605efd813ba23b8b613dd b/test/core/end2end/fuzzers/api_fuzzer_corpus/4d7b5b98536de248387605efd813ba23b8b613dd new file mode 100644 index 0000000000000000000000000000000000000000..46684b950d9b6d4d962346621ae442b38a1be34d Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/4d7b5b98536de248387605efd813ba23b8b613dd differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/4d800cf62e39478c1bc1db8222a8d810fff6ad85 b/test/core/end2end/fuzzers/api_fuzzer_corpus/4d800cf62e39478c1bc1db8222a8d810fff6ad85 new file mode 100644 index 0000000000000000000000000000000000000000..b360407bcd10e2e61a383647ed71f31ef5daca56 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/4d800cf62e39478c1bc1db8222a8d810fff6ad85 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/4d81efc0d5945caada326e2f6e55167120f0d3ce b/test/core/end2end/fuzzers/api_fuzzer_corpus/4d81efc0d5945caada326e2f6e55167120f0d3ce new file mode 100644 index 0000000000000000000000000000000000000000..cb4341e695de740ad7735788c9bcc6510a0eb4dc Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/4d81efc0d5945caada326e2f6e55167120f0d3ce differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/4ea18756816848daf5e799ce1d75ecf52353eb08 b/test/core/end2end/fuzzers/api_fuzzer_corpus/4ea18756816848daf5e799ce1d75ecf52353eb08 new file mode 100644 index 0000000000000000000000000000000000000000..c1f4a81601f41fec17999b4ef5336e1f4385375e Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/4ea18756816848daf5e799ce1d75ecf52353eb08 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/4f320381bfd3927493db8037238bdce1766c68ee b/test/core/end2end/fuzzers/api_fuzzer_corpus/4f320381bfd3927493db8037238bdce1766c68ee new file mode 100644 index 0000000000000000000000000000000000000000..a1d23bf313a2072f6b9a690ed10aa7589b97d176 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/4f320381bfd3927493db8037238bdce1766c68ee differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/50a96367b6a52c58a36364f4b1ec0583c7f315a5 b/test/core/end2end/fuzzers/api_fuzzer_corpus/50a96367b6a52c58a36364f4b1ec0583c7f315a5 new file mode 100644 index 0000000000000000000000000000000000000000..92710c0d8a354e59d942b2057f125643835b0256 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/50a96367b6a52c58a36364f4b1ec0583c7f315a5 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/5151ad7147bbb75b1b377ce03f4ef5ef0f4f1c82 b/test/core/end2end/fuzzers/api_fuzzer_corpus/5151ad7147bbb75b1b377ce03f4ef5ef0f4f1c82 new file mode 100644 index 0000000000000000000000000000000000000000..4b6ca5d0856b66a833012958242d24ef5855e801 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/5151ad7147bbb75b1b377ce03f4ef5ef0f4f1c82 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/5220909c423d2b321e8459355c965fb330288565 b/test/core/end2end/fuzzers/api_fuzzer_corpus/5220909c423d2b321e8459355c965fb330288565 new file mode 100644 index 0000000000000000000000000000000000000000..50fdc9478cf49f420b880d2bb7aa06b5ecbf8dad Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/5220909c423d2b321e8459355c965fb330288565 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/52b5c86f262d46624b2211151a38cbd69c705734 b/test/core/end2end/fuzzers/api_fuzzer_corpus/52b5c86f262d46624b2211151a38cbd69c705734 new file mode 100644 index 0000000000000000000000000000000000000000..63a7c37601ca4de91de2032833cd22cb838cd8c2 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/52b5c86f262d46624b2211151a38cbd69c705734 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/5394ae134e9023432ac137789815e2b24d1bab3b b/test/core/end2end/fuzzers/api_fuzzer_corpus/5394ae134e9023432ac137789815e2b24d1bab3b new file mode 100644 index 0000000000000000000000000000000000000000..0ee6048c0cb2365d6b35afec72fc17c73ba4b223 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/5394ae134e9023432ac137789815e2b24d1bab3b differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/53e9f9a4b0347651b3833c3e153e743a1194e0fa b/test/core/end2end/fuzzers/api_fuzzer_corpus/53e9f9a4b0347651b3833c3e153e743a1194e0fa new file mode 100644 index 0000000000000000000000000000000000000000..a52d56a53396667d8fb7522ba30f4ee1266e33ea Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/53e9f9a4b0347651b3833c3e153e743a1194e0fa differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/543ea879faab347874ad5e297684a62a1555e1ab b/test/core/end2end/fuzzers/api_fuzzer_corpus/543ea879faab347874ad5e297684a62a1555e1ab new file mode 100644 index 0000000000000000000000000000000000000000..a457d0e8151e3dd1d1f31cbec5cdab4258f53606 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/543ea879faab347874ad5e297684a62a1555e1ab differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/548190b9eb539e0841bcdd6e2c095cbef6ebd119 b/test/core/end2end/fuzzers/api_fuzzer_corpus/548190b9eb539e0841bcdd6e2c095cbef6ebd119 new file mode 100644 index 0000000000000000000000000000000000000000..65c646769f78b367386c6cc83a8aeaf53e059c75 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/548190b9eb539e0841bcdd6e2c095cbef6ebd119 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/54d5ac6cc4bd944e60b7464e36c5d1b144c17da4 b/test/core/end2end/fuzzers/api_fuzzer_corpus/54d5ac6cc4bd944e60b7464e36c5d1b144c17da4 new file mode 100644 index 0000000000000000000000000000000000000000..aae4aef61ba4e6468b1a64be2836d63e169c5b3c Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/54d5ac6cc4bd944e60b7464e36c5d1b144c17da4 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/5515fa05b890973031b0e2cc8c2925f3974e2821 b/test/core/end2end/fuzzers/api_fuzzer_corpus/5515fa05b890973031b0e2cc8c2925f3974e2821 new file mode 100644 index 0000000000000000000000000000000000000000..53c4227e82ad9f7f05bddd0e906c21e5bdfd5564 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/5515fa05b890973031b0e2cc8c2925f3974e2821 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/560fe3fe0bb266ccb8c59ce19302bce23835097d b/test/core/end2end/fuzzers/api_fuzzer_corpus/560fe3fe0bb266ccb8c59ce19302bce23835097d new file mode 100644 index 0000000000000000000000000000000000000000..7959ac947f56289fc0698fb9c25b8036feadba0e Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/560fe3fe0bb266ccb8c59ce19302bce23835097d differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/56ac47e07bf3f42310773a4c66ee9d3afc27a8a3 b/test/core/end2end/fuzzers/api_fuzzer_corpus/56ac47e07bf3f42310773a4c66ee9d3afc27a8a3 new file mode 100644 index 0000000000000000000000000000000000000000..c362e6a26ac578219b65d72e35ee5ddaa4ed8d5c Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/56ac47e07bf3f42310773a4c66ee9d3afc27a8a3 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/570215c70de40add2ad62bed9ce47f8b6b231de6 b/test/core/end2end/fuzzers/api_fuzzer_corpus/570215c70de40add2ad62bed9ce47f8b6b231de6 new file mode 100644 index 0000000000000000000000000000000000000000..c08ff2b178283ec3b73ae22ccb997cbb864450f0 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/570215c70de40add2ad62bed9ce47f8b6b231de6 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/572ab3983e406a82325f02edfdd7981d040cfbdb b/test/core/end2end/fuzzers/api_fuzzer_corpus/572ab3983e406a82325f02edfdd7981d040cfbdb new file mode 100644 index 0000000000000000000000000000000000000000..54b4bee3b1fc101f11ef8ecda1e7795dfa3da67b Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/572ab3983e406a82325f02edfdd7981d040cfbdb differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/573665d817a96a324fb8ba40a06425f572327b78 b/test/core/end2end/fuzzers/api_fuzzer_corpus/573665d817a96a324fb8ba40a06425f572327b78 new file mode 100644 index 0000000000000000000000000000000000000000..0c3d4826491c796282c71102ef22efd8321d63ca Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/573665d817a96a324fb8ba40a06425f572327b78 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/57bc1a4501ceb31b4ead1c2428798be073eb9db3 b/test/core/end2end/fuzzers/api_fuzzer_corpus/57bc1a4501ceb31b4ead1c2428798be073eb9db3 new file mode 100644 index 0000000000000000000000000000000000000000..d9ef9bfffca6ce204dd1ef82d7f55ec5246b59c3 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/57bc1a4501ceb31b4ead1c2428798be073eb9db3 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/58c57e0ef4c2a630150f53ccdc2bfa798d5b9eae b/test/core/end2end/fuzzers/api_fuzzer_corpus/58c57e0ef4c2a630150f53ccdc2bfa798d5b9eae new file mode 100644 index 0000000000000000000000000000000000000000..440808721a59665c95c7ab960412eb0a81250307 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/58c57e0ef4c2a630150f53ccdc2bfa798d5b9eae differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/59de0a42d012ca3dd8b7fa2f1b1c6642cb86fad4 b/test/core/end2end/fuzzers/api_fuzzer_corpus/59de0a42d012ca3dd8b7fa2f1b1c6642cb86fad4 new file mode 100644 index 0000000000000000000000000000000000000000..854dd1d9243b800bbe5198f5479dd27d944f1ad9 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/59de0a42d012ca3dd8b7fa2f1b1c6642cb86fad4 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/5a1d370abacb9f46fa966c8e58992897606a7900 b/test/core/end2end/fuzzers/api_fuzzer_corpus/5a1d370abacb9f46fa966c8e58992897606a7900 new file mode 100644 index 0000000000000000000000000000000000000000..ae5f908ce3c9bfb179c7569da54d030572793c37 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/5a1d370abacb9f46fa966c8e58992897606a7900 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/5a34e7fd2ff3f8e32ce85138931a387dc5f15db0 b/test/core/end2end/fuzzers/api_fuzzer_corpus/5a34e7fd2ff3f8e32ce85138931a387dc5f15db0 new file mode 100644 index 0000000000000000000000000000000000000000..3f75486f200c81099b6e41051646f2f48e5dd56a Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/5a34e7fd2ff3f8e32ce85138931a387dc5f15db0 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/5a3d25f74f7629c675be11faaea35921229b8757 b/test/core/end2end/fuzzers/api_fuzzer_corpus/5a3d25f74f7629c675be11faaea35921229b8757 new file mode 100644 index 0000000000000000000000000000000000000000..c1aa94b5a17109337201dccabb339b4ad09a0c4a Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/5a3d25f74f7629c675be11faaea35921229b8757 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/5ae4d5439ec6910a5fcd9c41f20ae843942853c6 b/test/core/end2end/fuzzers/api_fuzzer_corpus/5ae4d5439ec6910a5fcd9c41f20ae843942853c6 new file mode 100644 index 0000000000000000000000000000000000000000..b9b9fb928fa290ef47bdf7d62198e2e4265dcccf Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/5ae4d5439ec6910a5fcd9c41f20ae843942853c6 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/5b3f6f20f348cc4e5fb07cdb6e8614ca24f2cf13 b/test/core/end2end/fuzzers/api_fuzzer_corpus/5b3f6f20f348cc4e5fb07cdb6e8614ca24f2cf13 new file mode 100644 index 0000000000000000000000000000000000000000..1cfa196124dfa761cb1b891a9349672d826dd4f3 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/5b3f6f20f348cc4e5fb07cdb6e8614ca24f2cf13 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/5c117dbd5d3146fd94c667f15f4c006fea88d14d b/test/core/end2end/fuzzers/api_fuzzer_corpus/5c117dbd5d3146fd94c667f15f4c006fea88d14d new file mode 100644 index 0000000000000000000000000000000000000000..03cd401ba1fddd00d369e1ead79f3202ad263d9d Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/5c117dbd5d3146fd94c667f15f4c006fea88d14d differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/5c388b60e622e14c9abfb5b46c65207a319e09e4 b/test/core/end2end/fuzzers/api_fuzzer_corpus/5c388b60e622e14c9abfb5b46c65207a319e09e4 new file mode 100644 index 0000000000000000000000000000000000000000..417ac893df70978b79e00841f4edfde06eabc18d Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/5c388b60e622e14c9abfb5b46c65207a319e09e4 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/5c43f3a5de9c581693432dbb2ad604550c3948f5 b/test/core/end2end/fuzzers/api_fuzzer_corpus/5c43f3a5de9c581693432dbb2ad604550c3948f5 new file mode 100644 index 0000000000000000000000000000000000000000..13b07bbabda3238b79736c93ddde7f0e9a79b670 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/5c43f3a5de9c581693432dbb2ad604550c3948f5 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/5cce719931cf1f07536401134de4325b942be87d b/test/core/end2end/fuzzers/api_fuzzer_corpus/5cce719931cf1f07536401134de4325b942be87d new file mode 100644 index 0000000000000000000000000000000000000000..19c6d543ba05565a103d6791ba854bcd4e6bb0df Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/5cce719931cf1f07536401134de4325b942be87d differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/5cd55495dee689728feee959bcb09e2ab13d013d b/test/core/end2end/fuzzers/api_fuzzer_corpus/5cd55495dee689728feee959bcb09e2ab13d013d new file mode 100644 index 0000000000000000000000000000000000000000..48291a7889345024213e4df61f22d818e0db6ca0 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/5cd55495dee689728feee959bcb09e2ab13d013d differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/5cf8b4c70476c124711e731cd2e00f67906bd457 b/test/core/end2end/fuzzers/api_fuzzer_corpus/5cf8b4c70476c124711e731cd2e00f67906bd457 new file mode 100644 index 0000000000000000000000000000000000000000..8d9455f330b6591e092606972c9c903a3db96e8a Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/5cf8b4c70476c124711e731cd2e00f67906bd457 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/5d5ce71ab1258e014e06e6a2edb94a47a4ae1b35 b/test/core/end2end/fuzzers/api_fuzzer_corpus/5d5ce71ab1258e014e06e6a2edb94a47a4ae1b35 new file mode 100644 index 0000000000000000000000000000000000000000..5962d6447d2d45fd708546cb59188949df2f5d59 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/5d5ce71ab1258e014e06e6a2edb94a47a4ae1b35 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/5d76fdb98fb38243a1f1c5f96d31ece34c5a91b7 b/test/core/end2end/fuzzers/api_fuzzer_corpus/5d76fdb98fb38243a1f1c5f96d31ece34c5a91b7 new file mode 100644 index 0000000000000000000000000000000000000000..730cac747e0470472ed7a5f039c46d65308930b5 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/5d76fdb98fb38243a1f1c5f96d31ece34c5a91b7 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/5da437d4fd58607deeed34bcb21accece71a056b b/test/core/end2end/fuzzers/api_fuzzer_corpus/5da437d4fd58607deeed34bcb21accece71a056b new file mode 100644 index 0000000000000000000000000000000000000000..e751aa0097f231550602f2fa426cb386d3603c28 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/5da437d4fd58607deeed34bcb21accece71a056b differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/5ddcbde7afa43e7fe4e44ef1470fc0c282873cae b/test/core/end2end/fuzzers/api_fuzzer_corpus/5ddcbde7afa43e7fe4e44ef1470fc0c282873cae new file mode 100644 index 0000000000000000000000000000000000000000..33e7ec9ec5f42e94a04e8e133348627cbdc60955 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/5ddcbde7afa43e7fe4e44ef1470fc0c282873cae differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/5e880db498f9baae544cdbc23476873d8766ac58 b/test/core/end2end/fuzzers/api_fuzzer_corpus/5e880db498f9baae544cdbc23476873d8766ac58 new file mode 100644 index 0000000000000000000000000000000000000000..b9e46087912a674ac62d029979115c95dc7f169e Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/5e880db498f9baae544cdbc23476873d8766ac58 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/5eae70ef8ab19fead6a9275e3e40df6b201159b1 b/test/core/end2end/fuzzers/api_fuzzer_corpus/5eae70ef8ab19fead6a9275e3e40df6b201159b1 new file mode 100644 index 0000000000000000000000000000000000000000..8790cf48d720fe48241da8ab031ad1eac3d79bd1 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/5eae70ef8ab19fead6a9275e3e40df6b201159b1 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/5ed431181bedd9a496aa3bb2330957c621f1443d b/test/core/end2end/fuzzers/api_fuzzer_corpus/5ed431181bedd9a496aa3bb2330957c621f1443d new file mode 100644 index 0000000000000000000000000000000000000000..a143c3b64c542f969593860b7f7b062181666a7e Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/5ed431181bedd9a496aa3bb2330957c621f1443d differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/5ed8998cfc22cce008e3988b3591b1c9ddbfaa75 b/test/core/end2end/fuzzers/api_fuzzer_corpus/5ed8998cfc22cce008e3988b3591b1c9ddbfaa75 new file mode 100644 index 0000000000000000000000000000000000000000..4d597e944bdc860e3d18c76ea5c1cd09e46ed84c Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/5ed8998cfc22cce008e3988b3591b1c9ddbfaa75 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/5f07e5246d765494ee26c689072ab3ced452f30e b/test/core/end2end/fuzzers/api_fuzzer_corpus/5f07e5246d765494ee26c689072ab3ced452f30e new file mode 100644 index 0000000000000000000000000000000000000000..fe4b4c5aff74a0fa887dc57ff87b21c603b3bd04 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/5f07e5246d765494ee26c689072ab3ced452f30e differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/5f52309deaa1b641fe199889d18f921d6909fc14 b/test/core/end2end/fuzzers/api_fuzzer_corpus/5f52309deaa1b641fe199889d18f921d6909fc14 new file mode 100644 index 0000000000000000000000000000000000000000..1b7cd7b8b92900f6270d38ed493fa27145672355 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/5f52309deaa1b641fe199889d18f921d6909fc14 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/5f7eee027cbd6ae8e989150d9bd8a4fd39654c01 b/test/core/end2end/fuzzers/api_fuzzer_corpus/5f7eee027cbd6ae8e989150d9bd8a4fd39654c01 new file mode 100644 index 0000000000000000000000000000000000000000..7fbd858a523cc4186670f41d2bf9b9dc1a5491a2 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/5f7eee027cbd6ae8e989150d9bd8a4fd39654c01 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/600096fe00d5f67726674fb9b0d2a6621a25e79c b/test/core/end2end/fuzzers/api_fuzzer_corpus/600096fe00d5f67726674fb9b0d2a6621a25e79c new file mode 100644 index 0000000000000000000000000000000000000000..f456358e1f9c145f9d43b8915c763f97c3d2aa20 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/600096fe00d5f67726674fb9b0d2a6621a25e79c differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/6123f6116f3cacb4aabdbe26aed24ed0981d6c1c b/test/core/end2end/fuzzers/api_fuzzer_corpus/6123f6116f3cacb4aabdbe26aed24ed0981d6c1c new file mode 100644 index 0000000000000000000000000000000000000000..292cb9f81bfd13ceb884be1ad324b42a1fffd723 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/6123f6116f3cacb4aabdbe26aed24ed0981d6c1c differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/617a2a3f6b6d5d53993db606a8818235ae8d9b96 b/test/core/end2end/fuzzers/api_fuzzer_corpus/617a2a3f6b6d5d53993db606a8818235ae8d9b96 new file mode 100644 index 0000000000000000000000000000000000000000..4a6a220ba33cc03526e483d0226d3b968440d3fe Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/617a2a3f6b6d5d53993db606a8818235ae8d9b96 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/617ef08330c0e852f9aae6c63ddc5893b8b2c722 b/test/core/end2end/fuzzers/api_fuzzer_corpus/617ef08330c0e852f9aae6c63ddc5893b8b2c722 new file mode 100644 index 0000000000000000000000000000000000000000..efaa4a4fc1e8967c0dceab7a47f4c33c8c27d902 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/617ef08330c0e852f9aae6c63ddc5893b8b2c722 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/618e64836dc7f374745be963b7b3c62cc02ae2ca b/test/core/end2end/fuzzers/api_fuzzer_corpus/618e64836dc7f374745be963b7b3c62cc02ae2ca new file mode 100644 index 0000000000000000000000000000000000000000..4775cd01272066b19eca6479dcad03d75bdb6411 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/618e64836dc7f374745be963b7b3c62cc02ae2ca differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/61ce843c87f7bda1fabcb6ae3f41e85e6e2332ac b/test/core/end2end/fuzzers/api_fuzzer_corpus/61ce843c87f7bda1fabcb6ae3f41e85e6e2332ac new file mode 100644 index 0000000000000000000000000000000000000000..6e46ea802ed0443fee53bb9e46ae853557edb942 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/61ce843c87f7bda1fabcb6ae3f41e85e6e2332ac differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/61f410c711bc5d53be9e932217ebd035f2716417 b/test/core/end2end/fuzzers/api_fuzzer_corpus/61f410c711bc5d53be9e932217ebd035f2716417 new file mode 100644 index 0000000000000000000000000000000000000000..61d118d0553eb21a89ee91d7be326c6f24f0f43d Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/61f410c711bc5d53be9e932217ebd035f2716417 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/629eac0e7443a273b5c351757c03fe15a0b87c1c b/test/core/end2end/fuzzers/api_fuzzer_corpus/629eac0e7443a273b5c351757c03fe15a0b87c1c new file mode 100644 index 0000000000000000000000000000000000000000..f1e6ccc10c5436d17398266e897f2b16b2c35999 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/629eac0e7443a273b5c351757c03fe15a0b87c1c differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/62c995646f15be1819bd13e32a60af46297d73b4 b/test/core/end2end/fuzzers/api_fuzzer_corpus/62c995646f15be1819bd13e32a60af46297d73b4 new file mode 100644 index 0000000000000000000000000000000000000000..7ecbf72ded10964af6daea72dae4a7f1d1671f17 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/62c995646f15be1819bd13e32a60af46297d73b4 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/634d809c430738b89f0e677eec36506e537e86b3 b/test/core/end2end/fuzzers/api_fuzzer_corpus/634d809c430738b89f0e677eec36506e537e86b3 new file mode 100644 index 0000000000000000000000000000000000000000..44e84a689e14deab880eb0071020f4824bc0d775 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/634d809c430738b89f0e677eec36506e537e86b3 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/63b91deaac58a7b64fb5999628ff3ff5d32b719d b/test/core/end2end/fuzzers/api_fuzzer_corpus/63b91deaac58a7b64fb5999628ff3ff5d32b719d new file mode 100644 index 0000000000000000000000000000000000000000..25ea6ce836994865da87f7de71fb7394f2731424 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/63b91deaac58a7b64fb5999628ff3ff5d32b719d differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/63babc04d35adbe48add6e93386dfc838b0bbd25 b/test/core/end2end/fuzzers/api_fuzzer_corpus/63babc04d35adbe48add6e93386dfc838b0bbd25 new file mode 100644 index 0000000000000000000000000000000000000000..d2087ce7d56d56da58a0373c008363cc8ff51def Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/63babc04d35adbe48add6e93386dfc838b0bbd25 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/645b8377f905399af625a01c76ff088745fe1640 b/test/core/end2end/fuzzers/api_fuzzer_corpus/645b8377f905399af625a01c76ff088745fe1640 new file mode 100644 index 0000000000000000000000000000000000000000..0826bbcc1be0f64c77a01340321a6c25e4e37492 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/645b8377f905399af625a01c76ff088745fe1640 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/649cf0ee983cb5792042687181ce7e4d81f090a5 b/test/core/end2end/fuzzers/api_fuzzer_corpus/649cf0ee983cb5792042687181ce7e4d81f090a5 new file mode 100644 index 0000000000000000000000000000000000000000..e59a8350253b4204c00034bbd9548b63d3c6ff23 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/649cf0ee983cb5792042687181ce7e4d81f090a5 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/64d55e872c2148eefb0d7c3df101fd955b709f24 b/test/core/end2end/fuzzers/api_fuzzer_corpus/64d55e872c2148eefb0d7c3df101fd955b709f24 new file mode 100644 index 0000000000000000000000000000000000000000..b3aac99dc855eeec1e287e2e5c24b9a129f0754a Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/64d55e872c2148eefb0d7c3df101fd955b709f24 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/6531f1c311678c9247ad6820519bc7e73f56cb81 b/test/core/end2end/fuzzers/api_fuzzer_corpus/6531f1c311678c9247ad6820519bc7e73f56cb81 new file mode 100644 index 0000000000000000000000000000000000000000..600f8551dfd464d024bbf2989a8af7d8c7767481 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/6531f1c311678c9247ad6820519bc7e73f56cb81 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/655f952ec49cbc6176ad1bcfa45a87bd6c3542f0 b/test/core/end2end/fuzzers/api_fuzzer_corpus/655f952ec49cbc6176ad1bcfa45a87bd6c3542f0 new file mode 100644 index 0000000000000000000000000000000000000000..61529df07296a369170be3597943fb2809cb4e9c Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/655f952ec49cbc6176ad1bcfa45a87bd6c3542f0 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/6639deedbf04eceba6017f712b287235540b5528 b/test/core/end2end/fuzzers/api_fuzzer_corpus/6639deedbf04eceba6017f712b287235540b5528 new file mode 100644 index 0000000000000000000000000000000000000000..489843ea7d910f39f69abc3f526a39746a094066 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/6639deedbf04eceba6017f712b287235540b5528 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/665d7b4f8082be87864e6ad3a6a3faa1d52ad6e5 b/test/core/end2end/fuzzers/api_fuzzer_corpus/665d7b4f8082be87864e6ad3a6a3faa1d52ad6e5 new file mode 100644 index 0000000000000000000000000000000000000000..899f66251745585f8548ebb7f915b5fd05dfd60c Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/665d7b4f8082be87864e6ad3a6a3faa1d52ad6e5 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/66f0ed73b2d4ca3edbd23d5b669e75e4d0ffd292 b/test/core/end2end/fuzzers/api_fuzzer_corpus/66f0ed73b2d4ca3edbd23d5b669e75e4d0ffd292 new file mode 100644 index 0000000000000000000000000000000000000000..924c8ac7b302cf943362aa2ab134042a4689b844 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/66f0ed73b2d4ca3edbd23d5b669e75e4d0ffd292 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/6722929b4924f4d50ccfb999460e9a31ca104b4c b/test/core/end2end/fuzzers/api_fuzzer_corpus/6722929b4924f4d50ccfb999460e9a31ca104b4c new file mode 100644 index 0000000000000000000000000000000000000000..10cebeab1fe9914375c6257ff49dccd3572a165b Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/6722929b4924f4d50ccfb999460e9a31ca104b4c differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/6868e669f4b9a77ae5227767ec455fe6f82e55a1 b/test/core/end2end/fuzzers/api_fuzzer_corpus/6868e669f4b9a77ae5227767ec455fe6f82e55a1 new file mode 100644 index 0000000000000000000000000000000000000000..64d6f6d3f5f7c2ea69fe3b430df0566a23ad329a Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/6868e669f4b9a77ae5227767ec455fe6f82e55a1 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/6887af467b343d6e1a8125ef10eb0a630f2dc06d b/test/core/end2end/fuzzers/api_fuzzer_corpus/6887af467b343d6e1a8125ef10eb0a630f2dc06d new file mode 100644 index 0000000000000000000000000000000000000000..f3d89db61bd80e34fca7710dceb24a3b05dd0131 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/6887af467b343d6e1a8125ef10eb0a630f2dc06d differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/68c65dc60f887050eb8cd7f946bf37aea2ade9f2 b/test/core/end2end/fuzzers/api_fuzzer_corpus/68c65dc60f887050eb8cd7f946bf37aea2ade9f2 new file mode 100644 index 0000000000000000000000000000000000000000..f94aa4efabac19237438f0dfd8d91fa8fff0024e Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/68c65dc60f887050eb8cd7f946bf37aea2ade9f2 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/68f9d39b83bbc7cb4f743c8814800e6692988897 b/test/core/end2end/fuzzers/api_fuzzer_corpus/68f9d39b83bbc7cb4f743c8814800e6692988897 new file mode 100644 index 0000000000000000000000000000000000000000..ef065af58e47889c1c1bc48a2326926237dbe9b3 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/68f9d39b83bbc7cb4f743c8814800e6692988897 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/69d0f8b4a9452d11620c7d3c1fa532a618d65858 b/test/core/end2end/fuzzers/api_fuzzer_corpus/69d0f8b4a9452d11620c7d3c1fa532a618d65858 new file mode 100644 index 0000000000000000000000000000000000000000..792443b27b44042b4e83a7174267db6c3ec43fb2 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/69d0f8b4a9452d11620c7d3c1fa532a618d65858 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/6a1d877fe1eed1199511b8f28889d8f17665708e b/test/core/end2end/fuzzers/api_fuzzer_corpus/6a1d877fe1eed1199511b8f28889d8f17665708e new file mode 100644 index 0000000000000000000000000000000000000000..4e4ac64e8f7ddc86d68e4c2d158dc130b594d075 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/6a1d877fe1eed1199511b8f28889d8f17665708e differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/6ac88da4119df5e1592a05bac7ecb92af59dc1d1 b/test/core/end2end/fuzzers/api_fuzzer_corpus/6ac88da4119df5e1592a05bac7ecb92af59dc1d1 new file mode 100644 index 0000000000000000000000000000000000000000..d86c3d57b0d199e751862ffdc22586e4e2ac59e2 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/6ac88da4119df5e1592a05bac7ecb92af59dc1d1 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/6b1e10a936df3b42720ebc9179fb74aa147f8b14 b/test/core/end2end/fuzzers/api_fuzzer_corpus/6b1e10a936df3b42720ebc9179fb74aa147f8b14 new file mode 100644 index 0000000000000000000000000000000000000000..2c01f4f0b0d0b68965ec3285c79d49b9c6a636a8 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/6b1e10a936df3b42720ebc9179fb74aa147f8b14 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/6bd27df0dc9a3f73108de7bad443433aa5ee1175 b/test/core/end2end/fuzzers/api_fuzzer_corpus/6bd27df0dc9a3f73108de7bad443433aa5ee1175 new file mode 100644 index 0000000000000000000000000000000000000000..47e000618c4303012295d39434befe11fb0abc20 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/6bd27df0dc9a3f73108de7bad443433aa5ee1175 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/6c5707e8b1aa9a70ec87014cd660df4a7b910ee3 b/test/core/end2end/fuzzers/api_fuzzer_corpus/6c5707e8b1aa9a70ec87014cd660df4a7b910ee3 new file mode 100644 index 0000000000000000000000000000000000000000..3ff6967ce70551d9c328607d76c827d72c6f9cbf Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/6c5707e8b1aa9a70ec87014cd660df4a7b910ee3 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/6c91623f5a30f65110a4083897bad2882f032c51 b/test/core/end2end/fuzzers/api_fuzzer_corpus/6c91623f5a30f65110a4083897bad2882f032c51 new file mode 100644 index 0000000000000000000000000000000000000000..9a56cb7e1ff5092a1b2dfce4bf947614d5903b2e Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/6c91623f5a30f65110a4083897bad2882f032c51 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/6c9b144f4e6dae6944b524a077dde07ac79e58d5 b/test/core/end2end/fuzzers/api_fuzzer_corpus/6c9b144f4e6dae6944b524a077dde07ac79e58d5 new file mode 100644 index 0000000000000000000000000000000000000000..dc4750cbb71f9db51e1b5992b74afd71943d2337 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/6c9b144f4e6dae6944b524a077dde07ac79e58d5 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/6ca83e5d3f4544a14da513dc798f02464febdcd8 b/test/core/end2end/fuzzers/api_fuzzer_corpus/6ca83e5d3f4544a14da513dc798f02464febdcd8 new file mode 100644 index 0000000000000000000000000000000000000000..43b098bdd0937db0b5d5feff48baa23fdabd982b Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/6ca83e5d3f4544a14da513dc798f02464febdcd8 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/6ce9895c780428861d12440946508c6641352544 b/test/core/end2end/fuzzers/api_fuzzer_corpus/6ce9895c780428861d12440946508c6641352544 new file mode 100644 index 0000000000000000000000000000000000000000..7d51c94a29248df878088782766aff7d6ed5ee00 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/6ce9895c780428861d12440946508c6641352544 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/6df1c575d7f8fdf5593f1f60d9dc540d018fc58c b/test/core/end2end/fuzzers/api_fuzzer_corpus/6df1c575d7f8fdf5593f1f60d9dc540d018fc58c new file mode 100644 index 0000000000000000000000000000000000000000..96758875efd390d73d3959fec69e29c89d0765b2 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/6df1c575d7f8fdf5593f1f60d9dc540d018fc58c differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/6e97f4e782ca976d4890199d48fcfd64173e24f9 b/test/core/end2end/fuzzers/api_fuzzer_corpus/6e97f4e782ca976d4890199d48fcfd64173e24f9 new file mode 100644 index 0000000000000000000000000000000000000000..ee42072d76f2779d19a5f9ea97037d7b8ddfe1ac Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/6e97f4e782ca976d4890199d48fcfd64173e24f9 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/6f0bbfce7c5027932fb0f809494413e12a4ad3c1 b/test/core/end2end/fuzzers/api_fuzzer_corpus/6f0bbfce7c5027932fb0f809494413e12a4ad3c1 new file mode 100644 index 0000000000000000000000000000000000000000..2f9cfea000ddede4a75760a8e592c7d22dfcfffb Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/6f0bbfce7c5027932fb0f809494413e12a4ad3c1 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/6f39da8f5bbae89a13dd36755f7b3c4a30c25833 b/test/core/end2end/fuzzers/api_fuzzer_corpus/6f39da8f5bbae89a13dd36755f7b3c4a30c25833 new file mode 100644 index 0000000000000000000000000000000000000000..98b2635ccd507577399ca8fd8035ba5a1f110d28 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/6f39da8f5bbae89a13dd36755f7b3c4a30c25833 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/6fa93aadbb6ecdc32c9111be7692ec28ec11be72 b/test/core/end2end/fuzzers/api_fuzzer_corpus/6fa93aadbb6ecdc32c9111be7692ec28ec11be72 new file mode 100644 index 0000000000000000000000000000000000000000..f7b2e9979fff4fd5cf966983563f5c3bf171e58b Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/6fa93aadbb6ecdc32c9111be7692ec28ec11be72 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/6fb7b01c1b363390eb9188bcac05f8f11e20c01d b/test/core/end2end/fuzzers/api_fuzzer_corpus/6fb7b01c1b363390eb9188bcac05f8f11e20c01d new file mode 100644 index 0000000000000000000000000000000000000000..792e81225ab34634b863d89a4d129e9a4237a7c4 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/6fb7b01c1b363390eb9188bcac05f8f11e20c01d differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/6fbbaf9f6f49fabad4a0e47cea9e4048d8f130ed b/test/core/end2end/fuzzers/api_fuzzer_corpus/6fbbaf9f6f49fabad4a0e47cea9e4048d8f130ed new file mode 100644 index 0000000000000000000000000000000000000000..e0a6317195cfab4cd0725208426e07a9e797d8f2 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/6fbbaf9f6f49fabad4a0e47cea9e4048d8f130ed differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/6fe041f1468b495d3186da906f9a5091e5761387 b/test/core/end2end/fuzzers/api_fuzzer_corpus/6fe041f1468b495d3186da906f9a5091e5761387 new file mode 100644 index 0000000000000000000000000000000000000000..ea9c3546ff86e3adf99aab1ae26e979fc4c1e7d0 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/6fe041f1468b495d3186da906f9a5091e5761387 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/6fff95a8d3566b2721fa46e9828b47635f13d9ef b/test/core/end2end/fuzzers/api_fuzzer_corpus/6fff95a8d3566b2721fa46e9828b47635f13d9ef new file mode 100644 index 0000000000000000000000000000000000000000..ec7a56d7eaf874b8b6413cdde001afa58e9a1a71 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/6fff95a8d3566b2721fa46e9828b47635f13d9ef differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/700f56e26286daf472d371effb9bca13fffa3d77 b/test/core/end2end/fuzzers/api_fuzzer_corpus/700f56e26286daf472d371effb9bca13fffa3d77 new file mode 100644 index 0000000000000000000000000000000000000000..0c6b8c13c03588909fc3bb78563a326dd6ae7371 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/700f56e26286daf472d371effb9bca13fffa3d77 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/705c87b99197c87eb2ed148f8b3fdc60f8616f15 b/test/core/end2end/fuzzers/api_fuzzer_corpus/705c87b99197c87eb2ed148f8b3fdc60f8616f15 new file mode 100644 index 0000000000000000000000000000000000000000..d8930c7906c65937e7cd6c3e1087f9813c6da5a3 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/705c87b99197c87eb2ed148f8b3fdc60f8616f15 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/718d23058d5c805a2984c087cd89f9cb6af065b4 b/test/core/end2end/fuzzers/api_fuzzer_corpus/718d23058d5c805a2984c087cd89f9cb6af065b4 new file mode 100644 index 0000000000000000000000000000000000000000..9282b0a779587f36cef275d2e1f5ea3c902f0513 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/718d23058d5c805a2984c087cd89f9cb6af065b4 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/7217d93c1da3ae8ed085a5e6988227dcf430cd89 b/test/core/end2end/fuzzers/api_fuzzer_corpus/7217d93c1da3ae8ed085a5e6988227dcf430cd89 new file mode 100644 index 0000000000000000000000000000000000000000..0f64b025e4d3bfdc738f04e60d0c983053db2e26 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/7217d93c1da3ae8ed085a5e6988227dcf430cd89 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/724063b7a5ee36246d72923e776331487434b81a b/test/core/end2end/fuzzers/api_fuzzer_corpus/724063b7a5ee36246d72923e776331487434b81a new file mode 100644 index 0000000000000000000000000000000000000000..a554b8fb2fbefd7e674d929b47dffc603900199f Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/724063b7a5ee36246d72923e776331487434b81a differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/72a79517b8f9b57f62dc1203a6b5eefadf27c088 b/test/core/end2end/fuzzers/api_fuzzer_corpus/72a79517b8f9b57f62dc1203a6b5eefadf27c088 new file mode 100644 index 0000000000000000000000000000000000000000..0e795588a818a5faf06d93018f3dd0c28cda4e06 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/72a79517b8f9b57f62dc1203a6b5eefadf27c088 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/72f71befa8ebb4b2c1842aec78d840b2a4abdb85 b/test/core/end2end/fuzzers/api_fuzzer_corpus/72f71befa8ebb4b2c1842aec78d840b2a4abdb85 new file mode 100644 index 0000000000000000000000000000000000000000..28402793f3cf8354ecac19252bdd65fa0845106d Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/72f71befa8ebb4b2c1842aec78d840b2a4abdb85 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/73a6e07089ee011746c1ec3146b8a1b4b82c835e b/test/core/end2end/fuzzers/api_fuzzer_corpus/73a6e07089ee011746c1ec3146b8a1b4b82c835e new file mode 100644 index 0000000000000000000000000000000000000000..0a6411f2c9410a7e566a567f726240f7809fa118 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/73a6e07089ee011746c1ec3146b8a1b4b82c835e differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/7421d8acd877abd9d437ad447dfae29893cd2f37 b/test/core/end2end/fuzzers/api_fuzzer_corpus/7421d8acd877abd9d437ad447dfae29893cd2f37 new file mode 100644 index 0000000000000000000000000000000000000000..7d730cef62b960bce5b5177ea0fb0b13a30d8fff Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/7421d8acd877abd9d437ad447dfae29893cd2f37 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/746d9837f0fc3c989b7fe0585b8365478f1c21fc b/test/core/end2end/fuzzers/api_fuzzer_corpus/746d9837f0fc3c989b7fe0585b8365478f1c21fc new file mode 100644 index 0000000000000000000000000000000000000000..be672346437d89d8b836bae3544e522c2cb26dc3 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/746d9837f0fc3c989b7fe0585b8365478f1c21fc differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/746ecd23f1c41206dd4180a7afb032411f315d73 b/test/core/end2end/fuzzers/api_fuzzer_corpus/746ecd23f1c41206dd4180a7afb032411f315d73 new file mode 100644 index 0000000000000000000000000000000000000000..8d7fa42a23fcb64833940deaafb05ea70e2a00f8 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/746ecd23f1c41206dd4180a7afb032411f315d73 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/7487f56a435277d9bd7ef38d361e8ad7cdf62375 b/test/core/end2end/fuzzers/api_fuzzer_corpus/7487f56a435277d9bd7ef38d361e8ad7cdf62375 new file mode 100644 index 0000000000000000000000000000000000000000..1f07e584f999b9a44f4e7e8e71eac253e8197293 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/7487f56a435277d9bd7ef38d361e8ad7cdf62375 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/75755ae5cb0ae4f711dd15925f9f681d23408bb8 b/test/core/end2end/fuzzers/api_fuzzer_corpus/75755ae5cb0ae4f711dd15925f9f681d23408bb8 new file mode 100644 index 0000000000000000000000000000000000000000..94f068b999eba6358828b7a227acf12e7a1e2ac2 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/75755ae5cb0ae4f711dd15925f9f681d23408bb8 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/774a64c60765d78b3b980ff9a6538219d6908a3d b/test/core/end2end/fuzzers/api_fuzzer_corpus/774a64c60765d78b3b980ff9a6538219d6908a3d new file mode 100644 index 0000000000000000000000000000000000000000..d84b622c9e6475caeb13de311c99cba20c740a5e Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/774a64c60765d78b3b980ff9a6538219d6908a3d differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/783b1f17ae90eba0ff7728e767b56ea6885e0b28 b/test/core/end2end/fuzzers/api_fuzzer_corpus/783b1f17ae90eba0ff7728e767b56ea6885e0b28 new file mode 100644 index 0000000000000000000000000000000000000000..3fb16c7c1f7c761929bb4060059da395367a7a0e Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/783b1f17ae90eba0ff7728e767b56ea6885e0b28 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/78499fa2980dce2fde92b74421f486bf544cfb8f b/test/core/end2end/fuzzers/api_fuzzer_corpus/78499fa2980dce2fde92b74421f486bf544cfb8f new file mode 100644 index 0000000000000000000000000000000000000000..0ad9591b68f98a74ab157f14ed0da14f9061de34 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/78499fa2980dce2fde92b74421f486bf544cfb8f differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/788f18727a0aeb5e200527bca7c889c9954be343 b/test/core/end2end/fuzzers/api_fuzzer_corpus/788f18727a0aeb5e200527bca7c889c9954be343 new file mode 100644 index 0000000000000000000000000000000000000000..e8bc498037386e93771fe62fd6afeb00eb71abbe Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/788f18727a0aeb5e200527bca7c889c9954be343 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/78c3bbeaeb266aac1df0d4abe78bbca68fb085a8 b/test/core/end2end/fuzzers/api_fuzzer_corpus/78c3bbeaeb266aac1df0d4abe78bbca68fb085a8 new file mode 100644 index 0000000000000000000000000000000000000000..560f4fc37a85b480a633436312e339a1f87ddc08 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/78c3bbeaeb266aac1df0d4abe78bbca68fb085a8 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/7957953ca449974ec39c6a137c0acdedb71c3b02 b/test/core/end2end/fuzzers/api_fuzzer_corpus/7957953ca449974ec39c6a137c0acdedb71c3b02 new file mode 100644 index 0000000000000000000000000000000000000000..65bba5a40d0722111cd29df06663a804101a20b4 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/7957953ca449974ec39c6a137c0acdedb71c3b02 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/798fd96821ee3d91952373024f35cdceb10ccbed b/test/core/end2end/fuzzers/api_fuzzer_corpus/798fd96821ee3d91952373024f35cdceb10ccbed new file mode 100644 index 0000000000000000000000000000000000000000..c33e5f0e63e9e75af7bc53cfec0d0a197cecf4e2 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/798fd96821ee3d91952373024f35cdceb10ccbed differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/79ac297c667d2ae77c05d2af275b05138439ee5b b/test/core/end2end/fuzzers/api_fuzzer_corpus/79ac297c667d2ae77c05d2af275b05138439ee5b new file mode 100644 index 0000000000000000000000000000000000000000..06baaa7126cf064a93cf2ccfdf9c89971b9118df Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/79ac297c667d2ae77c05d2af275b05138439ee5b differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/7b4b493ac5a36d3b3fed0b66bc504206548a3537 b/test/core/end2end/fuzzers/api_fuzzer_corpus/7b4b493ac5a36d3b3fed0b66bc504206548a3537 new file mode 100644 index 0000000000000000000000000000000000000000..a27ffd37fc80594e2c29098cd089f3462553e072 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/7b4b493ac5a36d3b3fed0b66bc504206548a3537 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/7bb25e1821f1ff6ea4c85259444f7f40b430aa1f b/test/core/end2end/fuzzers/api_fuzzer_corpus/7bb25e1821f1ff6ea4c85259444f7f40b430aa1f new file mode 100644 index 0000000000000000000000000000000000000000..35c5a9d28ed589c506fb231fef93cf5eaaa42c56 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/7bb25e1821f1ff6ea4c85259444f7f40b430aa1f differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/7bd75ddceb75724e5e9205cf7fadec03d8e1aca2 b/test/core/end2end/fuzzers/api_fuzzer_corpus/7bd75ddceb75724e5e9205cf7fadec03d8e1aca2 new file mode 100644 index 0000000000000000000000000000000000000000..1a610e52dec9005cd10a554605fc899e65dfe166 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/7bd75ddceb75724e5e9205cf7fadec03d8e1aca2 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/7bdc25dc79ca942673e515126e22474fd89ce55e b/test/core/end2end/fuzzers/api_fuzzer_corpus/7bdc25dc79ca942673e515126e22474fd89ce55e new file mode 100644 index 0000000000000000000000000000000000000000..8d9dd1f7df295440aef506bc219ee1f5cd961674 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/7bdc25dc79ca942673e515126e22474fd89ce55e differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/7bf8d2b77d85e4042e47d0dbe6da9441c6d9530b b/test/core/end2end/fuzzers/api_fuzzer_corpus/7bf8d2b77d85e4042e47d0dbe6da9441c6d9530b new file mode 100644 index 0000000000000000000000000000000000000000..eaf8a8f3041c5747db2caf598c41886e5788b3ba Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/7bf8d2b77d85e4042e47d0dbe6da9441c6d9530b differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/7c193442a422da21cdeb14f681b0d4179aaeaf5f b/test/core/end2end/fuzzers/api_fuzzer_corpus/7c193442a422da21cdeb14f681b0d4179aaeaf5f new file mode 100644 index 0000000000000000000000000000000000000000..a1fdbfd61f7e83a6c496015b663836974dbff396 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/7c193442a422da21cdeb14f681b0d4179aaeaf5f differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/7c6a381eac8fbc8fccada2b2069c3f773a9c6961 b/test/core/end2end/fuzzers/api_fuzzer_corpus/7c6a381eac8fbc8fccada2b2069c3f773a9c6961 new file mode 100644 index 0000000000000000000000000000000000000000..33d987810e574b8f4fe1352f279fe4c27940d727 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/7c6a381eac8fbc8fccada2b2069c3f773a9c6961 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/7c70dd584df7a4fda61d08ab8ef85ec70c85b7f5 b/test/core/end2end/fuzzers/api_fuzzer_corpus/7c70dd584df7a4fda61d08ab8ef85ec70c85b7f5 new file mode 100644 index 0000000000000000000000000000000000000000..39f933f490be524ea0ab751574690175c36858e5 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/7c70dd584df7a4fda61d08ab8ef85ec70c85b7f5 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/7cc958be492e942df2b784fcc08a63d57c7fef92 b/test/core/end2end/fuzzers/api_fuzzer_corpus/7cc958be492e942df2b784fcc08a63d57c7fef92 new file mode 100644 index 0000000000000000000000000000000000000000..a40561266fbb5bce71e94c532ece02cc6e91bc10 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/7cc958be492e942df2b784fcc08a63d57c7fef92 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/7d8eeb8778051e621abf74daf43dd4010117d9f9 b/test/core/end2end/fuzzers/api_fuzzer_corpus/7d8eeb8778051e621abf74daf43dd4010117d9f9 new file mode 100644 index 0000000000000000000000000000000000000000..1e6d8944f4616b5ebdeeb2616531b958a5de52b1 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/7d8eeb8778051e621abf74daf43dd4010117d9f9 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/7e29172a1d27c4f8a0b138306db1043373b2d0ba b/test/core/end2end/fuzzers/api_fuzzer_corpus/7e29172a1d27c4f8a0b138306db1043373b2d0ba new file mode 100644 index 0000000000000000000000000000000000000000..65c18d1fa67f43f58aae8d0ca3b7dd4f215b1a95 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/7e29172a1d27c4f8a0b138306db1043373b2d0ba differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/7ec62c16916c2c30847b578d2148893924287bfe b/test/core/end2end/fuzzers/api_fuzzer_corpus/7ec62c16916c2c30847b578d2148893924287bfe new file mode 100644 index 0000000000000000000000000000000000000000..a326d20d52a2105f8f87402775269f341912a390 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/7ec62c16916c2c30847b578d2148893924287bfe differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/7eea6a4b31c4f10281f31a7461f35af7331becf2 b/test/core/end2end/fuzzers/api_fuzzer_corpus/7eea6a4b31c4f10281f31a7461f35af7331becf2 new file mode 100644 index 0000000000000000000000000000000000000000..86ca443228cd0a6c4b999dc24f833100dcd4f71d Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/7eea6a4b31c4f10281f31a7461f35af7331becf2 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/7efac665d3dabc2162f4407e3bedbd65b3007335 b/test/core/end2end/fuzzers/api_fuzzer_corpus/7efac665d3dabc2162f4407e3bedbd65b3007335 new file mode 100644 index 0000000000000000000000000000000000000000..aa8d8c29ad36be0de46341bcab4a6a849fb4c585 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/7efac665d3dabc2162f4407e3bedbd65b3007335 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/7fe7a6ab57422c40c7e0e2333c3bbb6ae6a0d9a3 b/test/core/end2end/fuzzers/api_fuzzer_corpus/7fe7a6ab57422c40c7e0e2333c3bbb6ae6a0d9a3 new file mode 100644 index 0000000000000000000000000000000000000000..00ff25ac97dab93d2fe50f2b0e412ea7034ed66c Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/7fe7a6ab57422c40c7e0e2333c3bbb6ae6a0d9a3 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/80ecd5087801e974eae7db730a496d2aca110648 b/test/core/end2end/fuzzers/api_fuzzer_corpus/80ecd5087801e974eae7db730a496d2aca110648 new file mode 100644 index 0000000000000000000000000000000000000000..0d16b9ed65afa05543ba431f41e0075313bb52b8 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/80ecd5087801e974eae7db730a496d2aca110648 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/81489a0c6a71c48e9f343cb5ff8e8b5693d5df19 b/test/core/end2end/fuzzers/api_fuzzer_corpus/81489a0c6a71c48e9f343cb5ff8e8b5693d5df19 new file mode 100644 index 0000000000000000000000000000000000000000..5fab90d8f92f6b0d52a7f2662d346c79f1f5d006 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/81489a0c6a71c48e9f343cb5ff8e8b5693d5df19 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/819cac3befd0d7b12ffd734c26df1cdf43c376a2 b/test/core/end2end/fuzzers/api_fuzzer_corpus/819cac3befd0d7b12ffd734c26df1cdf43c376a2 new file mode 100644 index 0000000000000000000000000000000000000000..01c04453dcbf0db03e05e4f16023cc2520591f4b Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/819cac3befd0d7b12ffd734c26df1cdf43c376a2 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/81e64ec00272538edef6336423738277647b5ed0 b/test/core/end2end/fuzzers/api_fuzzer_corpus/81e64ec00272538edef6336423738277647b5ed0 new file mode 100644 index 0000000000000000000000000000000000000000..69dd622098b8efc9550282b827a05db4703689aa Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/81e64ec00272538edef6336423738277647b5ed0 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/82182d7a9c73a70f5eec58c03b1db511d7feb95d b/test/core/end2end/fuzzers/api_fuzzer_corpus/82182d7a9c73a70f5eec58c03b1db511d7feb95d new file mode 100644 index 0000000000000000000000000000000000000000..6b61294ed577ef31eb360073436ca8c0be67798f Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/82182d7a9c73a70f5eec58c03b1db511d7feb95d differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/839b0cad1196be563cec8e8a55184fc001b8401a b/test/core/end2end/fuzzers/api_fuzzer_corpus/839b0cad1196be563cec8e8a55184fc001b8401a new file mode 100644 index 0000000000000000000000000000000000000000..3b711c326f2242ec24fb8c0bce15dd50839684ff Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/839b0cad1196be563cec8e8a55184fc001b8401a differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/840928fe62714fdb003b3f0a40c2c4897f9d7938 b/test/core/end2end/fuzzers/api_fuzzer_corpus/840928fe62714fdb003b3f0a40c2c4897f9d7938 new file mode 100644 index 0000000000000000000000000000000000000000..95181776201acac7b1966f9a3ffd373e2986b40c Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/840928fe62714fdb003b3f0a40c2c4897f9d7938 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/84650393df0dca7ca3244faa7ac036873d3dcce1 b/test/core/end2end/fuzzers/api_fuzzer_corpus/84650393df0dca7ca3244faa7ac036873d3dcce1 new file mode 100644 index 0000000000000000000000000000000000000000..6ac2f601646bedec834e700bbca1d1bc9a213f11 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/84650393df0dca7ca3244faa7ac036873d3dcce1 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/85bd45792a3cf2116fab5e99e2d824ee804af843 b/test/core/end2end/fuzzers/api_fuzzer_corpus/85bd45792a3cf2116fab5e99e2d824ee804af843 new file mode 100644 index 0000000000000000000000000000000000000000..eec85e626cc1bf58173cd1bb482112c38e8b93a9 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/85bd45792a3cf2116fab5e99e2d824ee804af843 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/875280c0c54d1662b07150e728f9ac0c1af7bf66 b/test/core/end2end/fuzzers/api_fuzzer_corpus/875280c0c54d1662b07150e728f9ac0c1af7bf66 new file mode 100644 index 0000000000000000000000000000000000000000..76a53d10c64f9acfcaffac301d16e110fdb92d8a Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/875280c0c54d1662b07150e728f9ac0c1af7bf66 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/87e510c4dd906ec4de0066e93b2475480fc0768b b/test/core/end2end/fuzzers/api_fuzzer_corpus/87e510c4dd906ec4de0066e93b2475480fc0768b new file mode 100644 index 0000000000000000000000000000000000000000..cdc769a5554d1840848b47d66673309b682dda21 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/87e510c4dd906ec4de0066e93b2475480fc0768b differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/88139a0d01f144556ef861af4450f466081443f5 b/test/core/end2end/fuzzers/api_fuzzer_corpus/88139a0d01f144556ef861af4450f466081443f5 new file mode 100644 index 0000000000000000000000000000000000000000..7b242bdc3d28c9510fb0220f04746a102c4c3f71 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/88139a0d01f144556ef861af4450f466081443f5 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/8854a331f3c5ddc4ace70e0505901e53aa48e386 b/test/core/end2end/fuzzers/api_fuzzer_corpus/8854a331f3c5ddc4ace70e0505901e53aa48e386 new file mode 100644 index 0000000000000000000000000000000000000000..feba4eb243d6abaa11b2323fd9a4c3d5fe2ef980 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/8854a331f3c5ddc4ace70e0505901e53aa48e386 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/88600f27cb602db290f07eb0e8b6f10488c0760f b/test/core/end2end/fuzzers/api_fuzzer_corpus/88600f27cb602db290f07eb0e8b6f10488c0760f new file mode 100644 index 0000000000000000000000000000000000000000..56be62d99d9c71cd33530cf3fb9ac42f510e4619 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/88600f27cb602db290f07eb0e8b6f10488c0760f differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/8979c4017b72b970dc33095be26788f52f37a959 b/test/core/end2end/fuzzers/api_fuzzer_corpus/8979c4017b72b970dc33095be26788f52f37a959 new file mode 100644 index 0000000000000000000000000000000000000000..64fd265412d7abf16b10a6f6f71bea771ed992a2 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/8979c4017b72b970dc33095be26788f52f37a959 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/8a4183e6bb75036228a42039d678fca0ea6751b7 b/test/core/end2end/fuzzers/api_fuzzer_corpus/8a4183e6bb75036228a42039d678fca0ea6751b7 new file mode 100644 index 0000000000000000000000000000000000000000..47d943f96b2c21d162aaa7ab727cf0208e7e2f83 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/8a4183e6bb75036228a42039d678fca0ea6751b7 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/8aaa277cf855a972c6dec9fc49b171ce3232a26a b/test/core/end2end/fuzzers/api_fuzzer_corpus/8aaa277cf855a972c6dec9fc49b171ce3232a26a new file mode 100644 index 0000000000000000000000000000000000000000..38a319b53de793c311d0f87162d7f0fc67b550fd Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/8aaa277cf855a972c6dec9fc49b171ce3232a26a differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/8ab19633328ea9e493dee313e135e7d851aa7911 b/test/core/end2end/fuzzers/api_fuzzer_corpus/8ab19633328ea9e493dee313e135e7d851aa7911 new file mode 100644 index 0000000000000000000000000000000000000000..24b8e2d83134858f4f0c7e8a8407da765fd63bb3 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/8ab19633328ea9e493dee313e135e7d851aa7911 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/8b30c1f058ac421b6c51c4591ef9e4adc2886b44 b/test/core/end2end/fuzzers/api_fuzzer_corpus/8b30c1f058ac421b6c51c4591ef9e4adc2886b44 new file mode 100644 index 0000000000000000000000000000000000000000..ca577c4ccdb0f80fb8a721e19a26148de9305d2b Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/8b30c1f058ac421b6c51c4591ef9e4adc2886b44 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/8b37ce939cb8d42c459f5e286de980c7b62f14be b/test/core/end2end/fuzzers/api_fuzzer_corpus/8b37ce939cb8d42c459f5e286de980c7b62f14be new file mode 100644 index 0000000000000000000000000000000000000000..cf06afd6624f47c78ff8f38c666d827bd0e36d88 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/8b37ce939cb8d42c459f5e286de980c7b62f14be differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/8ba87aeecf944e0eb387f8f2d9e30964c9f860de b/test/core/end2end/fuzzers/api_fuzzer_corpus/8ba87aeecf944e0eb387f8f2d9e30964c9f860de new file mode 100644 index 0000000000000000000000000000000000000000..cd7f1ec10d0acf9ecafcd2dbf3baa0b8380e035c Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/8ba87aeecf944e0eb387f8f2d9e30964c9f860de differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/8bd94413e2d60effc2806dd7153216a1b6487162 b/test/core/end2end/fuzzers/api_fuzzer_corpus/8bd94413e2d60effc2806dd7153216a1b6487162 new file mode 100644 index 0000000000000000000000000000000000000000..9e1266445ea6152340ad1ac7121f1bbda1024182 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/8bd94413e2d60effc2806dd7153216a1b6487162 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/8c395b9251d60823ef14014f6ad58b29968a1681 b/test/core/end2end/fuzzers/api_fuzzer_corpus/8c395b9251d60823ef14014f6ad58b29968a1681 new file mode 100644 index 0000000000000000000000000000000000000000..6eae9d838f98c8b9a67f47d78494b3e4bd03909d Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/8c395b9251d60823ef14014f6ad58b29968a1681 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/8c540353717db453eeb865e5b9b7f2efe6c5d5b7 b/test/core/end2end/fuzzers/api_fuzzer_corpus/8c540353717db453eeb865e5b9b7f2efe6c5d5b7 new file mode 100644 index 0000000000000000000000000000000000000000..1f97037ce04fb6dc670d80fce813207ae85d5e76 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/8c540353717db453eeb865e5b9b7f2efe6c5d5b7 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/8d386a409662ef68370c0c552742bd0ea6d527d5 b/test/core/end2end/fuzzers/api_fuzzer_corpus/8d386a409662ef68370c0c552742bd0ea6d527d5 new file mode 100644 index 0000000000000000000000000000000000000000..e987d01d8837519ab9436ad1522af658616baf51 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/8d386a409662ef68370c0c552742bd0ea6d527d5 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/8d91dd322c7972a13cb98461b0eb284116905887 b/test/core/end2end/fuzzers/api_fuzzer_corpus/8d91dd322c7972a13cb98461b0eb284116905887 new file mode 100644 index 0000000000000000000000000000000000000000..41a1408a4d8e1519f5c41961b3937182e25c4616 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/8d91dd322c7972a13cb98461b0eb284116905887 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/8dab1d2d4f470c669688103f52718a7783113cf1 b/test/core/end2end/fuzzers/api_fuzzer_corpus/8dab1d2d4f470c669688103f52718a7783113cf1 new file mode 100644 index 0000000000000000000000000000000000000000..6a75add5640e784a0aaa35c540a2a7bbac57bdbd Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/8dab1d2d4f470c669688103f52718a7783113cf1 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/8dcb4dd3d2fa04ffc83f7fd7f9306ae4105ef7ef b/test/core/end2end/fuzzers/api_fuzzer_corpus/8dcb4dd3d2fa04ffc83f7fd7f9306ae4105ef7ef new file mode 100644 index 0000000000000000000000000000000000000000..50155517b455262f4209a2089d8f15de92983251 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/8dcb4dd3d2fa04ffc83f7fd7f9306ae4105ef7ef differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/8ebddbd256887fb5fe1be69a46023b34f815d2e8 b/test/core/end2end/fuzzers/api_fuzzer_corpus/8ebddbd256887fb5fe1be69a46023b34f815d2e8 new file mode 100644 index 0000000000000000000000000000000000000000..fd167a566e537ba83c19deb40f6ba255ff80b169 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/8ebddbd256887fb5fe1be69a46023b34f815d2e8 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/8edad87970b31dad2b23184d864fe5ad9efb05e5 b/test/core/end2end/fuzzers/api_fuzzer_corpus/8edad87970b31dad2b23184d864fe5ad9efb05e5 new file mode 100644 index 0000000000000000000000000000000000000000..06337c51162efc15562982357303a2f8494a27d0 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/8edad87970b31dad2b23184d864fe5ad9efb05e5 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/8f4187ea7f2efbcd933fdb2b0652b71ecaff7822 b/test/core/end2end/fuzzers/api_fuzzer_corpus/8f4187ea7f2efbcd933fdb2b0652b71ecaff7822 new file mode 100644 index 0000000000000000000000000000000000000000..66c4cbf6d305a90da599dd19580ff0ab7167e29d Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/8f4187ea7f2efbcd933fdb2b0652b71ecaff7822 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/9080684608701e015c764f643dc45fa939d86ed3 b/test/core/end2end/fuzzers/api_fuzzer_corpus/9080684608701e015c764f643dc45fa939d86ed3 new file mode 100644 index 0000000000000000000000000000000000000000..29b8e4a430ddfcd7649441e6c2a97ddde75b0b06 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/9080684608701e015c764f643dc45fa939d86ed3 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/92d44998655e82d89a614c7b6a2f08c5fc7f8805 b/test/core/end2end/fuzzers/api_fuzzer_corpus/92d44998655e82d89a614c7b6a2f08c5fc7f8805 new file mode 100644 index 0000000000000000000000000000000000000000..a4f0ce87ea7c0a1ee6032cd41a335fdbefdadac4 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/92d44998655e82d89a614c7b6a2f08c5fc7f8805 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/92ec3b6722dde442121b3d1ed3ef23976c72cba8 b/test/core/end2end/fuzzers/api_fuzzer_corpus/92ec3b6722dde442121b3d1ed3ef23976c72cba8 new file mode 100644 index 0000000000000000000000000000000000000000..08e2196ccac71ba486d27c3205c025a04b7a959b Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/92ec3b6722dde442121b3d1ed3ef23976c72cba8 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/940a622e8995529f6b0455906d8a035902682d2d b/test/core/end2end/fuzzers/api_fuzzer_corpus/940a622e8995529f6b0455906d8a035902682d2d new file mode 100644 index 0000000000000000000000000000000000000000..39dbccf0b482aa270270ba99ef5cc70f33758767 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/940a622e8995529f6b0455906d8a035902682d2d differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/940e35bed3ff2b52a29e5b15acf9fe39772eb5de b/test/core/end2end/fuzzers/api_fuzzer_corpus/940e35bed3ff2b52a29e5b15acf9fe39772eb5de new file mode 100644 index 0000000000000000000000000000000000000000..3a7c9abc9a53549f806cad1167a7c37824146963 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/940e35bed3ff2b52a29e5b15acf9fe39772eb5de differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/94571a4b13c435117ef9bd914443ce9a07da8e3f b/test/core/end2end/fuzzers/api_fuzzer_corpus/94571a4b13c435117ef9bd914443ce9a07da8e3f new file mode 100644 index 0000000000000000000000000000000000000000..87cf504b4ea923b43391d694cd21013e275e6520 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/94571a4b13c435117ef9bd914443ce9a07da8e3f differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/95940316e7104e9c2d5123b31e36b2dfd12fcea2 b/test/core/end2end/fuzzers/api_fuzzer_corpus/95940316e7104e9c2d5123b31e36b2dfd12fcea2 new file mode 100644 index 0000000000000000000000000000000000000000..380dc5e9a18ff280bdc62a61a17a7936a6a6ea5d Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/95940316e7104e9c2d5123b31e36b2dfd12fcea2 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/95dd85860bde08e1d0ecef805ad55f66008923af b/test/core/end2end/fuzzers/api_fuzzer_corpus/95dd85860bde08e1d0ecef805ad55f66008923af new file mode 100644 index 0000000000000000000000000000000000000000..f04672b5a19542fba8ef7c5e04dda9c4242174ac Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/95dd85860bde08e1d0ecef805ad55f66008923af differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/95f223f8964d294aafc2a6041a83cfa7761c31ab b/test/core/end2end/fuzzers/api_fuzzer_corpus/95f223f8964d294aafc2a6041a83cfa7761c31ab new file mode 100644 index 0000000000000000000000000000000000000000..3752f876d1611474a94fcc6fc6187cb0705ca2bf Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/95f223f8964d294aafc2a6041a83cfa7761c31ab differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/9629c00d91e6146b29f7559a944e6bf8dce7d0f1 b/test/core/end2end/fuzzers/api_fuzzer_corpus/9629c00d91e6146b29f7559a944e6bf8dce7d0f1 new file mode 100644 index 0000000000000000000000000000000000000000..ddec41102eaf7c689a598ef7f2b996c24d3fd581 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/9629c00d91e6146b29f7559a944e6bf8dce7d0f1 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/96a6293d4fc97c75f037bdb0f73dc5b62bbfa2e6 b/test/core/end2end/fuzzers/api_fuzzer_corpus/96a6293d4fc97c75f037bdb0f73dc5b62bbfa2e6 new file mode 100644 index 0000000000000000000000000000000000000000..5e370d390bdf5c4808a376e71e5a68afe7fb76a0 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/96a6293d4fc97c75f037bdb0f73dc5b62bbfa2e6 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/97011f865fcf9c57560d5ed3cb05883ff298ee35 b/test/core/end2end/fuzzers/api_fuzzer_corpus/97011f865fcf9c57560d5ed3cb05883ff298ee35 new file mode 100644 index 0000000000000000000000000000000000000000..fff509785cbaf85b4693fa62d6f2047e62d2d3e6 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/97011f865fcf9c57560d5ed3cb05883ff298ee35 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/97440beca022cd5799f76654d8bec51f62c0bbaf b/test/core/end2end/fuzzers/api_fuzzer_corpus/97440beca022cd5799f76654d8bec51f62c0bbaf new file mode 100644 index 0000000000000000000000000000000000000000..15c9411f405a381864db60e851d3f3b7c3e1bf2a Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/97440beca022cd5799f76654d8bec51f62c0bbaf differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/976613cb09127a752d628c4a3cf73b8e3168e0af b/test/core/end2end/fuzzers/api_fuzzer_corpus/976613cb09127a752d628c4a3cf73b8e3168e0af new file mode 100644 index 0000000000000000000000000000000000000000..a35a8db30629465e8136a16a2825f71b6fcefb57 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/976613cb09127a752d628c4a3cf73b8e3168e0af differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/97817475213736527fdc3b2a28cd45f52fe4ce1a b/test/core/end2end/fuzzers/api_fuzzer_corpus/97817475213736527fdc3b2a28cd45f52fe4ce1a new file mode 100644 index 0000000000000000000000000000000000000000..23a75843a7a720af2742dc5ac5cbbdd73f236a8f Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/97817475213736527fdc3b2a28cd45f52fe4ce1a differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/97efcb1f37032ebf01b4b1065a9df66590b7051f b/test/core/end2end/fuzzers/api_fuzzer_corpus/97efcb1f37032ebf01b4b1065a9df66590b7051f new file mode 100644 index 0000000000000000000000000000000000000000..d76ab526f85f8a68e3e49148a4e50fd3d9b4d51c Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/97efcb1f37032ebf01b4b1065a9df66590b7051f differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/980f0198dc66e867b1a5d04cf24bc02fbdf3b839 b/test/core/end2end/fuzzers/api_fuzzer_corpus/980f0198dc66e867b1a5d04cf24bc02fbdf3b839 new file mode 100644 index 0000000000000000000000000000000000000000..4782ad998b4dc4a876dc936e016bf53a44cebb02 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/980f0198dc66e867b1a5d04cf24bc02fbdf3b839 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/98569dc166bfcfef45a66db4de1c0f34340c269c b/test/core/end2end/fuzzers/api_fuzzer_corpus/98569dc166bfcfef45a66db4de1c0f34340c269c new file mode 100644 index 0000000000000000000000000000000000000000..51fa3658397fb6077698cfeca83ae4d452065936 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/98569dc166bfcfef45a66db4de1c0f34340c269c differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/988bd333d5dabe1561cf4429e7481ff110be0da4 b/test/core/end2end/fuzzers/api_fuzzer_corpus/988bd333d5dabe1561cf4429e7481ff110be0da4 new file mode 100644 index 0000000000000000000000000000000000000000..948abb17f71514b32b36d6ebb01b2f1fe77fd7e9 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/988bd333d5dabe1561cf4429e7481ff110be0da4 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/98cdb5ba5725c6b2ed39fc514401fe987fc2d9af b/test/core/end2end/fuzzers/api_fuzzer_corpus/98cdb5ba5725c6b2ed39fc514401fe987fc2d9af new file mode 100644 index 0000000000000000000000000000000000000000..c858baeb6b7cc55928736ce93c1250e5794c5b86 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/98cdb5ba5725c6b2ed39fc514401fe987fc2d9af differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/9989534524a212092e9d7fede16106b586c434f4 b/test/core/end2end/fuzzers/api_fuzzer_corpus/9989534524a212092e9d7fede16106b586c434f4 new file mode 100644 index 0000000000000000000000000000000000000000..f38f1bcdce9c49bdf2da31bb9df3673f858b95ab Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/9989534524a212092e9d7fede16106b586c434f4 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/999737edf1e9740df084c4326ec983137ccd7111 b/test/core/end2end/fuzzers/api_fuzzer_corpus/999737edf1e9740df084c4326ec983137ccd7111 new file mode 100644 index 0000000000000000000000000000000000000000..38c83818226d6ba0fc9cef1bc6ca8898adcdebbb Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/999737edf1e9740df084c4326ec983137ccd7111 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/99e8f2ea80ed1d5a78fd5236e89d404bb0c03940 b/test/core/end2end/fuzzers/api_fuzzer_corpus/99e8f2ea80ed1d5a78fd5236e89d404bb0c03940 new file mode 100644 index 0000000000000000000000000000000000000000..7eb66b527e5fa63f3b74221c623f84fabfd01573 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/99e8f2ea80ed1d5a78fd5236e89d404bb0c03940 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/9a0f0818ff9fbfd81e0d0eadeef7b85ca2d4fd46 b/test/core/end2end/fuzzers/api_fuzzer_corpus/9a0f0818ff9fbfd81e0d0eadeef7b85ca2d4fd46 new file mode 100644 index 0000000000000000000000000000000000000000..98ff8433429fe808f3d4be0b054469fde0482fac Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/9a0f0818ff9fbfd81e0d0eadeef7b85ca2d4fd46 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/9a9af9f266737f95cfedbf5c8fcea22660c3f085 b/test/core/end2end/fuzzers/api_fuzzer_corpus/9a9af9f266737f95cfedbf5c8fcea22660c3f085 new file mode 100644 index 0000000000000000000000000000000000000000..40bd95cf19edd21676a95c96cbf0f989dbc8bd15 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/9a9af9f266737f95cfedbf5c8fcea22660c3f085 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/9ab3be55bd49749439f7aa1bfe2d178ad663b003 b/test/core/end2end/fuzzers/api_fuzzer_corpus/9ab3be55bd49749439f7aa1bfe2d178ad663b003 new file mode 100644 index 0000000000000000000000000000000000000000..d5e4ff6d9ccad1f4119232d5faeeb3fbc4da4ed6 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/9ab3be55bd49749439f7aa1bfe2d178ad663b003 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/9addda4c7a9940fbbda2218ec58560c10e1df9f7 b/test/core/end2end/fuzzers/api_fuzzer_corpus/9addda4c7a9940fbbda2218ec58560c10e1df9f7 new file mode 100644 index 0000000000000000000000000000000000000000..0a6e7511a6268e4c3636a6c0a40a297163e6d177 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/9addda4c7a9940fbbda2218ec58560c10e1df9f7 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/9b5b436057dfcf4299e52ad49c74e45ef04be7a2 b/test/core/end2end/fuzzers/api_fuzzer_corpus/9b5b436057dfcf4299e52ad49c74e45ef04be7a2 new file mode 100644 index 0000000000000000000000000000000000000000..07c01de2dabb090f5a61d7746df8b9a556741a49 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/9b5b436057dfcf4299e52ad49c74e45ef04be7a2 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/9cb91ce75745cc30995b8985a35ea31db766e54c b/test/core/end2end/fuzzers/api_fuzzer_corpus/9cb91ce75745cc30995b8985a35ea31db766e54c new file mode 100644 index 0000000000000000000000000000000000000000..9c6f308a63b6f52c4bcff48b1e54270d9bd0771f Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/9cb91ce75745cc30995b8985a35ea31db766e54c differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/9d004fd9a35647ba7ec169e6fedbf9dce5f9623f b/test/core/end2end/fuzzers/api_fuzzer_corpus/9d004fd9a35647ba7ec169e6fedbf9dce5f9623f new file mode 100644 index 0000000000000000000000000000000000000000..e67ab1d606a2ad36eb1543fe3dc1528fa6edddd4 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/9d004fd9a35647ba7ec169e6fedbf9dce5f9623f differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/9d69b6fb15c861c294878da8aaf16a531dfb1b70 b/test/core/end2end/fuzzers/api_fuzzer_corpus/9d69b6fb15c861c294878da8aaf16a531dfb1b70 new file mode 100644 index 0000000000000000000000000000000000000000..e7dac59a90fabe65b3d0bc1f641b1d72d7cf0e8b Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/9d69b6fb15c861c294878da8aaf16a531dfb1b70 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/9d74922516d210da71d40395f17a3cef4161894d b/test/core/end2end/fuzzers/api_fuzzer_corpus/9d74922516d210da71d40395f17a3cef4161894d new file mode 100644 index 0000000000000000000000000000000000000000..5496b7d8d5eb4a749cb5914dc194502760c29861 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/9d74922516d210da71d40395f17a3cef4161894d differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/9dd25a6857d92ef52169ec95a0cdfbc8570b6d99 b/test/core/end2end/fuzzers/api_fuzzer_corpus/9dd25a6857d92ef52169ec95a0cdfbc8570b6d99 new file mode 100644 index 0000000000000000000000000000000000000000..cd272b92dc5baff5f6f89088c0426e9a6f1f8540 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/9dd25a6857d92ef52169ec95a0cdfbc8570b6d99 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/9e48b3aa2c25dbbab21148bdac91b5169ce088bf b/test/core/end2end/fuzzers/api_fuzzer_corpus/9e48b3aa2c25dbbab21148bdac91b5169ce088bf new file mode 100644 index 0000000000000000000000000000000000000000..b7dec16823c4ba6f4688dc11b0f1092ffa6f955e Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/9e48b3aa2c25dbbab21148bdac91b5169ce088bf differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/9f00c8665f3918e666d424ee67a2556f2651d64f b/test/core/end2end/fuzzers/api_fuzzer_corpus/9f00c8665f3918e666d424ee67a2556f2651d64f new file mode 100644 index 0000000000000000000000000000000000000000..2b0bef7e668d02a222062072f088e989318d85d9 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/9f00c8665f3918e666d424ee67a2556f2651d64f differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/9f43969c0777a021539b59eafdac9dd2f51422d5 b/test/core/end2end/fuzzers/api_fuzzer_corpus/9f43969c0777a021539b59eafdac9dd2f51422d5 new file mode 100644 index 0000000000000000000000000000000000000000..e059802e586f49c31a810762af591af75800243d Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/9f43969c0777a021539b59eafdac9dd2f51422d5 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/9f643e51d8e91e7e0348017d98078f078a1790b9 b/test/core/end2end/fuzzers/api_fuzzer_corpus/9f643e51d8e91e7e0348017d98078f078a1790b9 new file mode 100644 index 0000000000000000000000000000000000000000..410ba75204d67418e3449df9c01b5ce0a885550c Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/9f643e51d8e91e7e0348017d98078f078a1790b9 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/9f86fc902ca36482d09f6c11e821b79bfc0b98cc b/test/core/end2end/fuzzers/api_fuzzer_corpus/9f86fc902ca36482d09f6c11e821b79bfc0b98cc new file mode 100644 index 0000000000000000000000000000000000000000..36a2080e15e83014b3f291c78f9a3fcad6f31faa Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/9f86fc902ca36482d09f6c11e821b79bfc0b98cc differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/a0e80579e201495c2337292a3508b2d220e9737a b/test/core/end2end/fuzzers/api_fuzzer_corpus/a0e80579e201495c2337292a3508b2d220e9737a new file mode 100644 index 0000000000000000000000000000000000000000..296cee354c319bf9bab969cb53e4b93a72e49e0c Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/a0e80579e201495c2337292a3508b2d220e9737a differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/a18ed3861270cd42a661211d9d970c488fed46ad b/test/core/end2end/fuzzers/api_fuzzer_corpus/a18ed3861270cd42a661211d9d970c488fed46ad new file mode 100644 index 0000000000000000000000000000000000000000..4b765b45e4c622f3ce1c845288a9aa503eb44d4e Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/a18ed3861270cd42a661211d9d970c488fed46ad differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/a1f6961a480f1eb49b394118b05b9cdabfb6f0a3 b/test/core/end2end/fuzzers/api_fuzzer_corpus/a1f6961a480f1eb49b394118b05b9cdabfb6f0a3 new file mode 100644 index 0000000000000000000000000000000000000000..4576144584589df1adac9b7b7a18244adfc7bc9f Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/a1f6961a480f1eb49b394118b05b9cdabfb6f0a3 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/a36a156c5ed8a55aec450393deaed66c0e9117c9 b/test/core/end2end/fuzzers/api_fuzzer_corpus/a36a156c5ed8a55aec450393deaed66c0e9117c9 new file mode 100644 index 0000000000000000000000000000000000000000..cf7b2b67d39f1739c37786a64ed9b3258998ec71 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/a36a156c5ed8a55aec450393deaed66c0e9117c9 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/a380f7e56171dc69269afb6364216bc69925eb8a b/test/core/end2end/fuzzers/api_fuzzer_corpus/a380f7e56171dc69269afb6364216bc69925eb8a new file mode 100644 index 0000000000000000000000000000000000000000..048036e83db0083bb567ce67d4270576acbc892f Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/a380f7e56171dc69269afb6364216bc69925eb8a differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/a3926a25374714a71c8bd515564d294df229c7cf b/test/core/end2end/fuzzers/api_fuzzer_corpus/a3926a25374714a71c8bd515564d294df229c7cf new file mode 100644 index 0000000000000000000000000000000000000000..b13e050f8da55842b91248765f42a78d41058937 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/a3926a25374714a71c8bd515564d294df229c7cf differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/a3d52dfd05da328d3f109d125e6c1a15470eab06 b/test/core/end2end/fuzzers/api_fuzzer_corpus/a3d52dfd05da328d3f109d125e6c1a15470eab06 new file mode 100644 index 0000000000000000000000000000000000000000..d9bc8d8ea347aea44be1c0aa798672bbbb2f61ea Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/a3d52dfd05da328d3f109d125e6c1a15470eab06 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/a41e8b175a837b55e540874c3f056a9d9535866c b/test/core/end2end/fuzzers/api_fuzzer_corpus/a41e8b175a837b55e540874c3f056a9d9535866c new file mode 100644 index 0000000000000000000000000000000000000000..b472beb409ed89411ae40cd76a05e45be4374886 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/a41e8b175a837b55e540874c3f056a9d9535866c differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/a4d41bf7bce38a255a431912f6b57637645221e8 b/test/core/end2end/fuzzers/api_fuzzer_corpus/a4d41bf7bce38a255a431912f6b57637645221e8 new file mode 100644 index 0000000000000000000000000000000000000000..b39f02dd631f5e01af900b6967aaafc28c4ddab3 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/a4d41bf7bce38a255a431912f6b57637645221e8 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/a619bb6ff4871fab3045e46bef8036f80d605f37 b/test/core/end2end/fuzzers/api_fuzzer_corpus/a619bb6ff4871fab3045e46bef8036f80d605f37 new file mode 100644 index 0000000000000000000000000000000000000000..3054cdb955310fc8a3862b8eb688591652757c59 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/a619bb6ff4871fab3045e46bef8036f80d605f37 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/a62960425c597cf5d2bd38e9412363991479837f b/test/core/end2end/fuzzers/api_fuzzer_corpus/a62960425c597cf5d2bd38e9412363991479837f new file mode 100644 index 0000000000000000000000000000000000000000..109cf0417179fae58254ead78aa7c013b0399490 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/a62960425c597cf5d2bd38e9412363991479837f differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/a64136997cd4c4be7d93f10fd6a1d12cdc22691c b/test/core/end2end/fuzzers/api_fuzzer_corpus/a64136997cd4c4be7d93f10fd6a1d12cdc22691c new file mode 100644 index 0000000000000000000000000000000000000000..145b9620911dd6b39ceb2486a5fbd623428fd13a Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/a64136997cd4c4be7d93f10fd6a1d12cdc22691c differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/a6541e0f317553947d53cfb9318367aff2898ad5 b/test/core/end2end/fuzzers/api_fuzzer_corpus/a6541e0f317553947d53cfb9318367aff2898ad5 new file mode 100644 index 0000000000000000000000000000000000000000..7893d7132047b47d4bc38dc386644d871592dc60 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/a6541e0f317553947d53cfb9318367aff2898ad5 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/a8115b0be87517139447c9fefc33e225f2efdf32 b/test/core/end2end/fuzzers/api_fuzzer_corpus/a8115b0be87517139447c9fefc33e225f2efdf32 new file mode 100644 index 0000000000000000000000000000000000000000..010d0c4b1bee9d78eeb2e7b2dd231172a2683e86 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/a8115b0be87517139447c9fefc33e225f2efdf32 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/aa6e8ab6cab71f0d7fe316a19c47fbeba5351315 b/test/core/end2end/fuzzers/api_fuzzer_corpus/aa6e8ab6cab71f0d7fe316a19c47fbeba5351315 new file mode 100644 index 0000000000000000000000000000000000000000..39a8d85ff36e1844be0ed7c3da2f8ee64008a67f Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/aa6e8ab6cab71f0d7fe316a19c47fbeba5351315 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/abaca8e8237d5add7e35752471688233d265efc2 b/test/core/end2end/fuzzers/api_fuzzer_corpus/abaca8e8237d5add7e35752471688233d265efc2 new file mode 100644 index 0000000000000000000000000000000000000000..fbfa420b6b7659814ec3a98edc9ae6b56f1d376c Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/abaca8e8237d5add7e35752471688233d265efc2 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/abbd9f85ad500d55dda6009681ddffca1849b632 b/test/core/end2end/fuzzers/api_fuzzer_corpus/abbd9f85ad500d55dda6009681ddffca1849b632 new file mode 100644 index 0000000000000000000000000000000000000000..0cec8e8b708fb0bdc9a05c576c9fdeb18f31aea4 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/abbd9f85ad500d55dda6009681ddffca1849b632 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/abcfa029d3eb7c016a162e78e7351f64b9905a42 b/test/core/end2end/fuzzers/api_fuzzer_corpus/abcfa029d3eb7c016a162e78e7351f64b9905a42 new file mode 100644 index 0000000000000000000000000000000000000000..6f8f8fb3325280819ca27d5226d79c0311c6813e Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/abcfa029d3eb7c016a162e78e7351f64b9905a42 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/abdb7891569085e3df0f6c7a5348c12bf3dd1ae0 b/test/core/end2end/fuzzers/api_fuzzer_corpus/abdb7891569085e3df0f6c7a5348c12bf3dd1ae0 new file mode 100644 index 0000000000000000000000000000000000000000..09803b597609ba99424d7dcde73149c723fe8aea Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/abdb7891569085e3df0f6c7a5348c12bf3dd1ae0 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/ad6369d2c51c4787778ff9dbd86cc6df44312f1d b/test/core/end2end/fuzzers/api_fuzzer_corpus/ad6369d2c51c4787778ff9dbd86cc6df44312f1d new file mode 100644 index 0000000000000000000000000000000000000000..2b28c6860453bc55f728135dc03749694fbc5092 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/ad6369d2c51c4787778ff9dbd86cc6df44312f1d differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/ada998a4b5a9895f514ddbf8da775f5c59736021 b/test/core/end2end/fuzzers/api_fuzzer_corpus/ada998a4b5a9895f514ddbf8da775f5c59736021 new file mode 100644 index 0000000000000000000000000000000000000000..287ac9bc0759b7690505f64594114a8c850b6e48 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/ada998a4b5a9895f514ddbf8da775f5c59736021 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/af1fbe820d92608782360791113393055c171da0 b/test/core/end2end/fuzzers/api_fuzzer_corpus/af1fbe820d92608782360791113393055c171da0 new file mode 100644 index 0000000000000000000000000000000000000000..ba0b35418d51454e8a2644b4bc11c73d269423bc Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/af1fbe820d92608782360791113393055c171da0 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/af990e5c81c307c188a79f4cdfdae4e8e15dc4a2 b/test/core/end2end/fuzzers/api_fuzzer_corpus/af990e5c81c307c188a79f4cdfdae4e8e15dc4a2 new file mode 100644 index 0000000000000000000000000000000000000000..1f41e50fe66176f1913d6e8bdc2602b9067726e1 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/af990e5c81c307c188a79f4cdfdae4e8e15dc4a2 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/aff1fdfe79c104bce110cec92e1e021caf012fde b/test/core/end2end/fuzzers/api_fuzzer_corpus/aff1fdfe79c104bce110cec92e1e021caf012fde new file mode 100644 index 0000000000000000000000000000000000000000..23e87ea084834e9567eff657782893b7a51f8ec6 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/aff1fdfe79c104bce110cec92e1e021caf012fde differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/b2432248370f7590e894c54f2dd13fe9df9fa53e b/test/core/end2end/fuzzers/api_fuzzer_corpus/b2432248370f7590e894c54f2dd13fe9df9fa53e new file mode 100644 index 0000000000000000000000000000000000000000..304a27967d3305245bc6681febb5b3ba2c3a6ec9 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/b2432248370f7590e894c54f2dd13fe9df9fa53e differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/b262c677b8c46262f1fc4982f5abf4ef603abe1c b/test/core/end2end/fuzzers/api_fuzzer_corpus/b262c677b8c46262f1fc4982f5abf4ef603abe1c new file mode 100644 index 0000000000000000000000000000000000000000..b859d32d76420646a34a38b079d49f91d3ab8813 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/b262c677b8c46262f1fc4982f5abf4ef603abe1c differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/b2af0db70de3a6ddcb188d1f6f2a673133a8f9c7 b/test/core/end2end/fuzzers/api_fuzzer_corpus/b2af0db70de3a6ddcb188d1f6f2a673133a8f9c7 new file mode 100644 index 0000000000000000000000000000000000000000..e0421d757465cfa5a07746808dad81059d9237bb Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/b2af0db70de3a6ddcb188d1f6f2a673133a8f9c7 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/b2f450dc86671548200a1fe6ee0ee76171edc578 b/test/core/end2end/fuzzers/api_fuzzer_corpus/b2f450dc86671548200a1fe6ee0ee76171edc578 new file mode 100644 index 0000000000000000000000000000000000000000..69952817c173a578797da7e69c6198e5aa28da09 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/b2f450dc86671548200a1fe6ee0ee76171edc578 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/b35f51d95f597075bb93cd9d2135870fe0a73486 b/test/core/end2end/fuzzers/api_fuzzer_corpus/b35f51d95f597075bb93cd9d2135870fe0a73486 new file mode 100644 index 0000000000000000000000000000000000000000..7c7d787dce568b0715b2f842bb887d2efa7efef0 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/b35f51d95f597075bb93cd9d2135870fe0a73486 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/b37ab56aacf7fea7dcade26810117c45e6041068 b/test/core/end2end/fuzzers/api_fuzzer_corpus/b37ab56aacf7fea7dcade26810117c45e6041068 new file mode 100644 index 0000000000000000000000000000000000000000..af1bd2acb06299e126c7b4adc6f92a3864f3d265 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/b37ab56aacf7fea7dcade26810117c45e6041068 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/b5bec1a19e2ca2394f2c3235266c22a7167bfa5d b/test/core/end2end/fuzzers/api_fuzzer_corpus/b5bec1a19e2ca2394f2c3235266c22a7167bfa5d new file mode 100644 index 0000000000000000000000000000000000000000..ac5fd19164b30912efdf2e9fa4e695cb098a8445 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/b5bec1a19e2ca2394f2c3235266c22a7167bfa5d differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/b5dfbf1965f794634249cc6be9d20d2a9fc6e332 b/test/core/end2end/fuzzers/api_fuzzer_corpus/b5dfbf1965f794634249cc6be9d20d2a9fc6e332 new file mode 100644 index 0000000000000000000000000000000000000000..9cd4033b013be04bd9f13ffd34808977d147e331 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/b5dfbf1965f794634249cc6be9d20d2a9fc6e332 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/b6694ec2d425e8ce6ad9ff712a999fabfa5ce113 b/test/core/end2end/fuzzers/api_fuzzer_corpus/b6694ec2d425e8ce6ad9ff712a999fabfa5ce113 new file mode 100644 index 0000000000000000000000000000000000000000..b28d3708a5c36b11b51fa7421b79c1279f39e71f Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/b6694ec2d425e8ce6ad9ff712a999fabfa5ce113 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/b6c47632d8d697f9f2923bde053f7a5571150705 b/test/core/end2end/fuzzers/api_fuzzer_corpus/b6c47632d8d697f9f2923bde053f7a5571150705 new file mode 100644 index 0000000000000000000000000000000000000000..e2db125e257f027b1851bf0b0faecd7cbf330c24 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/b6c47632d8d697f9f2923bde053f7a5571150705 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/b892c064b2703ac0dc31766946be487b197a541e b/test/core/end2end/fuzzers/api_fuzzer_corpus/b892c064b2703ac0dc31766946be487b197a541e new file mode 100644 index 0000000000000000000000000000000000000000..5404a0407c9d2893cb0d649b06f928a7a5d8f53e Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/b892c064b2703ac0dc31766946be487b197a541e differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/b8d0be707d9505c0e63253904979492c22cd9fdc b/test/core/end2end/fuzzers/api_fuzzer_corpus/b8d0be707d9505c0e63253904979492c22cd9fdc new file mode 100644 index 0000000000000000000000000000000000000000..6792e9e67ab300d8cb9bc013b7197d5e1306689b Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/b8d0be707d9505c0e63253904979492c22cd9fdc differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/b8e06536840e31a343b3a42b677d623bacfccd99 b/test/core/end2end/fuzzers/api_fuzzer_corpus/b8e06536840e31a343b3a42b677d623bacfccd99 new file mode 100644 index 0000000000000000000000000000000000000000..77a3b9e02c8db2db98fcf6f07c08ebe0067101a9 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/b8e06536840e31a343b3a42b677d623bacfccd99 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/b8ea2247c5b1636148fa66fdce22ed1cc72b6bdd b/test/core/end2end/fuzzers/api_fuzzer_corpus/b8ea2247c5b1636148fa66fdce22ed1cc72b6bdd new file mode 100644 index 0000000000000000000000000000000000000000..8a34fd2cac0f63ca146901a625eb01d40fd61b67 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/b8ea2247c5b1636148fa66fdce22ed1cc72b6bdd differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/b9318513eb6b1db553855cd062ebbd4d1db9b846 b/test/core/end2end/fuzzers/api_fuzzer_corpus/b9318513eb6b1db553855cd062ebbd4d1db9b846 new file mode 100644 index 0000000000000000000000000000000000000000..d3dfb9ab03826e13a19123f036815a97083c6d0d Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/b9318513eb6b1db553855cd062ebbd4d1db9b846 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/b95899d40afc4b3ff87af2285b61ba66939873fa b/test/core/end2end/fuzzers/api_fuzzer_corpus/b95899d40afc4b3ff87af2285b61ba66939873fa new file mode 100644 index 0000000000000000000000000000000000000000..26661992713205f3f34b4af4fb1fc430256e7072 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/b95899d40afc4b3ff87af2285b61ba66939873fa differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/b98ef7107754379c22a3ad59cffa3183e0804c0e b/test/core/end2end/fuzzers/api_fuzzer_corpus/b98ef7107754379c22a3ad59cffa3183e0804c0e new file mode 100644 index 0000000000000000000000000000000000000000..4bff61b679f736bc4164023eb36a569408f99144 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/b98ef7107754379c22a3ad59cffa3183e0804c0e differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/b9913b354096dbe1796814e2cea80addef6ee386 b/test/core/end2end/fuzzers/api_fuzzer_corpus/b9913b354096dbe1796814e2cea80addef6ee386 new file mode 100644 index 0000000000000000000000000000000000000000..2133d9d56f99d8fd6bedac2014bd3108eeaeecca Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/b9913b354096dbe1796814e2cea80addef6ee386 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/ba3d174125e7378292fcbad9bfe8129dabf88b3a b/test/core/end2end/fuzzers/api_fuzzer_corpus/ba3d174125e7378292fcbad9bfe8129dabf88b3a new file mode 100644 index 0000000000000000000000000000000000000000..8600bd5e7ec0f7c91853d3f1b78a75a5b765143c Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/ba3d174125e7378292fcbad9bfe8129dabf88b3a differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/baab31938837e1a3cb49ca12fb886fcbb7d48501 b/test/core/end2end/fuzzers/api_fuzzer_corpus/baab31938837e1a3cb49ca12fb886fcbb7d48501 new file mode 100644 index 0000000000000000000000000000000000000000..6c7b604c984c7e9bbdc4c0a041124a24164817c5 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/baab31938837e1a3cb49ca12fb886fcbb7d48501 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/bac43cd2ed1dbf3a89a0c66d8983b586066ef463 b/test/core/end2end/fuzzers/api_fuzzer_corpus/bac43cd2ed1dbf3a89a0c66d8983b586066ef463 new file mode 100644 index 0000000000000000000000000000000000000000..61feecdec321bae86a436be8619f9a61922f8a2a Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/bac43cd2ed1dbf3a89a0c66d8983b586066ef463 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/bb2affdc830241ebea35795fed3bc8d478330eec b/test/core/end2end/fuzzers/api_fuzzer_corpus/bb2affdc830241ebea35795fed3bc8d478330eec new file mode 100644 index 0000000000000000000000000000000000000000..c97b75e15c226121d1e9ab77972afda0f076fb44 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/bb2affdc830241ebea35795fed3bc8d478330eec differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/bb54fde05891ecc235263ad087cfd9682a25f76d b/test/core/end2end/fuzzers/api_fuzzer_corpus/bb54fde05891ecc235263ad087cfd9682a25f76d new file mode 100644 index 0000000000000000000000000000000000000000..7b31d324b9e8f04bf8bb68c51f106d964e561d4c Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/bb54fde05891ecc235263ad087cfd9682a25f76d differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/bba4073cde10ba7abaac18d6303e310d02a47826 b/test/core/end2end/fuzzers/api_fuzzer_corpus/bba4073cde10ba7abaac18d6303e310d02a47826 new file mode 100644 index 0000000000000000000000000000000000000000..e73c25b8810db073fdadcdeb95c1ce9599110d12 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/bba4073cde10ba7abaac18d6303e310d02a47826 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/bc2967ecf8402d442ef63ca451497431932a7e57 b/test/core/end2end/fuzzers/api_fuzzer_corpus/bc2967ecf8402d442ef63ca451497431932a7e57 new file mode 100644 index 0000000000000000000000000000000000000000..99ee098cd195a52a14fec5468e24d57593389a17 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/bc2967ecf8402d442ef63ca451497431932a7e57 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/bc8dd89f31fa5e89cabace6d7701d2a218f97aed b/test/core/end2end/fuzzers/api_fuzzer_corpus/bc8dd89f31fa5e89cabace6d7701d2a218f97aed new file mode 100644 index 0000000000000000000000000000000000000000..4c45a33d9f8f9b3c40c6514ff4eb8da28b97b362 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/bc8dd89f31fa5e89cabace6d7701d2a218f97aed differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/bd04c9dc7eaf030313d4c87f190a9d973b96ac2d b/test/core/end2end/fuzzers/api_fuzzer_corpus/bd04c9dc7eaf030313d4c87f190a9d973b96ac2d new file mode 100644 index 0000000000000000000000000000000000000000..d1d5a78678575e4b157cb3481d849a4e4b6f5d66 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/bd04c9dc7eaf030313d4c87f190a9d973b96ac2d differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/bd585e031f586c4313c6b00e5f247f6b272ce902 b/test/core/end2end/fuzzers/api_fuzzer_corpus/bd585e031f586c4313c6b00e5f247f6b272ce902 new file mode 100644 index 0000000000000000000000000000000000000000..5223bb06c1ea16c61142ced93d96809215a5dae4 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/bd585e031f586c4313c6b00e5f247f6b272ce902 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/bdab9cab03ad7aa611612e02775018112303d3cd b/test/core/end2end/fuzzers/api_fuzzer_corpus/bdab9cab03ad7aa611612e02775018112303d3cd new file mode 100644 index 0000000000000000000000000000000000000000..e5e20af6ebfbb27791b649b7e5c414c2b9020894 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/bdab9cab03ad7aa611612e02775018112303d3cd differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/be29c4d0b6568b06c69fc339ac29890baac569de b/test/core/end2end/fuzzers/api_fuzzer_corpus/be29c4d0b6568b06c69fc339ac29890baac569de new file mode 100644 index 0000000000000000000000000000000000000000..d45f253672188f3f82d3cc2b001c754c63f6bee5 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/be29c4d0b6568b06c69fc339ac29890baac569de differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/be757e0ca581bb4ec14fbba6e87569f93f4c7750 b/test/core/end2end/fuzzers/api_fuzzer_corpus/be757e0ca581bb4ec14fbba6e87569f93f4c7750 new file mode 100644 index 0000000000000000000000000000000000000000..31dde2952b8a7b050e72d96d2e7912069cd60986 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/be757e0ca581bb4ec14fbba6e87569f93f4c7750 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/be8114a7bd73ce15fe0495171234d0af526e41f1 b/test/core/end2end/fuzzers/api_fuzzer_corpus/be8114a7bd73ce15fe0495171234d0af526e41f1 new file mode 100644 index 0000000000000000000000000000000000000000..b770bb7e4a0cb17d5c84ed46da0463a9a6bcb07c Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/be8114a7bd73ce15fe0495171234d0af526e41f1 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/becdf72b57104cede4a1fc7b7a4c97a3cbf3b7b4 b/test/core/end2end/fuzzers/api_fuzzer_corpus/becdf72b57104cede4a1fc7b7a4c97a3cbf3b7b4 new file mode 100644 index 0000000000000000000000000000000000000000..a33af534cce84cec327fc5bec7ff482266c5dc5c Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/becdf72b57104cede4a1fc7b7a4c97a3cbf3b7b4 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/beff7e2d09ef0547a3b1a498311c665954d8baea b/test/core/end2end/fuzzers/api_fuzzer_corpus/beff7e2d09ef0547a3b1a498311c665954d8baea new file mode 100644 index 0000000000000000000000000000000000000000..36b5ce90d77f6baefd317e61df5e9c56a9628235 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/beff7e2d09ef0547a3b1a498311c665954d8baea differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/bfe2840aecee88c5301aedd16a6ac8cea0262005 b/test/core/end2end/fuzzers/api_fuzzer_corpus/bfe2840aecee88c5301aedd16a6ac8cea0262005 new file mode 100644 index 0000000000000000000000000000000000000000..fc2c6bf5aa2075af39b3b6372c498c9210b963a4 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/bfe2840aecee88c5301aedd16a6ac8cea0262005 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/c061aa42448363b548d90cbf4a7660fb2b043518 b/test/core/end2end/fuzzers/api_fuzzer_corpus/c061aa42448363b548d90cbf4a7660fb2b043518 new file mode 100644 index 0000000000000000000000000000000000000000..958bbd54c0888cf059d52fb78a3628dcf70bfbb1 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/c061aa42448363b548d90cbf4a7660fb2b043518 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/c0bb5f00fc14ea4f2000f75e6d1d94f23e6203f6 b/test/core/end2end/fuzzers/api_fuzzer_corpus/c0bb5f00fc14ea4f2000f75e6d1d94f23e6203f6 new file mode 100644 index 0000000000000000000000000000000000000000..952d8adce9545a5be5a4a78bebe375ecb5d101b7 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/c0bb5f00fc14ea4f2000f75e6d1d94f23e6203f6 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/c0e04f5709338a500b3be166714ed7b0013c17d0 b/test/core/end2end/fuzzers/api_fuzzer_corpus/c0e04f5709338a500b3be166714ed7b0013c17d0 new file mode 100644 index 0000000000000000000000000000000000000000..556fb44bf1461b05f84a435b5ae7e740b65f6607 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/c0e04f5709338a500b3be166714ed7b0013c17d0 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/c11e6f232cfdc5fffffa2c79150b5647704912c0 b/test/core/end2end/fuzzers/api_fuzzer_corpus/c11e6f232cfdc5fffffa2c79150b5647704912c0 new file mode 100644 index 0000000000000000000000000000000000000000..216119493d8e6e178a8feef822a1499ec2ad0b4c Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/c11e6f232cfdc5fffffa2c79150b5647704912c0 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/c16876cdc8ab36ef7083bf4579849ee94239af0f b/test/core/end2end/fuzzers/api_fuzzer_corpus/c16876cdc8ab36ef7083bf4579849ee94239af0f new file mode 100644 index 0000000000000000000000000000000000000000..4146d6f72db270b0ba58efd0cb55fbb3c843cb33 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/c16876cdc8ab36ef7083bf4579849ee94239af0f differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/c1ac67facfa4ca5ad92c3eed576a59d41558480f b/test/core/end2end/fuzzers/api_fuzzer_corpus/c1ac67facfa4ca5ad92c3eed576a59d41558480f new file mode 100644 index 0000000000000000000000000000000000000000..71934fd9e5a2eb301986e40a8b9d859f7526d393 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/c1ac67facfa4ca5ad92c3eed576a59d41558480f differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/c1d33a370a8ec2c2ea380472cc49172c679fa5bc b/test/core/end2end/fuzzers/api_fuzzer_corpus/c1d33a370a8ec2c2ea380472cc49172c679fa5bc new file mode 100644 index 0000000000000000000000000000000000000000..8449ca5c9ca072a23a98b7dc25f4741b68e9412c Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/c1d33a370a8ec2c2ea380472cc49172c679fa5bc differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/c1d84db44208d08a84084986094aeac3eebfe3b8 b/test/core/end2end/fuzzers/api_fuzzer_corpus/c1d84db44208d08a84084986094aeac3eebfe3b8 new file mode 100644 index 0000000000000000000000000000000000000000..81e421bd567f7c73ed914a7fa5cfe68b545193fd Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/c1d84db44208d08a84084986094aeac3eebfe3b8 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/c259fba0af17dd1636501feddd52e501b51c4137 b/test/core/end2end/fuzzers/api_fuzzer_corpus/c259fba0af17dd1636501feddd52e501b51c4137 new file mode 100644 index 0000000000000000000000000000000000000000..4d0b6c239cc3e30b3655907744d87fc8cc0236fc Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/c259fba0af17dd1636501feddd52e501b51c4137 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/c29f63aa5c4462b359c9028b6e6031dc088d7d46 b/test/core/end2end/fuzzers/api_fuzzer_corpus/c29f63aa5c4462b359c9028b6e6031dc088d7d46 new file mode 100644 index 0000000000000000000000000000000000000000..2f4522abe1cbc66d730c02382b4b8c61996194c8 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/c29f63aa5c4462b359c9028b6e6031dc088d7d46 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/c2eb3287f8b83c9281826e3c773ca347056ee115 b/test/core/end2end/fuzzers/api_fuzzer_corpus/c2eb3287f8b83c9281826e3c773ca347056ee115 new file mode 100644 index 0000000000000000000000000000000000000000..24a699072170b4f76cc3abf3af5041d7b0da8cd4 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/c2eb3287f8b83c9281826e3c773ca347056ee115 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/c32029d5683ad5cfa1af3b534c53bc2f7f513f50 b/test/core/end2end/fuzzers/api_fuzzer_corpus/c32029d5683ad5cfa1af3b534c53bc2f7f513f50 new file mode 100644 index 0000000000000000000000000000000000000000..ba48feb7a8a4d7cdd47c828523bd8546b7b75c86 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/c32029d5683ad5cfa1af3b534c53bc2f7f513f50 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/c370cb2ce56d1006fea0af1a823042927c0cfa07 b/test/core/end2end/fuzzers/api_fuzzer_corpus/c370cb2ce56d1006fea0af1a823042927c0cfa07 new file mode 100644 index 0000000000000000000000000000000000000000..e1fe503a8969ce6a0920efdc74de3a399e6016a6 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/c370cb2ce56d1006fea0af1a823042927c0cfa07 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/c3ade78c7fea61ed2e2cd843f9c551b107ae050f b/test/core/end2end/fuzzers/api_fuzzer_corpus/c3ade78c7fea61ed2e2cd843f9c551b107ae050f new file mode 100644 index 0000000000000000000000000000000000000000..1a08ade4e1d73a4c83d8d81a6bd3c2fe7f238c52 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/c3ade78c7fea61ed2e2cd843f9c551b107ae050f differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/c40e43a76f0c493414386dd90ab892042a6914d2 b/test/core/end2end/fuzzers/api_fuzzer_corpus/c40e43a76f0c493414386dd90ab892042a6914d2 new file mode 100644 index 0000000000000000000000000000000000000000..5f31d6c67e125c20209c184f059535d6c2e52ddf Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/c40e43a76f0c493414386dd90ab892042a6914d2 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/c4b438b82ac86439296c31dd7de86a753034c807 b/test/core/end2end/fuzzers/api_fuzzer_corpus/c4b438b82ac86439296c31dd7de86a753034c807 new file mode 100644 index 0000000000000000000000000000000000000000..b01f9a1d1a4b50a1a6173e6477e9721b68f04dea Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/c4b438b82ac86439296c31dd7de86a753034c807 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/c5154ce0384c3becaf12f83c51114bb3ccd0b673 b/test/core/end2end/fuzzers/api_fuzzer_corpus/c5154ce0384c3becaf12f83c51114bb3ccd0b673 new file mode 100644 index 0000000000000000000000000000000000000000..ceaa6d2c87ff7ed511b15c30f65de5f278cd00dc Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/c5154ce0384c3becaf12f83c51114bb3ccd0b673 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/c5446cba5971d6f44ee93097a21c1b8936f4020a b/test/core/end2end/fuzzers/api_fuzzer_corpus/c5446cba5971d6f44ee93097a21c1b8936f4020a new file mode 100644 index 0000000000000000000000000000000000000000..665d26127281272ba04974997b847f47b9006bed Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/c5446cba5971d6f44ee93097a21c1b8936f4020a differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/c6733483e94f755f1cbf796f8aa3d10a2c371aa3 b/test/core/end2end/fuzzers/api_fuzzer_corpus/c6733483e94f755f1cbf796f8aa3d10a2c371aa3 new file mode 100644 index 0000000000000000000000000000000000000000..084991d2464c1682075e7da73b2b23e6f9243830 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/c6733483e94f755f1cbf796f8aa3d10a2c371aa3 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/c8f0972dabb904bc6d35ed576fc9a49eb2ed5273 b/test/core/end2end/fuzzers/api_fuzzer_corpus/c8f0972dabb904bc6d35ed576fc9a49eb2ed5273 new file mode 100644 index 0000000000000000000000000000000000000000..2eb2813509a5aa1099aba7c40704b9d909242623 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/c8f0972dabb904bc6d35ed576fc9a49eb2ed5273 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/c93f16b5b678d3019eb05bd0774598e7d34e9b3b b/test/core/end2end/fuzzers/api_fuzzer_corpus/c93f16b5b678d3019eb05bd0774598e7d34e9b3b new file mode 100644 index 0000000000000000000000000000000000000000..2f79043c4f9253224fc63c623f30692480ada14b Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/c93f16b5b678d3019eb05bd0774598e7d34e9b3b differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/c97c41c0c76a901f458bf9b4d785fb53fe8a2980 b/test/core/end2end/fuzzers/api_fuzzer_corpus/c97c41c0c76a901f458bf9b4d785fb53fe8a2980 new file mode 100644 index 0000000000000000000000000000000000000000..716844f39fedd7f7bcd519250c572880c023539d Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/c97c41c0c76a901f458bf9b4d785fb53fe8a2980 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/ca418a61964cb360014b574fe29aa20b193df04f b/test/core/end2end/fuzzers/api_fuzzer_corpus/ca418a61964cb360014b574fe29aa20b193df04f new file mode 100644 index 0000000000000000000000000000000000000000..31eaf393015941bde42a99c3950afaacc0656fce Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/ca418a61964cb360014b574fe29aa20b193df04f differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/cb9a688f0dbc2015c77920f344e2d029c87384ff b/test/core/end2end/fuzzers/api_fuzzer_corpus/cb9a688f0dbc2015c77920f344e2d029c87384ff new file mode 100644 index 0000000000000000000000000000000000000000..e0f0ba5977fd00e9b4beb152ebc5562553fb078a Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/cb9a688f0dbc2015c77920f344e2d029c87384ff differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/cd779b587b80719e2838853c2eac8d4595c0faa4 b/test/core/end2end/fuzzers/api_fuzzer_corpus/cd779b587b80719e2838853c2eac8d4595c0faa4 new file mode 100644 index 0000000000000000000000000000000000000000..4067a15dea770f386e7c3085f11db6497df4b3ee Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/cd779b587b80719e2838853c2eac8d4595c0faa4 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/ceecce905981d8291a79fe32f89e8be688dfee7e b/test/core/end2end/fuzzers/api_fuzzer_corpus/ceecce905981d8291a79fe32f89e8be688dfee7e new file mode 100644 index 0000000000000000000000000000000000000000..1a58450f81639eca4bf05263c9cfd43f2e278849 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/ceecce905981d8291a79fe32f89e8be688dfee7e differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/d079f5c8a10611dc655cef33f73100f5f43787a8 b/test/core/end2end/fuzzers/api_fuzzer_corpus/d079f5c8a10611dc655cef33f73100f5f43787a8 new file mode 100644 index 0000000000000000000000000000000000000000..ac6ea5313e39cacdbd4654e5b4fcc19749b30525 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/d079f5c8a10611dc655cef33f73100f5f43787a8 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/d107d21374f4dba27f173d4edd5c8009e3b0f8c4 b/test/core/end2end/fuzzers/api_fuzzer_corpus/d107d21374f4dba27f173d4edd5c8009e3b0f8c4 new file mode 100644 index 0000000000000000000000000000000000000000..b888d6291fd087dbe12230ff8fd63a87dae67da0 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/d107d21374f4dba27f173d4edd5c8009e3b0f8c4 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/d110d5d3a672bf483f230825e735d372b0b2c1a5 b/test/core/end2end/fuzzers/api_fuzzer_corpus/d110d5d3a672bf483f230825e735d372b0b2c1a5 new file mode 100644 index 0000000000000000000000000000000000000000..1e3df71064358dbf9acefb515d9d00b23cbf0071 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/d110d5d3a672bf483f230825e735d372b0b2c1a5 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/d18b2a1520207761100992c88b50f6b410c62184 b/test/core/end2end/fuzzers/api_fuzzer_corpus/d18b2a1520207761100992c88b50f6b410c62184 new file mode 100644 index 0000000000000000000000000000000000000000..9510bc0cb60d11049185f66e5aac3c6dc1381bdd Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/d18b2a1520207761100992c88b50f6b410c62184 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/d22287b96b3dcb840fc65e4be60e409fb0f6bfe5 b/test/core/end2end/fuzzers/api_fuzzer_corpus/d22287b96b3dcb840fc65e4be60e409fb0f6bfe5 new file mode 100644 index 0000000000000000000000000000000000000000..7e5f56c0f5171deae3cc172f5bd5d57d9eb519ca Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/d22287b96b3dcb840fc65e4be60e409fb0f6bfe5 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/d27e050b2758f6658d166b0d30e9db9595388ef9 b/test/core/end2end/fuzzers/api_fuzzer_corpus/d27e050b2758f6658d166b0d30e9db9595388ef9 new file mode 100644 index 0000000000000000000000000000000000000000..7151cc3fe23f3a3099b2fcf7d06ba0f77931f60c Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/d27e050b2758f6658d166b0d30e9db9595388ef9 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/d3089d3ef9be14080abc156e5f2128c3c1a2f23a b/test/core/end2end/fuzzers/api_fuzzer_corpus/d3089d3ef9be14080abc156e5f2128c3c1a2f23a new file mode 100644 index 0000000000000000000000000000000000000000..f4e8b740d0c8222a385cf3aabe59491f6ad3737e Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/d3089d3ef9be14080abc156e5f2128c3c1a2f23a differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/d3090a5221ea984dc474c3fb448b71957f8197a4 b/test/core/end2end/fuzzers/api_fuzzer_corpus/d3090a5221ea984dc474c3fb448b71957f8197a4 new file mode 100644 index 0000000000000000000000000000000000000000..bad057235e7542eff39065e75243d124d4fea1ed Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/d3090a5221ea984dc474c3fb448b71957f8197a4 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/d56b3dae753b110e9e1a050486c6deb6ac399bd8 b/test/core/end2end/fuzzers/api_fuzzer_corpus/d56b3dae753b110e9e1a050486c6deb6ac399bd8 new file mode 100644 index 0000000000000000000000000000000000000000..c290cccff87e5ff214cded42cbd5abb4bd7bea34 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/d56b3dae753b110e9e1a050486c6deb6ac399bd8 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/d576eb2948463f86f576d85e41d30a8cf3b972c2 b/test/core/end2end/fuzzers/api_fuzzer_corpus/d576eb2948463f86f576d85e41d30a8cf3b972c2 new file mode 100644 index 0000000000000000000000000000000000000000..85d31ea425b3455cedb59f9d48dfcdb83acf5c89 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/d576eb2948463f86f576d85e41d30a8cf3b972c2 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/d5824da8aeaf96a9e5f590a851e58e2534d178a5 b/test/core/end2end/fuzzers/api_fuzzer_corpus/d5824da8aeaf96a9e5f590a851e58e2534d178a5 new file mode 100644 index 0000000000000000000000000000000000000000..8901ee6ff62a03a32e90077693290985da6e90a7 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/d5824da8aeaf96a9e5f590a851e58e2534d178a5 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/d67c22b4174555c3e596c58dc7c28e84b1da8353 b/test/core/end2end/fuzzers/api_fuzzer_corpus/d67c22b4174555c3e596c58dc7c28e84b1da8353 new file mode 100644 index 0000000000000000000000000000000000000000..cfe39928c17c226cbc95f0c0688a6c653d6f1dbe Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/d67c22b4174555c3e596c58dc7c28e84b1da8353 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/d68001237e6366c844a6509fa03e677e6adfb75f b/test/core/end2end/fuzzers/api_fuzzer_corpus/d68001237e6366c844a6509fa03e677e6adfb75f new file mode 100644 index 0000000000000000000000000000000000000000..796a3bc8f7d012ba399d040936e82422c1e7876b Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/d68001237e6366c844a6509fa03e677e6adfb75f differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/d681712608025610b8ecc8a76a822516fb659953 b/test/core/end2end/fuzzers/api_fuzzer_corpus/d681712608025610b8ecc8a76a822516fb659953 new file mode 100644 index 0000000000000000000000000000000000000000..390be08072373c1ba216a7e228a8ef84d6f8fb69 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/d681712608025610b8ecc8a76a822516fb659953 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/d87b7bcd1b05a2f8cc04a2aadb999bcf65b84911 b/test/core/end2end/fuzzers/api_fuzzer_corpus/d87b7bcd1b05a2f8cc04a2aadb999bcf65b84911 new file mode 100644 index 0000000000000000000000000000000000000000..837340791d580c1dab5124ba971f5bea61949f29 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/d87b7bcd1b05a2f8cc04a2aadb999bcf65b84911 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/d8d117e45b7bc0c48f606d9ef844f00a363a8a38 b/test/core/end2end/fuzzers/api_fuzzer_corpus/d8d117e45b7bc0c48f606d9ef844f00a363a8a38 new file mode 100644 index 0000000000000000000000000000000000000000..dad8cbb2a78f82c0d01854e02d080f75120d0a9f Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/d8d117e45b7bc0c48f606d9ef844f00a363a8a38 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/d99bfa6bb10d30f64b533ea7620fc08b762a7bf3 b/test/core/end2end/fuzzers/api_fuzzer_corpus/d99bfa6bb10d30f64b533ea7620fc08b762a7bf3 new file mode 100644 index 0000000000000000000000000000000000000000..e4df6b8b29767d582566475b9d438d0465737b8e Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/d99bfa6bb10d30f64b533ea7620fc08b762a7bf3 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/d9d80422059678f0a011b8e8fdedd3d20c025b91 b/test/core/end2end/fuzzers/api_fuzzer_corpus/d9d80422059678f0a011b8e8fdedd3d20c025b91 new file mode 100644 index 0000000000000000000000000000000000000000..bf457107d5012532cb8d2b09185829c048a72bff Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/d9d80422059678f0a011b8e8fdedd3d20c025b91 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/da2ace62505959bae7b4f158220f7ce97d20423d b/test/core/end2end/fuzzers/api_fuzzer_corpus/da2ace62505959bae7b4f158220f7ce97d20423d new file mode 100644 index 0000000000000000000000000000000000000000..4275d96c4b3176e448e5042dacf1ca7366603757 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/da2ace62505959bae7b4f158220f7ce97d20423d differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/dac17b9025074828797ef0dd1e3895baf875627f b/test/core/end2end/fuzzers/api_fuzzer_corpus/dac17b9025074828797ef0dd1e3895baf875627f new file mode 100644 index 0000000000000000000000000000000000000000..98d1f0f9d9a47f83b94372131b8ff5021a66fb14 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/dac17b9025074828797ef0dd1e3895baf875627f differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/db0dbec7a0811cac7b250cf9b248d47936edc0d0 b/test/core/end2end/fuzzers/api_fuzzer_corpus/db0dbec7a0811cac7b250cf9b248d47936edc0d0 new file mode 100644 index 0000000000000000000000000000000000000000..71bc27a366a20ab50342bff6686ce81456374e23 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/db0dbec7a0811cac7b250cf9b248d47936edc0d0 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/dc38c75bcb7df7e61428d8f12ff01a1ec1b68a99 b/test/core/end2end/fuzzers/api_fuzzer_corpus/dc38c75bcb7df7e61428d8f12ff01a1ec1b68a99 new file mode 100644 index 0000000000000000000000000000000000000000..8dbf96262adac4f817c53aa4270cea3ea1a24a14 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/dc38c75bcb7df7e61428d8f12ff01a1ec1b68a99 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/dcc8e14bbb75292968233ce89acd404303a53cc3 b/test/core/end2end/fuzzers/api_fuzzer_corpus/dcc8e14bbb75292968233ce89acd404303a53cc3 new file mode 100644 index 0000000000000000000000000000000000000000..e6db8610f61c42c26cb15976ec1b592513a667f3 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/dcc8e14bbb75292968233ce89acd404303a53cc3 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/dcd0182c3027a0d6cc7a9a8c26f647d45bf3d3df b/test/core/end2end/fuzzers/api_fuzzer_corpus/dcd0182c3027a0d6cc7a9a8c26f647d45bf3d3df new file mode 100644 index 0000000000000000000000000000000000000000..22cb1d0f1b92a4db08d8dd52052ec90cd01464cb Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/dcd0182c3027a0d6cc7a9a8c26f647d45bf3d3df differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/deb08a636c04030bc28459820c7ddbace429b40a b/test/core/end2end/fuzzers/api_fuzzer_corpus/deb08a636c04030bc28459820c7ddbace429b40a new file mode 100644 index 0000000000000000000000000000000000000000..73cfa51de163136d0a0a2e6960f7207795aaa56a Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/deb08a636c04030bc28459820c7ddbace429b40a differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/df106c9859b09869094c77aeba44e6e9ce909246 b/test/core/end2end/fuzzers/api_fuzzer_corpus/df106c9859b09869094c77aeba44e6e9ce909246 new file mode 100644 index 0000000000000000000000000000000000000000..193f219d2c569580482716b4cdedb40ffc48a810 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/df106c9859b09869094c77aeba44e6e9ce909246 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/df380dfd997318c00cfc75313e6a7ecb041d38af b/test/core/end2end/fuzzers/api_fuzzer_corpus/df380dfd997318c00cfc75313e6a7ecb041d38af new file mode 100644 index 0000000000000000000000000000000000000000..8d27db7ea9b663458f97afec85c1a71b0689c091 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/df380dfd997318c00cfc75313e6a7ecb041d38af differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/dfe4f327699ddea25103dd17b68e9a0fb726f4a7 b/test/core/end2end/fuzzers/api_fuzzer_corpus/dfe4f327699ddea25103dd17b68e9a0fb726f4a7 new file mode 100644 index 0000000000000000000000000000000000000000..1a3298358108a2560b9e7f8895bd6c719acbe8c6 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/dfe4f327699ddea25103dd17b68e9a0fb726f4a7 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/e007d8c9aa6c37e8b62fab4cb95b2807fc49105f b/test/core/end2end/fuzzers/api_fuzzer_corpus/e007d8c9aa6c37e8b62fab4cb95b2807fc49105f new file mode 100644 index 0000000000000000000000000000000000000000..ba606705de4a6cb6292493b826e8b733e3056e5a Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/e007d8c9aa6c37e8b62fab4cb95b2807fc49105f differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/e0507daae4458401edc11e5c76b246d6d5a44e3d b/test/core/end2end/fuzzers/api_fuzzer_corpus/e0507daae4458401edc11e5c76b246d6d5a44e3d new file mode 100644 index 0000000000000000000000000000000000000000..538f1c689274b70f1784ba2ea5c703254081caaf Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/e0507daae4458401edc11e5c76b246d6d5a44e3d differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/e08b85aa24c9d0a49f8946c8400b86b5ea9211c8 b/test/core/end2end/fuzzers/api_fuzzer_corpus/e08b85aa24c9d0a49f8946c8400b86b5ea9211c8 new file mode 100644 index 0000000000000000000000000000000000000000..8cb2d39fb97a65baa1bbd3477974a9218f40d733 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/e08b85aa24c9d0a49f8946c8400b86b5ea9211c8 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/e0b7eb44f182f08d2eeaeecc76ef7b3efeff1fc4 b/test/core/end2end/fuzzers/api_fuzzer_corpus/e0b7eb44f182f08d2eeaeecc76ef7b3efeff1fc4 new file mode 100644 index 0000000000000000000000000000000000000000..7c8ba6e1589eceaaaec80480b0b2a86bd45db1c5 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/e0b7eb44f182f08d2eeaeecc76ef7b3efeff1fc4 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/e13361499a2326ef8dbc3746ceb61c61b2e1ad57 b/test/core/end2end/fuzzers/api_fuzzer_corpus/e13361499a2326ef8dbc3746ceb61c61b2e1ad57 new file mode 100644 index 0000000000000000000000000000000000000000..0b6c3a55e06caffef30af023479b587b256c7f1c Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/e13361499a2326ef8dbc3746ceb61c61b2e1ad57 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/e15a0a0fb7b4f1c05088bc119c492ac20eb5dbcf b/test/core/end2end/fuzzers/api_fuzzer_corpus/e15a0a0fb7b4f1c05088bc119c492ac20eb5dbcf new file mode 100644 index 0000000000000000000000000000000000000000..7b286e29c2e82018f162b18b3c9792f35e7bf4a0 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/e15a0a0fb7b4f1c05088bc119c492ac20eb5dbcf differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/e192ba28f8a3bc9079b810c46ecc526f84609863 b/test/core/end2end/fuzzers/api_fuzzer_corpus/e192ba28f8a3bc9079b810c46ecc526f84609863 new file mode 100644 index 0000000000000000000000000000000000000000..b09975ef27cab44907aad839b6877fdaf3e9c66c Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/e192ba28f8a3bc9079b810c46ecc526f84609863 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/e33eb4b19232b2e32bc8f18e43459c4ed15bfc4f b/test/core/end2end/fuzzers/api_fuzzer_corpus/e33eb4b19232b2e32bc8f18e43459c4ed15bfc4f new file mode 100644 index 0000000000000000000000000000000000000000..89915b2b585a4fdbc2cf590c13f0ee7561eebf2a Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/e33eb4b19232b2e32bc8f18e43459c4ed15bfc4f differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/e3b45752c8160c48885420e20c24bb7124128f16 b/test/core/end2end/fuzzers/api_fuzzer_corpus/e3b45752c8160c48885420e20c24bb7124128f16 new file mode 100644 index 0000000000000000000000000000000000000000..9fa27550473d3d1f8a636d6b649a518831d756ca Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/e3b45752c8160c48885420e20c24bb7124128f16 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/e3c1dbfb1ef140f6bdcf7d683e2b2071aacba9ba b/test/core/end2end/fuzzers/api_fuzzer_corpus/e3c1dbfb1ef140f6bdcf7d683e2b2071aacba9ba new file mode 100644 index 0000000000000000000000000000000000000000..7276b8595cff7d3ff68ce32027eb392066f1e337 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/e3c1dbfb1ef140f6bdcf7d683e2b2071aacba9ba differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/e3eda76a93e94d081a9dfd675975fe2fc1d670dc b/test/core/end2end/fuzzers/api_fuzzer_corpus/e3eda76a93e94d081a9dfd675975fe2fc1d670dc new file mode 100644 index 0000000000000000000000000000000000000000..c02b7efaaaaa930fd323a9509abd1265a72268ae Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/e3eda76a93e94d081a9dfd675975fe2fc1d670dc differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/e53a201505fe8412278d7444b1a915b353bacb3e b/test/core/end2end/fuzzers/api_fuzzer_corpus/e53a201505fe8412278d7444b1a915b353bacb3e new file mode 100644 index 0000000000000000000000000000000000000000..21c4cee0ef632af9ae88fef22a5681e0f43d3a70 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/e53a201505fe8412278d7444b1a915b353bacb3e differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/e7484552736c89fe721019daaad8739a68f1a926 b/test/core/end2end/fuzzers/api_fuzzer_corpus/e7484552736c89fe721019daaad8739a68f1a926 new file mode 100644 index 0000000000000000000000000000000000000000..10b40e6697d78d0dbe586292e74408723be47395 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/e7484552736c89fe721019daaad8739a68f1a926 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/e80302182fbd464b72d2b9be495901c0c3e93344 b/test/core/end2end/fuzzers/api_fuzzer_corpus/e80302182fbd464b72d2b9be495901c0c3e93344 new file mode 100644 index 0000000000000000000000000000000000000000..b5081f4396047972d513b769d50ea78abe22b7b4 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/e80302182fbd464b72d2b9be495901c0c3e93344 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/e805c33631e579c782550439f123b78e1ad8e180 b/test/core/end2end/fuzzers/api_fuzzer_corpus/e805c33631e579c782550439f123b78e1ad8e180 new file mode 100644 index 0000000000000000000000000000000000000000..16152586973ba24bf0cf49554c2e6d176b21b1c9 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/e805c33631e579c782550439f123b78e1ad8e180 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/eab01c8a32e76c8f354055807399a808848234e6 b/test/core/end2end/fuzzers/api_fuzzer_corpus/eab01c8a32e76c8f354055807399a808848234e6 new file mode 100644 index 0000000000000000000000000000000000000000..c21869eddff08d9783c2431f5677bc6347ef46ca Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/eab01c8a32e76c8f354055807399a808848234e6 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/ebc30c5cbe17138976223f2283fe42d9e4c6f39a b/test/core/end2end/fuzzers/api_fuzzer_corpus/ebc30c5cbe17138976223f2283fe42d9e4c6f39a new file mode 100644 index 0000000000000000000000000000000000000000..060185d722ccfb9e2da6c69f2232a30096150efb Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/ebc30c5cbe17138976223f2283fe42d9e4c6f39a differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/ebe414975652c12fbbfd99efd2da1cd4c72c340c b/test/core/end2end/fuzzers/api_fuzzer_corpus/ebe414975652c12fbbfd99efd2da1cd4c72c340c new file mode 100644 index 0000000000000000000000000000000000000000..0ce6c54ed02756df1ffa5e6e3cb261053bb7c56b Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/ebe414975652c12fbbfd99efd2da1cd4c72c340c differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/ec230c6a27149df85cad53f33478ffc11bd92d4e b/test/core/end2end/fuzzers/api_fuzzer_corpus/ec230c6a27149df85cad53f33478ffc11bd92d4e new file mode 100644 index 0000000000000000000000000000000000000000..c0669bcaaa1bcb5fd5ea2047cd448de635535861 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/ec230c6a27149df85cad53f33478ffc11bd92d4e differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/ec97d4ee730261bdc3b14349a3346fd45929bd17 b/test/core/end2end/fuzzers/api_fuzzer_corpus/ec97d4ee730261bdc3b14349a3346fd45929bd17 new file mode 100644 index 0000000000000000000000000000000000000000..1a440005c1e8df4dd9a9bb698e438cf32a7721fe Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/ec97d4ee730261bdc3b14349a3346fd45929bd17 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/ecf0a3cd157191263734f4f2de9689d5a02e439b b/test/core/end2end/fuzzers/api_fuzzer_corpus/ecf0a3cd157191263734f4f2de9689d5a02e439b new file mode 100644 index 0000000000000000000000000000000000000000..0fa521382477a66f4cac7fe578a88624e138d58c Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/ecf0a3cd157191263734f4f2de9689d5a02e439b differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/ed361ec32383606748bedeb8eee6510041b0f366 b/test/core/end2end/fuzzers/api_fuzzer_corpus/ed361ec32383606748bedeb8eee6510041b0f366 new file mode 100644 index 0000000000000000000000000000000000000000..79a8ba2ac19c650c95743cd2a909993a87bacf0e Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/ed361ec32383606748bedeb8eee6510041b0f366 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/edcf7ea2ec8443a92883e68e5e18353fad8f6d21 b/test/core/end2end/fuzzers/api_fuzzer_corpus/edcf7ea2ec8443a92883e68e5e18353fad8f6d21 new file mode 100644 index 0000000000000000000000000000000000000000..3e661661b82ddc9bfd0c33bc56039f5f5773cdcf Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/edcf7ea2ec8443a92883e68e5e18353fad8f6d21 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/ef32866f14ccd80c1231fa742b53fba46ae15d6f b/test/core/end2end/fuzzers/api_fuzzer_corpus/ef32866f14ccd80c1231fa742b53fba46ae15d6f new file mode 100644 index 0000000000000000000000000000000000000000..d7c207d1d5af20bacfb24052d4688c6b82a8a5d9 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/ef32866f14ccd80c1231fa742b53fba46ae15d6f differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/ef63ab3c4dbf27ed1f15c2b310bf41ff3a2a7e3c b/test/core/end2end/fuzzers/api_fuzzer_corpus/ef63ab3c4dbf27ed1f15c2b310bf41ff3a2a7e3c new file mode 100644 index 0000000000000000000000000000000000000000..d8edea8dff69589698b062603b162caea832e3bd Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/ef63ab3c4dbf27ed1f15c2b310bf41ff3a2a7e3c differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/ef967ba35676b971983b1e95e62c383a978a37f7 b/test/core/end2end/fuzzers/api_fuzzer_corpus/ef967ba35676b971983b1e95e62c383a978a37f7 new file mode 100644 index 0000000000000000000000000000000000000000..4d372b6620a6e41c3d93f63f62cdab188819ea08 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/ef967ba35676b971983b1e95e62c383a978a37f7 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/eff00cadc3130c257b3fe360ea5d32fb034aadff b/test/core/end2end/fuzzers/api_fuzzer_corpus/eff00cadc3130c257b3fe360ea5d32fb034aadff new file mode 100644 index 0000000000000000000000000000000000000000..42c38de35f4b5b31e709164b3db8f52e9357e6ca Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/eff00cadc3130c257b3fe360ea5d32fb034aadff differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/f0649728d5f9e1a91735eaa429605ce0da6c00c0 b/test/core/end2end/fuzzers/api_fuzzer_corpus/f0649728d5f9e1a91735eaa429605ce0da6c00c0 new file mode 100644 index 0000000000000000000000000000000000000000..877aed3d9630b2f520c3f2b55ebb324f0dbddbed Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/f0649728d5f9e1a91735eaa429605ce0da6c00c0 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/f0d881bdd69c3945694068719a7a6b6b094dee3c b/test/core/end2end/fuzzers/api_fuzzer_corpus/f0d881bdd69c3945694068719a7a6b6b094dee3c new file mode 100644 index 0000000000000000000000000000000000000000..9da6998e28070f1a7790d5d95d0f6d6fbfbc6be2 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/f0d881bdd69c3945694068719a7a6b6b094dee3c differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/f18f2d094ef0f0c971173153279bc44bfa3c1187 b/test/core/end2end/fuzzers/api_fuzzer_corpus/f18f2d094ef0f0c971173153279bc44bfa3c1187 new file mode 100644 index 0000000000000000000000000000000000000000..606dcadf3796173ecd25c432f22dc5322f854d43 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/f18f2d094ef0f0c971173153279bc44bfa3c1187 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/f1a7981f4f19f6318e0f16cafe9541d1564f9e15 b/test/core/end2end/fuzzers/api_fuzzer_corpus/f1a7981f4f19f6318e0f16cafe9541d1564f9e15 new file mode 100644 index 0000000000000000000000000000000000000000..18aea88b936e7fdeffa06e39e8646affe21ac31b Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/f1a7981f4f19f6318e0f16cafe9541d1564f9e15 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/f27ae36fe8211e46f49656597658daab1429b163 b/test/core/end2end/fuzzers/api_fuzzer_corpus/f27ae36fe8211e46f49656597658daab1429b163 new file mode 100644 index 0000000000000000000000000000000000000000..3f94e68d3422709d35db776f074b413b5e95803d Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/f27ae36fe8211e46f49656597658daab1429b163 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/f2f014c6ef70e40f9334096f34584ea4f1f882d7 b/test/core/end2end/fuzzers/api_fuzzer_corpus/f2f014c6ef70e40f9334096f34584ea4f1f882d7 new file mode 100644 index 0000000000000000000000000000000000000000..eb8e03b09d756e81e22ddb0a3b92e3ece3810943 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/f2f014c6ef70e40f9334096f34584ea4f1f882d7 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/f463b733bfacabdd064c6b5a0551d72398f833af b/test/core/end2end/fuzzers/api_fuzzer_corpus/f463b733bfacabdd064c6b5a0551d72398f833af new file mode 100644 index 0000000000000000000000000000000000000000..03ad61f79844d89283a39bdf46e4fd4d9aad9177 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/f463b733bfacabdd064c6b5a0551d72398f833af differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/f5867f7dbacd22878e2955f4be8fca147442aa9d b/test/core/end2end/fuzzers/api_fuzzer_corpus/f5867f7dbacd22878e2955f4be8fca147442aa9d new file mode 100644 index 0000000000000000000000000000000000000000..0ea10966e19207103cea28be4fc6b861a26f1a85 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/f5867f7dbacd22878e2955f4be8fca147442aa9d differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/f5a7503830d1e74c6a7230c10c5007a5f8ad5a0f b/test/core/end2end/fuzzers/api_fuzzer_corpus/f5a7503830d1e74c6a7230c10c5007a5f8ad5a0f new file mode 100644 index 0000000000000000000000000000000000000000..9a522beba74622618b493cd2fc9524661da16e96 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/f5a7503830d1e74c6a7230c10c5007a5f8ad5a0f differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/f62ae81e655f294699b73830d3abaa787196cb23 b/test/core/end2end/fuzzers/api_fuzzer_corpus/f62ae81e655f294699b73830d3abaa787196cb23 new file mode 100644 index 0000000000000000000000000000000000000000..fdba78b086bdbac4574debc7fc5d078ecf5823bb Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/f62ae81e655f294699b73830d3abaa787196cb23 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/f7316eaa3f54119ac5b7fb24e8b92debdf57c3f1 b/test/core/end2end/fuzzers/api_fuzzer_corpus/f7316eaa3f54119ac5b7fb24e8b92debdf57c3f1 new file mode 100644 index 0000000000000000000000000000000000000000..35d4f9f003554408aa2026aaaeb44b4bd28df8d7 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/f7316eaa3f54119ac5b7fb24e8b92debdf57c3f1 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/f7909263cd7edc56186185c0b3421ebb68ad8d2b b/test/core/end2end/fuzzers/api_fuzzer_corpus/f7909263cd7edc56186185c0b3421ebb68ad8d2b new file mode 100644 index 0000000000000000000000000000000000000000..9ba6a4b642a04d891d821d3e75f900f893abbb37 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/f7909263cd7edc56186185c0b3421ebb68ad8d2b differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/f912a072f4abf312ebbe7f1a2bf5ebd8c51e35e2 b/test/core/end2end/fuzzers/api_fuzzer_corpus/f912a072f4abf312ebbe7f1a2bf5ebd8c51e35e2 new file mode 100644 index 0000000000000000000000000000000000000000..9e85aa987145a497449a3a9adf8ac85e95989cd7 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/f912a072f4abf312ebbe7f1a2bf5ebd8c51e35e2 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/fa44038e372af4ab374d3e94ec61662051e0dd74 b/test/core/end2end/fuzzers/api_fuzzer_corpus/fa44038e372af4ab374d3e94ec61662051e0dd74 new file mode 100644 index 0000000000000000000000000000000000000000..ca4f7a30be71cc61afda3958be4e4b6755ef3587 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/fa44038e372af4ab374d3e94ec61662051e0dd74 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/faa0471930dc99deb5b1ffdc9bab7c1267b4ddbb b/test/core/end2end/fuzzers/api_fuzzer_corpus/faa0471930dc99deb5b1ffdc9bab7c1267b4ddbb new file mode 100644 index 0000000000000000000000000000000000000000..52cb2f2eb2f520f40f98edd6362ae34385da7c12 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/faa0471930dc99deb5b1ffdc9bab7c1267b4ddbb differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/fac54fba5614e5930104bc7391773b490c0523b2 b/test/core/end2end/fuzzers/api_fuzzer_corpus/fac54fba5614e5930104bc7391773b490c0523b2 new file mode 100644 index 0000000000000000000000000000000000000000..e13f8bb407c9af52c60b4900b364d09293dceca8 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/fac54fba5614e5930104bc7391773b490c0523b2 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/fb0bef1e4142a7bcfa30e93f834fb6315438d1ad b/test/core/end2end/fuzzers/api_fuzzer_corpus/fb0bef1e4142a7bcfa30e93f834fb6315438d1ad new file mode 100644 index 0000000000000000000000000000000000000000..9953e92fbc0e8e2a45826d01b97bf60209dc91e0 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/fb0bef1e4142a7bcfa30e93f834fb6315438d1ad differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/fb9ad6fd8276dd9b38b27ee8907f0db5a3a2cedf b/test/core/end2end/fuzzers/api_fuzzer_corpus/fb9ad6fd8276dd9b38b27ee8907f0db5a3a2cedf new file mode 100644 index 0000000000000000000000000000000000000000..de5995104a0f0e3733466c237a3b4f49ab9052b9 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/fb9ad6fd8276dd9b38b27ee8907f0db5a3a2cedf differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/fbeb44db0fc0f6b70c226053448c7170f62543b1 b/test/core/end2end/fuzzers/api_fuzzer_corpus/fbeb44db0fc0f6b70c226053448c7170f62543b1 new file mode 100644 index 0000000000000000000000000000000000000000..62826f8ea6040e7210b4bf8fc43c84c4bec17fba Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/fbeb44db0fc0f6b70c226053448c7170f62543b1 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/fc39c0c12cde4ef57c217955886ed9508214ca98 b/test/core/end2end/fuzzers/api_fuzzer_corpus/fc39c0c12cde4ef57c217955886ed9508214ca98 new file mode 100644 index 0000000000000000000000000000000000000000..378d150b0d3bd02ea5112b5a5d8c9bb0bbe5bf05 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/fc39c0c12cde4ef57c217955886ed9508214ca98 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/fd4d68895bc219f52d93f3f2f302ff138e8ffeda b/test/core/end2end/fuzzers/api_fuzzer_corpus/fd4d68895bc219f52d93f3f2f302ff138e8ffeda new file mode 100644 index 0000000000000000000000000000000000000000..53ad5a4fdbdf4864841e07c2d69e312255159e78 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/fd4d68895bc219f52d93f3f2f302ff138e8ffeda differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/fe565289309a897d640309b9bf214d3036c2216b b/test/core/end2end/fuzzers/api_fuzzer_corpus/fe565289309a897d640309b9bf214d3036c2216b new file mode 100644 index 0000000000000000000000000000000000000000..f9614e940be2207ecb16dc89591252d16954074f Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/fe565289309a897d640309b9bf214d3036c2216b differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/fe7ac5c3403c7f1673ead3176af4efe7c60b2c02 b/test/core/end2end/fuzzers/api_fuzzer_corpus/fe7ac5c3403c7f1673ead3176af4efe7c60b2c02 new file mode 100644 index 0000000000000000000000000000000000000000..38d0e2e2730e5aa432121817df9c3f6fd86a9cb7 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/fe7ac5c3403c7f1673ead3176af4efe7c60b2c02 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/fe9d7f510475f17a7592213c9b2e614ce7d38f22 b/test/core/end2end/fuzzers/api_fuzzer_corpus/fe9d7f510475f17a7592213c9b2e614ce7d38f22 new file mode 100644 index 0000000000000000000000000000000000000000..6929f700becb585b41159cb0684e51a8403aa871 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/fe9d7f510475f17a7592213c9b2e614ce7d38f22 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/ff2fd7bfc554729dc2a40554597e3a95ab8baefe b/test/core/end2end/fuzzers/api_fuzzer_corpus/ff2fd7bfc554729dc2a40554597e3a95ab8baefe new file mode 100644 index 0000000000000000000000000000000000000000..617703e79e0b69748e50c801198e5bba358cb4a8 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/ff2fd7bfc554729dc2a40554597e3a95ab8baefe differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/ff8ffcfafaf420d6fee1cfa087204975ab8e14d6 b/test/core/end2end/fuzzers/api_fuzzer_corpus/ff8ffcfafaf420d6fee1cfa087204975ab8e14d6 new file mode 100644 index 0000000000000000000000000000000000000000..3308bf2007458b5dbdbac4411b181480e1d27b40 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/ff8ffcfafaf420d6fee1cfa087204975ab8e14d6 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/ffc74f2184f64032a1f67b5f843a683ea1372b74 b/test/core/end2end/fuzzers/api_fuzzer_corpus/ffc74f2184f64032a1f67b5f843a683ea1372b74 new file mode 100644 index 0000000000000000000000000000000000000000..ea81a9f7ec47b0f204b322cbc2b57a1e033e0a95 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/ffc74f2184f64032a1f67b5f843a683ea1372b74 differ diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/full_request.bin b/test/core/end2end/fuzzers/api_fuzzer_corpus/full_request.bin new file mode 100644 index 0000000000000000000000000000000000000000..144e61807a1744016332f77f535b5a2419bf5220 Binary files /dev/null and b/test/core/end2end/fuzzers/api_fuzzer_corpus/full_request.bin differ diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/04bef86965e816c0cd330896ecd981dd3b14275c b/test/core/end2end/fuzzers/client_fuzzer_corpus/04bef86965e816c0cd330896ecd981dd3b14275c new file mode 100644 index 0000000000000000000000000000000000000000..c90168f1d6f4c90b524953c0a14a7a5a457e63e7 Binary files /dev/null and b/test/core/end2end/fuzzers/client_fuzzer_corpus/04bef86965e816c0cd330896ecd981dd3b14275c differ diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/0c6f2e0a2232788cb20c4f52ffa18d7ab8f0b938 b/test/core/end2end/fuzzers/client_fuzzer_corpus/0c6f2e0a2232788cb20c4f52ffa18d7ab8f0b938 new file mode 100644 index 0000000000000000000000000000000000000000..1db6475e047bda677bc5e6e5b91cae61dc477559 Binary files /dev/null and b/test/core/end2end/fuzzers/client_fuzzer_corpus/0c6f2e0a2232788cb20c4f52ffa18d7ab8f0b938 differ diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/1526ac4266e152b029b7c283255fe4fb6507f726 b/test/core/end2end/fuzzers/client_fuzzer_corpus/1526ac4266e152b029b7c283255fe4fb6507f726 new file mode 100644 index 0000000000000000000000000000000000000000..c255893e6534a79fabf2545f16a5691d9ae5a2fc Binary files /dev/null and b/test/core/end2end/fuzzers/client_fuzzer_corpus/1526ac4266e152b029b7c283255fe4fb6507f726 differ diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/15c8bfec99ff18b11211d464c824fc139cc791fd b/test/core/end2end/fuzzers/client_fuzzer_corpus/15c8bfec99ff18b11211d464c824fc139cc791fd new file mode 100644 index 0000000000000000000000000000000000000000..394b1cc6478c9217d09bdd78d1f77c52e6df48cf Binary files /dev/null and b/test/core/end2end/fuzzers/client_fuzzer_corpus/15c8bfec99ff18b11211d464c824fc139cc791fd differ diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/169f579e66b4b8ff423891a40380e648e8d45247 b/test/core/end2end/fuzzers/client_fuzzer_corpus/169f579e66b4b8ff423891a40380e648e8d45247 new file mode 100644 index 0000000000000000000000000000000000000000..7b1498d0812292cd00531ae52abda865d98cd555 Binary files /dev/null and b/test/core/end2end/fuzzers/client_fuzzer_corpus/169f579e66b4b8ff423891a40380e648e8d45247 differ diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/23e8c1377addaf67019ea36a084e0b68ca7a33db b/test/core/end2end/fuzzers/client_fuzzer_corpus/23e8c1377addaf67019ea36a084e0b68ca7a33db new file mode 100644 index 0000000000000000000000000000000000000000..5dd8b4d01c2b5677eee1696afa2f63b9a1d8d49d Binary files /dev/null and b/test/core/end2end/fuzzers/client_fuzzer_corpus/23e8c1377addaf67019ea36a084e0b68ca7a33db differ diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/25d2969baf8bd256e15b2ab72707682b2d18b40a b/test/core/end2end/fuzzers/client_fuzzer_corpus/25d2969baf8bd256e15b2ab72707682b2d18b40a new file mode 100644 index 0000000000000000000000000000000000000000..5a8b49dcbfe2c6751ce43b48e9e279746be7dc83 Binary files /dev/null and b/test/core/end2end/fuzzers/client_fuzzer_corpus/25d2969baf8bd256e15b2ab72707682b2d18b40a differ diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/2862adc802092f1a422416a1666a5142f71d5d7f b/test/core/end2end/fuzzers/client_fuzzer_corpus/2862adc802092f1a422416a1666a5142f71d5d7f new file mode 100644 index 0000000000000000000000000000000000000000..04f59c7309ca8175bb037218f7f05f7f107430ef Binary files /dev/null and b/test/core/end2end/fuzzers/client_fuzzer_corpus/2862adc802092f1a422416a1666a5142f71d5d7f differ diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/28680d04887f96a1167dd913573ec8daa2a39625 b/test/core/end2end/fuzzers/client_fuzzer_corpus/28680d04887f96a1167dd913573ec8daa2a39625 new file mode 100644 index 0000000000000000000000000000000000000000..8cf466e55c90b9ebadc7c09fe4f0245d9b4b646a Binary files /dev/null and b/test/core/end2end/fuzzers/client_fuzzer_corpus/28680d04887f96a1167dd913573ec8daa2a39625 differ diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/28f54e558b181e294e101447c7a79d976fe36fcb b/test/core/end2end/fuzzers/client_fuzzer_corpus/28f54e558b181e294e101447c7a79d976fe36fcb new file mode 100644 index 0000000000000000000000000000000000000000..88efbe2b34e1e1795615e7a063c5b4389d973518 Binary files /dev/null and b/test/core/end2end/fuzzers/client_fuzzer_corpus/28f54e558b181e294e101447c7a79d976fe36fcb differ diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/3c01b1f89d50fa37fcb3457cd3dd6502fe84e25b b/test/core/end2end/fuzzers/client_fuzzer_corpus/3c01b1f89d50fa37fcb3457cd3dd6502fe84e25b new file mode 100644 index 0000000000000000000000000000000000000000..11152e5881566d04fd75da387aff5d78deccba4c Binary files /dev/null and b/test/core/end2end/fuzzers/client_fuzzer_corpus/3c01b1f89d50fa37fcb3457cd3dd6502fe84e25b differ diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/4097094277bc09981f428280fc0cc0f590f20ded b/test/core/end2end/fuzzers/client_fuzzer_corpus/4097094277bc09981f428280fc0cc0f590f20ded new file mode 100644 index 0000000000000000000000000000000000000000..4bbae55adaeeb219a25a27204ed5170715e13031 Binary files /dev/null and b/test/core/end2end/fuzzers/client_fuzzer_corpus/4097094277bc09981f428280fc0cc0f590f20ded differ diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/44b6be630161765a3de5872629602ca14789c3bd b/test/core/end2end/fuzzers/client_fuzzer_corpus/44b6be630161765a3de5872629602ca14789c3bd new file mode 100644 index 0000000000000000000000000000000000000000..45628daddc38f4594bfb18072322a7d76a03ce62 Binary files /dev/null and b/test/core/end2end/fuzzers/client_fuzzer_corpus/44b6be630161765a3de5872629602ca14789c3bd differ diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/49c5568cb0de363bc9f9298f1eacaace6c8a268a b/test/core/end2end/fuzzers/client_fuzzer_corpus/49c5568cb0de363bc9f9298f1eacaace6c8a268a new file mode 100644 index 0000000000000000000000000000000000000000..ee05f831a9ecccf6e6e6db539d6b8a7cfda8c141 Binary files /dev/null and b/test/core/end2end/fuzzers/client_fuzzer_corpus/49c5568cb0de363bc9f9298f1eacaace6c8a268a differ diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/54555ceac4403855f4cf20367f7be05714c46c51 b/test/core/end2end/fuzzers/client_fuzzer_corpus/54555ceac4403855f4cf20367f7be05714c46c51 new file mode 100644 index 0000000000000000000000000000000000000000..f075bd0c2b64bef810a69f3aaa6efd4f18bf77de Binary files /dev/null and b/test/core/end2end/fuzzers/client_fuzzer_corpus/54555ceac4403855f4cf20367f7be05714c46c51 differ diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/5821752bf8923fdaebc8484662624d8acd382716 b/test/core/end2end/fuzzers/client_fuzzer_corpus/5821752bf8923fdaebc8484662624d8acd382716 new file mode 100644 index 0000000000000000000000000000000000000000..599622a5af3307df11978b28659d36887f478029 Binary files /dev/null and b/test/core/end2end/fuzzers/client_fuzzer_corpus/5821752bf8923fdaebc8484662624d8acd382716 differ diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/59d28886db21f371ac9d999b68b116bcf425d971 b/test/core/end2end/fuzzers/client_fuzzer_corpus/59d28886db21f371ac9d999b68b116bcf425d971 new file mode 100644 index 0000000000000000000000000000000000000000..8b16036919b63916c2baf78d2ea613ffcde8b3cb Binary files /dev/null and b/test/core/end2end/fuzzers/client_fuzzer_corpus/59d28886db21f371ac9d999b68b116bcf425d971 differ diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/690158fb146f7f3b3ea820979307a8d8e6f38314 b/test/core/end2end/fuzzers/client_fuzzer_corpus/690158fb146f7f3b3ea820979307a8d8e6f38314 new file mode 100644 index 0000000000000000000000000000000000000000..e914451c9df494290fe4734da3803a7818ed5b32 Binary files /dev/null and b/test/core/end2end/fuzzers/client_fuzzer_corpus/690158fb146f7f3b3ea820979307a8d8e6f38314 differ diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/6ca3910d5f4f7967311853724b072750716dcb48 b/test/core/end2end/fuzzers/client_fuzzer_corpus/6ca3910d5f4f7967311853724b072750716dcb48 new file mode 100644 index 0000000000000000000000000000000000000000..b9d87632a2e1fd543047aa674ecebfac9eb56db5 Binary files /dev/null and b/test/core/end2end/fuzzers/client_fuzzer_corpus/6ca3910d5f4f7967311853724b072750716dcb48 differ diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/6f30de3096eb71f697885fdd9cbddd9ee6ce46c4 b/test/core/end2end/fuzzers/client_fuzzer_corpus/6f30de3096eb71f697885fdd9cbddd9ee6ce46c4 new file mode 100644 index 0000000000000000000000000000000000000000..fff1abbd0ae0db493f967d66a4830ce07757f441 Binary files /dev/null and b/test/core/end2end/fuzzers/client_fuzzer_corpus/6f30de3096eb71f697885fdd9cbddd9ee6ce46c4 differ diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/7f1530d4b702e68d043f89d9e63d314319dcd803 b/test/core/end2end/fuzzers/client_fuzzer_corpus/7f1530d4b702e68d043f89d9e63d314319dcd803 new file mode 100644 index 0000000000000000000000000000000000000000..cee4bfafcffa0c7f0876eaf245e4fe343c7fd452 Binary files /dev/null and b/test/core/end2end/fuzzers/client_fuzzer_corpus/7f1530d4b702e68d043f89d9e63d314319dcd803 differ diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/85a7e47ef707d3b31cad924ed6c697c3678ab569 b/test/core/end2end/fuzzers/client_fuzzer_corpus/85a7e47ef707d3b31cad924ed6c697c3678ab569 new file mode 100644 index 0000000000000000000000000000000000000000..4606930163e0b8e4ff48f06f9e43f1ae9c099b9b Binary files /dev/null and b/test/core/end2end/fuzzers/client_fuzzer_corpus/85a7e47ef707d3b31cad924ed6c697c3678ab569 differ diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/911e2ea20b6c10431e48f70d9933987815926a9d b/test/core/end2end/fuzzers/client_fuzzer_corpus/911e2ea20b6c10431e48f70d9933987815926a9d new file mode 100644 index 0000000000000000000000000000000000000000..d99f977858273bab32e4345755f175e4570742e7 Binary files /dev/null and b/test/core/end2end/fuzzers/client_fuzzer_corpus/911e2ea20b6c10431e48f70d9933987815926a9d differ diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/93ac93b7deabdfb4f86eb37a1e9f6669957d14a6 b/test/core/end2end/fuzzers/client_fuzzer_corpus/93ac93b7deabdfb4f86eb37a1e9f6669957d14a6 new file mode 100644 index 0000000000000000000000000000000000000000..1eeb93dd8a312fc52fb84cc96ce32ce61e8cf763 Binary files /dev/null and b/test/core/end2end/fuzzers/client_fuzzer_corpus/93ac93b7deabdfb4f86eb37a1e9f6669957d14a6 differ diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/9eaf2ad607a943141c29f334b2c66c2e59e99980 b/test/core/end2end/fuzzers/client_fuzzer_corpus/9eaf2ad607a943141c29f334b2c66c2e59e99980 new file mode 100644 index 0000000000000000000000000000000000000000..300668149bc2c08f64b2406633ad43b05aabb903 Binary files /dev/null and b/test/core/end2end/fuzzers/client_fuzzer_corpus/9eaf2ad607a943141c29f334b2c66c2e59e99980 differ diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/a210d629c305b89a34b7ff3c41ae4566cd22186b b/test/core/end2end/fuzzers/client_fuzzer_corpus/a210d629c305b89a34b7ff3c41ae4566cd22186b new file mode 100644 index 0000000000000000000000000000000000000000..07aab36bd319fec98fdb7bc079f8acc5f90e3b72 Binary files /dev/null and b/test/core/end2end/fuzzers/client_fuzzer_corpus/a210d629c305b89a34b7ff3c41ae4566cd22186b differ diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/a29a547671badd3154789e1a02bdb87332fcd6a4 b/test/core/end2end/fuzzers/client_fuzzer_corpus/a29a547671badd3154789e1a02bdb87332fcd6a4 new file mode 100644 index 0000000000000000000000000000000000000000..a2cd476778fd2da453cf8ca4aa905c04f796c0c6 Binary files /dev/null and b/test/core/end2end/fuzzers/client_fuzzer_corpus/a29a547671badd3154789e1a02bdb87332fcd6a4 differ diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/a5592f15d5424ab7e16a18e77027ab91c846d90a b/test/core/end2end/fuzzers/client_fuzzer_corpus/a5592f15d5424ab7e16a18e77027ab91c846d90a new file mode 100644 index 0000000000000000000000000000000000000000..4b62307f5132f421489e9ec3fd790974a4671c8e Binary files /dev/null and b/test/core/end2end/fuzzers/client_fuzzer_corpus/a5592f15d5424ab7e16a18e77027ab91c846d90a differ diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/a5cf80b996b2ba8c9580f8ecd22720c48de41044 b/test/core/end2end/fuzzers/client_fuzzer_corpus/a5cf80b996b2ba8c9580f8ecd22720c48de41044 new file mode 100644 index 0000000000000000000000000000000000000000..64f99239d35e574d9a0ad4d1f26d6ed2a8e95a54 Binary files /dev/null and b/test/core/end2end/fuzzers/client_fuzzer_corpus/a5cf80b996b2ba8c9580f8ecd22720c48de41044 differ diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/b24c25c6d4b57a5f3d64a0adb205bf4f150c9138 b/test/core/end2end/fuzzers/client_fuzzer_corpus/b24c25c6d4b57a5f3d64a0adb205bf4f150c9138 new file mode 100644 index 0000000000000000000000000000000000000000..43de9548d2ff01b5f3beed28a49b7c9ab8952d66 Binary files /dev/null and b/test/core/end2end/fuzzers/client_fuzzer_corpus/b24c25c6d4b57a5f3d64a0adb205bf4f150c9138 differ diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/beabbe93f1e9b2e56f729af30559ec03a00f53fa b/test/core/end2end/fuzzers/client_fuzzer_corpus/beabbe93f1e9b2e56f729af30559ec03a00f53fa new file mode 100644 index 0000000000000000000000000000000000000000..d248d893542974897fcc1c4f4689ade5da8dacb7 Binary files /dev/null and b/test/core/end2end/fuzzers/client_fuzzer_corpus/beabbe93f1e9b2e56f729af30559ec03a00f53fa differ diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/cbe59c62c6d36c7307c438159327e320cd2fcf57 b/test/core/end2end/fuzzers/client_fuzzer_corpus/cbe59c62c6d36c7307c438159327e320cd2fcf57 new file mode 100644 index 0000000000000000000000000000000000000000..872bc35e3c6959fc88a25d467cc735394ef8a1b5 Binary files /dev/null and b/test/core/end2end/fuzzers/client_fuzzer_corpus/cbe59c62c6d36c7307c438159327e320cd2fcf57 differ diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/ce1c326f3b0147841550ce3b5126390764bae8e8 b/test/core/end2end/fuzzers/client_fuzzer_corpus/ce1c326f3b0147841550ce3b5126390764bae8e8 new file mode 100644 index 0000000000000000000000000000000000000000..5de9280d6e593c95bb8474982ba763d3d1691d46 Binary files /dev/null and b/test/core/end2end/fuzzers/client_fuzzer_corpus/ce1c326f3b0147841550ce3b5126390764bae8e8 differ diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/d21ca2b01baa21a666257d1a1e0275587eeb565d b/test/core/end2end/fuzzers/client_fuzzer_corpus/d21ca2b01baa21a666257d1a1e0275587eeb565d new file mode 100644 index 0000000000000000000000000000000000000000..40e396166021a9fe66bd6d4265b412ddc4ba89e4 Binary files /dev/null and b/test/core/end2end/fuzzers/client_fuzzer_corpus/d21ca2b01baa21a666257d1a1e0275587eeb565d differ diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/d2f71a800612876010558ce804c9a72ad0a1b9fc b/test/core/end2end/fuzzers/client_fuzzer_corpus/d2f71a800612876010558ce804c9a72ad0a1b9fc new file mode 100644 index 0000000000000000000000000000000000000000..b501115d6c221ef2f1c2c7255277d794e93e2a3f Binary files /dev/null and b/test/core/end2end/fuzzers/client_fuzzer_corpus/d2f71a800612876010558ce804c9a72ad0a1b9fc differ diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/d637cc9387087de633b9db535d19f64795c43be1 b/test/core/end2end/fuzzers/client_fuzzer_corpus/d637cc9387087de633b9db535d19f64795c43be1 new file mode 100644 index 0000000000000000000000000000000000000000..a43faf9a63e2698f7b2e034837b7ce751e499414 Binary files /dev/null and b/test/core/end2end/fuzzers/client_fuzzer_corpus/d637cc9387087de633b9db535d19f64795c43be1 differ diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/dd5ac34f5b220970447b2733848de78570c47883 b/test/core/end2end/fuzzers/client_fuzzer_corpus/dd5ac34f5b220970447b2733848de78570c47883 new file mode 100644 index 0000000000000000000000000000000000000000..848969dbf61f912fdfd742f4bee2b6f16b8168f1 Binary files /dev/null and b/test/core/end2end/fuzzers/client_fuzzer_corpus/dd5ac34f5b220970447b2733848de78570c47883 differ diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/f2a6bb4e0137541e2b140b976764377d07d822d6 b/test/core/end2end/fuzzers/client_fuzzer_corpus/f2a6bb4e0137541e2b140b976764377d07d822d6 new file mode 100644 index 0000000000000000000000000000000000000000..8af994ef3fb375924ba83c2ea82234ccba4d2a61 Binary files /dev/null and b/test/core/end2end/fuzzers/client_fuzzer_corpus/f2a6bb4e0137541e2b140b976764377d07d822d6 differ diff --git a/test/core/end2end/gen_build_yaml.py b/test/core/end2end/gen_build_yaml.py index 8e8f20313532d12d4a82f8ec20b4f113b85a3134..cf1ba7c68eeca1ff6a3fbcba06429131195ddf0e 100755 --- a/test/core/end2end/gen_build_yaml.py +++ b/test/core/end2end/gen_build_yaml.py @@ -39,9 +39,9 @@ import hashlib FixtureOptions = collections.namedtuple( 'FixtureOptions', - 'fullstack includes_proxy dns_resolver secure platforms ci_mac tracing') + 'fullstack includes_proxy dns_resolver secure platforms ci_mac tracing exclude_configs') default_unsecure_fixture_options = FixtureOptions( - True, False, True, False, ['windows', 'linux', 'mac', 'posix'], True, False) + True, False, True, False, ['windows', 'linux', 'mac', 'posix'], True, False, []) socketpair_unsecure_fixture_options = default_unsecure_fixture_options._replace(fullstack=False, dns_resolver=False) default_secure_fixture_options = default_unsecure_fixture_options._replace(secure=True) uds_fixture_options = default_unsecure_fixture_options._replace(dns_resolver=False, platforms=['linux', 'mac', 'posix']) @@ -61,7 +61,7 @@ END2END_FIXTURES = { 'h2_proxy': default_unsecure_fixture_options._replace(includes_proxy=True, ci_mac=False), 'h2_sockpair_1byte': socketpair_unsecure_fixture_options._replace( - ci_mac=False), + ci_mac=False, exclude_configs=['msan']), 'h2_sockpair': socketpair_unsecure_fixture_options._replace(ci_mac=False), 'h2_sockpair+trace': socketpair_unsecure_fixture_options._replace( ci_mac=False, tracing=True), @@ -247,7 +247,7 @@ def main(): { 'name': '%s_nosec_test' % f, 'args': [t], - 'exclude_configs': [], + 'exclude_configs': END2END_FIXTURES[f].exclude_configs, 'platforms': END2END_FIXTURES[f].platforms, 'ci_platforms': (END2END_FIXTURES[f].platforms if END2END_FIXTURES[f].ci_mac else without( diff --git a/test/core/end2end/tests/large_metadata.c b/test/core/end2end/tests/large_metadata.c index 0e5d6b4fe012a2d87144141823f5db179e3d181f..ae1f68a2b452d3b8fd5879502e47ae9e451386ae 100644 --- a/test/core/end2end/tests/large_metadata.c +++ b/test/core/end2end/tests/large_metadata.c @@ -97,7 +97,7 @@ static void end_test(grpc_end2end_test_fixture *f) { grpc_completion_queue_destroy(f->cq); } -/* Request with a large amount of metadata.*/ +// Request with a large amount of metadata. static void test_request_with_large_metadata(grpc_end2end_test_config config) { grpc_call *c; grpc_call *s; @@ -106,8 +106,13 @@ static void test_request_with_large_metadata(grpc_end2end_test_config config) { grpc_raw_byte_buffer_create(&request_payload_slice, 1); gpr_timespec deadline = five_seconds_time(); grpc_metadata meta; + const size_t large_size = 64 * 1024; + grpc_arg arg = {GRPC_ARG_INTEGER, + GRPC_ARG_MAX_METADATA_SIZE, + {.integer = (int)large_size + 1024}}; + grpc_channel_args args = {1, &arg}; grpc_end2end_test_fixture f = - begin_test(config, "test_request_with_large_metadata", NULL, NULL); + begin_test(config, "test_request_with_large_metadata", &args, &args); cq_verifier *cqv = cq_verifier_create(f.cq); grpc_op ops[6]; grpc_op *op; @@ -121,7 +126,6 @@ static void test_request_with_large_metadata(grpc_end2end_test_config config) { char *details = NULL; size_t details_capacity = 0; int was_cancelled = 2; - const size_t large_size = 64 * 1024; c = grpc_channel_create_call(f.client, NULL, GRPC_PROPAGATE_DEFAULTS, f.cq, "/foo", "foo.test.google.fr", deadline, NULL); @@ -138,6 +142,7 @@ static void test_request_with_large_metadata(grpc_end2end_test_config config) { grpc_metadata_array_init(&request_metadata_recv); grpc_call_details_init(&call_details); + // Client: send request. op = ops; op->op = GRPC_OP_SEND_INITIAL_METADATA; op->data.send_initial_metadata.count = 1; @@ -174,9 +179,11 @@ static void test_request_with_large_metadata(grpc_end2end_test_config config) { grpc_server_request_call(f.server, &s, &call_details, &request_metadata_recv, f.cq, f.cq, tag(101)); GPR_ASSERT(GRPC_CALL_OK == error); + cq_expect_completion(cqv, tag(101), 1); cq_verify(cqv); + // Server: send initial metadata and receive request. op = ops; op->op = GRPC_OP_SEND_INITIAL_METADATA; op->data.send_initial_metadata.count = 0; @@ -194,6 +201,8 @@ static void test_request_with_large_metadata(grpc_end2end_test_config config) { cq_expect_completion(cqv, tag(102), 1); cq_verify(cqv); + // Server: receive close and send status. This should trigger + // completion of request on client. op = ops; op->op = GRPC_OP_RECV_CLOSE_ON_SERVER; op->data.recv_close_on_server.cancelled = &was_cancelled; diff --git a/test/core/end2end/tests/max_message_length.c b/test/core/end2end/tests/max_message_length.c index b5dbc1382a84268ada53ffe4b2aed5c20d5f552a..4f572789d9551aa3e4d8cf148aa685b8e10998e8 100644 --- a/test/core/end2end/tests/max_message_length.c +++ b/test/core/end2end/tests/max_message_length.c @@ -53,7 +53,10 @@ static grpc_end2end_test_fixture begin_test(grpc_end2end_test_config config, grpc_channel_args *server_args) { grpc_end2end_test_fixture f; gpr_log(GPR_INFO, "%s/%s", test_name, config.name); - f = config.create_fixture(client_args, server_args); + // We intentionally do not pass the client and server args to + // create_fixture(), since we don't want the limit enforced on the + // proxy, only on the backend server. + f = config.create_fixture(NULL, NULL); config.init_server(&f, server_args); config.init_client(&f, client_args); return f; diff --git a/test/core/iomgr/udp_server_test.c b/test/core/iomgr/udp_server_test.c index 5248b613d73c4a3462be7e63de4d464cb4c4de2d..3152fb7a464784eb814028dd622617680843a2c1 100644 --- a/test/core/iomgr/udp_server_test.c +++ b/test/core/iomgr/udp_server_test.c @@ -32,20 +32,22 @@ */ #include "src/core/lib/iomgr/udp_server.h" + +#include <netinet/in.h> +#include <string.h> +#include <sys/socket.h> +#include <unistd.h> + #include <grpc/grpc.h> #include <grpc/support/alloc.h> #include <grpc/support/log.h> #include <grpc/support/sync.h> #include <grpc/support/time.h> + #include "src/core/lib/iomgr/ev_posix.h" #include "src/core/lib/iomgr/iomgr.h" #include "test/core/util/test_config.h" -#include <netinet/in.h> -#include <string.h> -#include <sys/socket.h> -#include <unistd.h> - #ifdef GRPC_NEED_UDP #define LOG_TEST(x) gpr_log(GPR_INFO, "%s", #x) @@ -54,6 +56,7 @@ static grpc_pollset *g_pollset; static gpr_mu *g_mu; static int g_number_of_reads = 0; static int g_number_of_bytes_read = 0; +static int g_number_of_orphan_calls = 0; static void on_read(grpc_exec_ctx *exec_ctx, grpc_fd *emfd, grpc_server *server) { @@ -71,6 +74,12 @@ static void on_read(grpc_exec_ctx *exec_ctx, grpc_fd *emfd, gpr_mu_unlock(g_mu); } +static void on_fd_orphaned(grpc_fd *emfd) { + gpr_log(GPR_INFO, "gRPC FD about to be orphaned: %d", + grpc_fd_wrapped_fd(emfd)); + g_number_of_orphan_calls++; +} + static void test_no_op(void) { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; grpc_udp_server *s = grpc_udp_server_create(); @@ -88,6 +97,7 @@ static void test_no_op_with_start(void) { } static void test_no_op_with_port(void) { + g_number_of_orphan_calls = 0; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; struct sockaddr_in addr; grpc_udp_server *s = grpc_udp_server_create(); @@ -96,13 +106,17 @@ static void test_no_op_with_port(void) { memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; GPR_ASSERT(grpc_udp_server_add_port(s, (struct sockaddr *)&addr, sizeof(addr), - on_read)); + on_read, on_fd_orphaned)); grpc_udp_server_destroy(&exec_ctx, s, NULL); grpc_exec_ctx_finish(&exec_ctx); + + /* The server had a single FD, which should have been orphaned. */ + GPR_ASSERT(g_number_of_orphan_calls == 1); } static void test_no_op_with_port_and_start(void) { + g_number_of_orphan_calls = 0; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; struct sockaddr_in addr; grpc_udp_server *s = grpc_udp_server_create(); @@ -111,12 +125,15 @@ static void test_no_op_with_port_and_start(void) { memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; GPR_ASSERT(grpc_udp_server_add_port(s, (struct sockaddr *)&addr, sizeof(addr), - on_read)); + on_read, on_fd_orphaned)); grpc_udp_server_start(&exec_ctx, s, NULL, 0, NULL); grpc_udp_server_destroy(&exec_ctx, s, NULL); grpc_exec_ctx_finish(&exec_ctx); + + /* The server had a single FD, which should have been orphaned. */ + GPR_ASSERT(g_number_of_orphan_calls == 1); } static void test_receive(int number_of_clients) { @@ -133,11 +150,12 @@ static void test_receive(int number_of_clients) { gpr_log(GPR_INFO, "clients=%d", number_of_clients); g_number_of_bytes_read = 0; + g_number_of_orphan_calls = 0; memset(&addr, 0, sizeof(addr)); addr.ss_family = AF_INET; - GPR_ASSERT( - grpc_udp_server_add_port(s, (struct sockaddr *)&addr, addr_len, on_read)); + GPR_ASSERT(grpc_udp_server_add_port(s, (struct sockaddr *)&addr, addr_len, + on_read, on_fd_orphaned)); svrfd = grpc_udp_server_get_fd(s, 0); GPR_ASSERT(svrfd >= 0); @@ -176,6 +194,9 @@ static void test_receive(int number_of_clients) { grpc_udp_server_destroy(&exec_ctx, s, NULL); grpc_exec_ctx_finish(&exec_ctx); + + /* The server had a single FD, which should have been orphaned. */ + GPR_ASSERT(g_number_of_orphan_calls == 1); } static void destroy_pollset(grpc_exec_ctx *exec_ctx, void *p, bool success) { diff --git a/test/core/iomgr/workqueue_test.c b/test/core/iomgr/workqueue_test.c index 874e696fc2f1ee8fd3a22774a920f2d693627400..953cc35ee6f77a56dad0044697d4155a186177d3 100644 --- a/test/core/iomgr/workqueue_test.c +++ b/test/core/iomgr/workqueue_test.c @@ -73,8 +73,10 @@ static void test_add_closure(void) { gpr_mu_lock(g_mu); GPR_ASSERT(!done); - grpc_pollset_work(&exec_ctx, g_pollset, &worker, gpr_now(deadline.clock_type), - deadline); + while (!done) { + grpc_pollset_work(&exec_ctx, g_pollset, &worker, + gpr_now(deadline.clock_type), deadline); + } gpr_mu_unlock(g_mu); grpc_exec_ctx_finish(&exec_ctx); GPR_ASSERT(done); @@ -97,9 +99,10 @@ static void test_flush(void) { grpc_workqueue_add_to_pollset(&exec_ctx, wq, g_pollset); gpr_mu_lock(g_mu); - GPR_ASSERT(!done); - grpc_pollset_work(&exec_ctx, g_pollset, &worker, gpr_now(deadline.clock_type), - deadline); + while (!done) { + grpc_pollset_work(&exec_ctx, g_pollset, &worker, + gpr_now(deadline.clock_type), deadline); + } gpr_mu_unlock(g_mu); grpc_exec_ctx_finish(&exec_ctx); GPR_ASSERT(done); diff --git a/test/core/surface/public_headers_must_be_c89.c b/test/core/surface/public_headers_must_be_c89.c index 0eede6c23bdbbf6aa4bb0633c9606fb299c2fa4d..fd6ff2c26f5ecca7a8654232a6fdf056370f446b 100644 --- a/test/core/surface/public_headers_must_be_c89.c +++ b/test/core/surface/public_headers_must_be_c89.c @@ -36,11 +36,13 @@ #include <grpc/census.h> #include <grpc/compression.h> #include <grpc/grpc.h> +#include <grpc/grpc_cronet.h> #include <grpc/grpc_security.h> #include <grpc/grpc_security_constants.h> #include <grpc/impl/codegen/alloc.h> #include <grpc/impl/codegen/atm.h> #include <grpc/impl/codegen/byte_buffer.h> +#include <grpc/impl/codegen/byte_buffer_reader.h> #include <grpc/impl/codegen/compression_types.h> #include <grpc/impl/codegen/connectivity_state.h> #include <grpc/impl/codegen/grpc_types.h> diff --git a/test/core/util/port.h b/test/core/util/port.h index 93788bcab242cd81936d4fff591de3e0e5fb0854..faeabbae9b1fa39f1d7a1c9aeae91d96c6575d65 100644 --- a/test/core/util/port.h +++ b/test/core/util/port.h @@ -40,10 +40,16 @@ extern "C" { /* pick a port number that is currently unused by either tcp or udp. return 0 on failure. */ -int grpc_pick_unused_port(); +int grpc_pick_unused_port(void); /* pick a port number that is currently unused by either tcp or udp. abort on failure. */ -int grpc_pick_unused_port_or_die(); +int grpc_pick_unused_port_or_die(void); + +/* Return a port which was previously returned by grpc_pick_unused_port(). + * Implementations of grpc_pick_unused_port() backed by a portserver may limit + * the total number of ports available; this lets a binary return its allocated + * ports back to the server if it is going to allocate a large number. */ +void grpc_recycle_unused_port(int port); #ifdef __cplusplus } diff --git a/test/core/util/port_posix.c b/test/core/util/port_posix.c index eabd62fafc743c153f4bc9d38235237439bc2201..265e0acee1484a1390f89fdd107a8376570f7f7e 100644 --- a/test/core/util/port_posix.c +++ b/test/core/util/port_posix.c @@ -68,6 +68,31 @@ static int has_port_been_chosen(int port) { return 0; } +static int free_chosen_port(int port) { + size_t i; + int found = 0; + size_t found_at = 0; + char *env = gpr_getenv("GRPC_TEST_PORT_SERVER"); + /* Find the port and erase it from the list, then tell the server it can be + freed. */ + for (i = 0; i < num_chosen_ports; i++) { + if (chosen_ports[i] == port) { + GPR_ASSERT(found == 0); + found = 1; + found_at = i; + } + } + if (found) { + chosen_ports[found_at] = chosen_ports[num_chosen_ports - 1]; + num_chosen_ports--; + if (env) { + grpc_free_port_using_server(env, port); + } + } + gpr_free(env); + return found; +} + static void free_chosen_ports(void) { char *env = gpr_getenv("GRPC_TEST_PORT_SERVER"); if (env != NULL) { @@ -210,4 +235,6 @@ int grpc_pick_unused_port_or_die(void) { return port; } +void grpc_recycle_unused_port(int port) { GPR_ASSERT(free_chosen_port(port)); } + #endif /* GPR_POSIX_SOCKET && GRPC_TEST_PICK_PORT */ diff --git a/test/core/util/port_windows.c b/test/core/util/port_windows.c index 154d607ec7c545c62ebcc2ecd4e3d20ac982d257..9023719675824840b55fb60ad506f3653e9cf4fb 100644 --- a/test/core/util/port_windows.c +++ b/test/core/util/port_windows.c @@ -71,6 +71,30 @@ static int has_port_been_chosen(int port) { return 0; } +static int free_chosen_port(int port) { + size_t i; + int found = 0; + size_t found_at = 0; + char *env = gpr_getenv("GRPC_TEST_PORT_SERVER"); + if (env != NULL) { + /* Find the port and erase it from the list, then tell the server it can be + freed. */ + for (i = 0; i < num_chosen_ports; i++) { + if (chosen_ports[i] == port) { + GPR_ASSERT(found == 0); + found = 1; + found_at = i; + } + } + if (found) { + chosen_ports[found_at] = chosen_ports[num_chosen_ports - 1]; + grpc_free_port_using_server(env, port); + num_chosen_ports--; + } + } + return found; +} + static void free_chosen_ports(void) { char *env = gpr_getenv("GRPC_TEST_PORT_SERVER"); if (env != NULL) { @@ -216,4 +240,6 @@ int grpc_pick_unused_port_or_die(void) { return port; } +void grpc_recycle_unused_port(int port) { GPR_ASSERT(free_chosen_port(port)); } + #endif /* GPR_WINSOCK_SOCKET && GRPC_TEST_PICK_PORT */ diff --git a/test/cpp/end2end/async_end2end_test.cc b/test/cpp/end2end/async_end2end_test.cc index 7e4d6046d6048cb593a80cf1c69a0e0509856b7c..45f5eb1ddd847c8aa8e97a32fad9f9045af23e8d 100644 --- a/test/cpp/end2end/async_end2end_test.cc +++ b/test/cpp/end2end/async_end2end_test.cc @@ -51,6 +51,7 @@ #include "test/core/util/port.h" #include "test/core/util/test_config.h" #include "test/cpp/util/string_ref_helper.h" +#include "test/cpp/util/test_credentials_provider.h" #ifdef GPR_POSIX_SOCKET #include "src/core/lib/iomgr/ev_posix.h" @@ -58,6 +59,7 @@ using grpc::testing::EchoRequest; using grpc::testing::EchoResponse; +using grpc::testing::kTlsCredentialsType; using std::chrono::system_clock; GPR_TLS_DECL(g_is_async_end2end_test); @@ -197,22 +199,67 @@ class Verifier { bool spin_; }; -class AsyncEnd2endTest : public ::testing::TestWithParam<bool> { +// This class disables the server builder plugins that may add sync services to +// the server. If there are sync services, UnimplementedRpc test will triger +// the sync unkown rpc routine on the server side, rather than the async one +// that needs to be tested here. +class ServerBuilderSyncPluginDisabler : public ::grpc::ServerBuilderOption { + public: + void UpdateArguments(ChannelArguments* arg) GRPC_OVERRIDE {} + + void UpdatePlugins( + std::map<grpc::string, std::unique_ptr<ServerBuilderPlugin>>* plugins) + GRPC_OVERRIDE { + auto plugin = plugins->begin(); + while (plugin != plugins->end()) { + if ((*plugin).second->has_sync_methods()) { + plugins->erase(plugin++); + } else { + plugin++; + } + } + } +}; + +class TestScenario { + public: + TestScenario(bool non_block, const grpc::string& creds_type, + const grpc::string& content) + : disable_blocking(non_block), + credentials_type(creds_type), + message_content(content) {} + void Log() const { + gpr_log(GPR_INFO, + "Scenario: disable_blocking %d, credentials %s, message size %d", + disable_blocking, credentials_type.c_str(), message_content.size()); + } + bool disable_blocking; + const grpc::string credentials_type; + const grpc::string message_content; +}; + +class AsyncEnd2endTest : public ::testing::TestWithParam<TestScenario> { protected: - AsyncEnd2endTest() {} + AsyncEnd2endTest() { GetParam().Log(); } void SetUp() GRPC_OVERRIDE { - poll_overrider_.reset(new PollingOverrider(!GetParam())); + poll_overrider_.reset(new PollingOverrider(!GetParam().disable_blocking)); - int port = grpc_pick_unused_port_or_die(); - server_address_ << "localhost:" << port; + port_ = grpc_pick_unused_port_or_die(); + server_address_ << "localhost:" << port_; // Setup server ServerBuilder builder; - builder.AddListeningPort(server_address_.str(), - grpc::InsecureServerCredentials()); + auto server_creds = GetServerCredentials(GetParam().credentials_type); + builder.AddListeningPort(server_address_.str(), server_creds); builder.RegisterService(&service_); cq_ = builder.AddCompletionQueue(); + + // TODO(zyc): make a test option to choose wheather sync plugins should be + // deleted + std::unique_ptr<ServerBuilderOption> sync_plugin_disabler( + new ServerBuilderSyncPluginDisabler()); + builder.SetOption(move(sync_plugin_disabler)); server_ = builder.BuildAndStart(); gpr_tls_set(&g_is_async_end2end_test, 1); @@ -227,11 +274,15 @@ class AsyncEnd2endTest : public ::testing::TestWithParam<bool> { ; poll_overrider_.reset(); gpr_tls_set(&g_is_async_end2end_test, 0); + grpc_recycle_unused_port(port_); } void ResetStub() { + ChannelArguments args; + auto channel_creds = + GetChannelCredentials(GetParam().credentials_type, &args); std::shared_ptr<Channel> channel = - CreateChannel(server_address_.str(), InsecureChannelCredentials()); + CreateCustomChannel(server_address_.str(), channel_creds, args); stub_ = grpc::testing::EchoTestService::NewStub(channel); } @@ -247,22 +298,23 @@ class AsyncEnd2endTest : public ::testing::TestWithParam<bool> { ServerContext srv_ctx; grpc::ServerAsyncResponseWriter<EchoResponse> response_writer(&srv_ctx); - send_request.set_message("Hello"); + send_request.set_message(GetParam().message_content); std::unique_ptr<ClientAsyncResponseReader<EchoResponse>> response_reader( stub_->AsyncEcho(&cli_ctx, send_request, cq_.get())); service_.RequestEcho(&srv_ctx, &recv_request, &response_writer, cq_.get(), cq_.get(), tag(2)); - Verifier(GetParam()).Expect(2, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking).Expect(2, true).Verify(cq_.get()); EXPECT_EQ(send_request.message(), recv_request.message()); send_response.set_message(recv_request.message()); response_writer.Finish(send_response, Status::OK, tag(3)); - Verifier(GetParam()).Expect(3, true).Verify(cq_.get()); - response_reader->Finish(&recv_response, &recv_status, tag(4)); - Verifier(GetParam()).Expect(4, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking) + .Expect(3, true) + .Expect(4, true) + .Verify(cq_.get()); EXPECT_EQ(send_response.message(), recv_response.message()); EXPECT_TRUE(recv_status.ok()); @@ -274,6 +326,7 @@ class AsyncEnd2endTest : public ::testing::TestWithParam<bool> { std::unique_ptr<Server> server_; grpc::testing::EchoTestService::AsyncService service_; std::ostringstream server_address_; + int port_; std::unique_ptr<PollingOverrider> poll_overrider_; }; @@ -302,7 +355,7 @@ TEST_P(AsyncEnd2endTest, AsyncNextRpc) { ServerContext srv_ctx; grpc::ServerAsyncResponseWriter<EchoResponse> response_writer(&srv_ctx); - send_request.set_message("Hello"); + send_request.set_message(GetParam().message_content); std::unique_ptr<ClientAsyncResponseReader<EchoResponse>> response_reader( stub_->AsyncEcho(&cli_ctx, send_request, cq_.get())); @@ -310,23 +363,22 @@ TEST_P(AsyncEnd2endTest, AsyncNextRpc) { std::chrono::system_clock::now()); std::chrono::system_clock::time_point time_limit( std::chrono::system_clock::now() + std::chrono::seconds(10)); - Verifier(GetParam()).Verify(cq_.get(), time_now); - Verifier(GetParam()).Verify(cq_.get(), time_now); + Verifier(GetParam().disable_blocking).Verify(cq_.get(), time_now); + Verifier(GetParam().disable_blocking).Verify(cq_.get(), time_now); service_.RequestEcho(&srv_ctx, &recv_request, &response_writer, cq_.get(), cq_.get(), tag(2)); - Verifier(GetParam()).Expect(2, true).Verify(cq_.get(), time_limit); + Verifier(GetParam().disable_blocking) + .Expect(2, true) + .Verify(cq_.get(), time_limit); EXPECT_EQ(send_request.message(), recv_request.message()); send_response.set_message(recv_request.message()); response_writer.Finish(send_response, Status::OK, tag(3)); - Verifier(GetParam()) - .Expect(3, true) - .Verify(cq_.get(), std::chrono::system_clock::time_point::max()); - response_reader->Finish(&recv_response, &recv_status, tag(4)); - Verifier(GetParam()) + Verifier(GetParam().disable_blocking) + .Expect(3, true) .Expect(4, true) .Verify(cq_.get(), std::chrono::system_clock::time_point::max()); @@ -347,41 +399,48 @@ TEST_P(AsyncEnd2endTest, SimpleClientStreaming) { ServerContext srv_ctx; ServerAsyncReader<EchoResponse, EchoRequest> srv_stream(&srv_ctx); - send_request.set_message("Hello"); + send_request.set_message(GetParam().message_content); std::unique_ptr<ClientAsyncWriter<EchoRequest>> cli_stream( stub_->AsyncRequestStream(&cli_ctx, &recv_response, cq_.get(), tag(1))); service_.RequestRequestStream(&srv_ctx, &srv_stream, cq_.get(), cq_.get(), tag(2)); - Verifier(GetParam()).Expect(2, true).Expect(1, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking) + .Expect(2, true) + .Expect(1, true) + .Verify(cq_.get()); cli_stream->Write(send_request, tag(3)); - Verifier(GetParam()).Expect(3, true).Verify(cq_.get()); - srv_stream.Read(&recv_request, tag(4)); - Verifier(GetParam()).Expect(4, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking) + .Expect(3, true) + .Expect(4, true) + .Verify(cq_.get()); EXPECT_EQ(send_request.message(), recv_request.message()); cli_stream->Write(send_request, tag(5)); - Verifier(GetParam()).Expect(5, true).Verify(cq_.get()); - srv_stream.Read(&recv_request, tag(6)); - Verifier(GetParam()).Expect(6, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking) + .Expect(5, true) + .Expect(6, true) + .Verify(cq_.get()); EXPECT_EQ(send_request.message(), recv_request.message()); cli_stream->WritesDone(tag(7)); - Verifier(GetParam()).Expect(7, true).Verify(cq_.get()); - srv_stream.Read(&recv_request, tag(8)); - Verifier(GetParam()).Expect(8, false).Verify(cq_.get()); + Verifier(GetParam().disable_blocking) + .Expect(7, true) + .Expect(8, false) + .Verify(cq_.get()); send_response.set_message(recv_request.message()); srv_stream.Finish(send_response, Status::OK, tag(9)); - Verifier(GetParam()).Expect(9, true).Verify(cq_.get()); - cli_stream->Finish(&recv_status, tag(10)); - Verifier(GetParam()).Expect(10, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking) + .Expect(9, true) + .Expect(10, true) + .Verify(cq_.get()); EXPECT_EQ(send_response.message(), recv_response.message()); EXPECT_TRUE(recv_status.ok()); @@ -400,39 +459,45 @@ TEST_P(AsyncEnd2endTest, SimpleServerStreaming) { ServerContext srv_ctx; ServerAsyncWriter<EchoResponse> srv_stream(&srv_ctx); - send_request.set_message("Hello"); + send_request.set_message(GetParam().message_content); std::unique_ptr<ClientAsyncReader<EchoResponse>> cli_stream( stub_->AsyncResponseStream(&cli_ctx, send_request, cq_.get(), tag(1))); service_.RequestResponseStream(&srv_ctx, &recv_request, &srv_stream, cq_.get(), cq_.get(), tag(2)); - Verifier(GetParam()).Expect(1, true).Expect(2, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking) + .Expect(1, true) + .Expect(2, true) + .Verify(cq_.get()); EXPECT_EQ(send_request.message(), recv_request.message()); send_response.set_message(recv_request.message()); srv_stream.Write(send_response, tag(3)); - Verifier(GetParam()).Expect(3, true).Verify(cq_.get()); - cli_stream->Read(&recv_response, tag(4)); - Verifier(GetParam()).Expect(4, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking) + .Expect(3, true) + .Expect(4, true) + .Verify(cq_.get()); EXPECT_EQ(send_response.message(), recv_response.message()); srv_stream.Write(send_response, tag(5)); - Verifier(GetParam()).Expect(5, true).Verify(cq_.get()); - cli_stream->Read(&recv_response, tag(6)); - Verifier(GetParam()).Expect(6, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking) + .Expect(5, true) + .Expect(6, true) + .Verify(cq_.get()); EXPECT_EQ(send_response.message(), recv_response.message()); srv_stream.Finish(Status::OK, tag(7)); - Verifier(GetParam()).Expect(7, true).Verify(cq_.get()); - cli_stream->Read(&recv_response, tag(8)); - Verifier(GetParam()).Expect(8, false).Verify(cq_.get()); + Verifier(GetParam().disable_blocking) + .Expect(7, true) + .Expect(8, false) + .Verify(cq_.get()); cli_stream->Finish(&recv_status, tag(9)); - Verifier(GetParam()).Expect(9, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking).Expect(9, true).Verify(cq_.get()); EXPECT_TRUE(recv_status.ok()); } @@ -450,41 +515,48 @@ TEST_P(AsyncEnd2endTest, SimpleBidiStreaming) { ServerContext srv_ctx; ServerAsyncReaderWriter<EchoResponse, EchoRequest> srv_stream(&srv_ctx); - send_request.set_message("Hello"); + send_request.set_message(GetParam().message_content); std::unique_ptr<ClientAsyncReaderWriter<EchoRequest, EchoResponse>> cli_stream(stub_->AsyncBidiStream(&cli_ctx, cq_.get(), tag(1))); service_.RequestBidiStream(&srv_ctx, &srv_stream, cq_.get(), cq_.get(), tag(2)); - Verifier(GetParam()).Expect(1, true).Expect(2, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking) + .Expect(1, true) + .Expect(2, true) + .Verify(cq_.get()); cli_stream->Write(send_request, tag(3)); - Verifier(GetParam()).Expect(3, true).Verify(cq_.get()); - srv_stream.Read(&recv_request, tag(4)); - Verifier(GetParam()).Expect(4, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking) + .Expect(3, true) + .Expect(4, true) + .Verify(cq_.get()); EXPECT_EQ(send_request.message(), recv_request.message()); send_response.set_message(recv_request.message()); srv_stream.Write(send_response, tag(5)); - Verifier(GetParam()).Expect(5, true).Verify(cq_.get()); - cli_stream->Read(&recv_response, tag(6)); - Verifier(GetParam()).Expect(6, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking) + .Expect(5, true) + .Expect(6, true) + .Verify(cq_.get()); EXPECT_EQ(send_response.message(), recv_response.message()); cli_stream->WritesDone(tag(7)); - Verifier(GetParam()).Expect(7, true).Verify(cq_.get()); - srv_stream.Read(&recv_request, tag(8)); - Verifier(GetParam()).Expect(8, false).Verify(cq_.get()); + Verifier(GetParam().disable_blocking) + .Expect(7, true) + .Expect(8, false) + .Verify(cq_.get()); srv_stream.Finish(Status::OK, tag(9)); - Verifier(GetParam()).Expect(9, true).Verify(cq_.get()); - cli_stream->Finish(&recv_status, tag(10)); - Verifier(GetParam()).Expect(10, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking) + .Expect(9, true) + .Expect(10, true) + .Verify(cq_.get()); EXPECT_TRUE(recv_status.ok()); } @@ -503,7 +575,7 @@ TEST_P(AsyncEnd2endTest, ClientInitialMetadataRpc) { ServerContext srv_ctx; grpc::ServerAsyncResponseWriter<EchoResponse> response_writer(&srv_ctx); - send_request.set_message("Hello"); + send_request.set_message(GetParam().message_content); std::pair<grpc::string, grpc::string> meta1("key1", "val1"); std::pair<grpc::string, grpc::string> meta2("key2", "val2"); std::pair<grpc::string, grpc::string> meta3("g.r.d-bin", "xyz"); @@ -516,7 +588,7 @@ TEST_P(AsyncEnd2endTest, ClientInitialMetadataRpc) { service_.RequestEcho(&srv_ctx, &recv_request, &response_writer, cq_.get(), cq_.get(), tag(2)); - Verifier(GetParam()).Expect(2, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking).Expect(2, true).Verify(cq_.get()); EXPECT_EQ(send_request.message(), recv_request.message()); auto client_initial_metadata = srv_ctx.client_metadata(); EXPECT_EQ(meta1.second, @@ -529,11 +601,11 @@ TEST_P(AsyncEnd2endTest, ClientInitialMetadataRpc) { send_response.set_message(recv_request.message()); response_writer.Finish(send_response, Status::OK, tag(3)); - - Verifier(GetParam()).Expect(3, true).Verify(cq_.get()); - response_reader->Finish(&recv_response, &recv_status, tag(4)); - Verifier(GetParam()).Expect(4, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking) + .Expect(3, true) + .Expect(4, true) + .Verify(cq_.get()); EXPECT_EQ(send_response.message(), recv_response.message()); EXPECT_TRUE(recv_status.ok()); @@ -552,7 +624,7 @@ TEST_P(AsyncEnd2endTest, ServerInitialMetadataRpc) { ServerContext srv_ctx; grpc::ServerAsyncResponseWriter<EchoResponse> response_writer(&srv_ctx); - send_request.set_message("Hello"); + send_request.set_message(GetParam().message_content); std::pair<grpc::string, grpc::string> meta1("key1", "val1"); std::pair<grpc::string, grpc::string> meta2("key2", "val2"); @@ -561,15 +633,15 @@ TEST_P(AsyncEnd2endTest, ServerInitialMetadataRpc) { service_.RequestEcho(&srv_ctx, &recv_request, &response_writer, cq_.get(), cq_.get(), tag(2)); - Verifier(GetParam()).Expect(2, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking).Expect(2, true).Verify(cq_.get()); EXPECT_EQ(send_request.message(), recv_request.message()); srv_ctx.AddInitialMetadata(meta1.first, meta1.second); srv_ctx.AddInitialMetadata(meta2.first, meta2.second); response_writer.SendInitialMetadata(tag(3)); - Verifier(GetParam()).Expect(3, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking).Expect(3, true).Verify(cq_.get()); response_reader->ReadInitialMetadata(tag(4)); - Verifier(GetParam()).Expect(4, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking).Expect(4, true).Verify(cq_.get()); auto server_initial_metadata = cli_ctx.GetServerInitialMetadata(); EXPECT_EQ(meta1.second, ToString(server_initial_metadata.find(meta1.first)->second)); @@ -579,10 +651,11 @@ TEST_P(AsyncEnd2endTest, ServerInitialMetadataRpc) { send_response.set_message(recv_request.message()); response_writer.Finish(send_response, Status::OK, tag(5)); - Verifier(GetParam()).Expect(5, true).Verify(cq_.get()); - response_reader->Finish(&recv_response, &recv_status, tag(6)); - Verifier(GetParam()).Expect(6, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking) + .Expect(5, true) + .Expect(6, true) + .Verify(cq_.get()); EXPECT_EQ(send_response.message(), recv_response.message()); EXPECT_TRUE(recv_status.ok()); @@ -601,7 +674,7 @@ TEST_P(AsyncEnd2endTest, ServerTrailingMetadataRpc) { ServerContext srv_ctx; grpc::ServerAsyncResponseWriter<EchoResponse> response_writer(&srv_ctx); - send_request.set_message("Hello"); + send_request.set_message(GetParam().message_content); std::pair<grpc::string, grpc::string> meta1("key1", "val1"); std::pair<grpc::string, grpc::string> meta2("key2", "val2"); @@ -610,20 +683,22 @@ TEST_P(AsyncEnd2endTest, ServerTrailingMetadataRpc) { service_.RequestEcho(&srv_ctx, &recv_request, &response_writer, cq_.get(), cq_.get(), tag(2)); - Verifier(GetParam()).Expect(2, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking).Expect(2, true).Verify(cq_.get()); EXPECT_EQ(send_request.message(), recv_request.message()); response_writer.SendInitialMetadata(tag(3)); - Verifier(GetParam()).Expect(3, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking).Expect(3, true).Verify(cq_.get()); send_response.set_message(recv_request.message()); srv_ctx.AddTrailingMetadata(meta1.first, meta1.second); srv_ctx.AddTrailingMetadata(meta2.first, meta2.second); response_writer.Finish(send_response, Status::OK, tag(4)); + response_reader->Finish(&recv_response, &recv_status, tag(5)); - Verifier(GetParam()).Expect(4, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking) + .Expect(4, true) + .Expect(5, true) + .Verify(cq_.get()); - response_reader->Finish(&recv_response, &recv_status, tag(5)); - Verifier(GetParam()).Expect(5, true).Verify(cq_.get()); EXPECT_EQ(send_response.message(), recv_response.message()); EXPECT_TRUE(recv_status.ok()); auto server_trailing_metadata = cli_ctx.GetServerTrailingMetadata(); @@ -647,7 +722,7 @@ TEST_P(AsyncEnd2endTest, MetadataRpc) { ServerContext srv_ctx; grpc::ServerAsyncResponseWriter<EchoResponse> response_writer(&srv_ctx); - send_request.set_message("Hello"); + send_request.set_message(GetParam().message_content); std::pair<grpc::string, grpc::string> meta1("key1", "val1"); std::pair<grpc::string, grpc::string> meta2( "key2-bin", @@ -671,7 +746,7 @@ TEST_P(AsyncEnd2endTest, MetadataRpc) { service_.RequestEcho(&srv_ctx, &recv_request, &response_writer, cq_.get(), cq_.get(), tag(2)); - Verifier(GetParam()).Expect(2, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking).Expect(2, true).Verify(cq_.get()); EXPECT_EQ(send_request.message(), recv_request.message()); auto client_initial_metadata = srv_ctx.client_metadata(); EXPECT_EQ(meta1.second, @@ -683,9 +758,9 @@ TEST_P(AsyncEnd2endTest, MetadataRpc) { srv_ctx.AddInitialMetadata(meta3.first, meta3.second); srv_ctx.AddInitialMetadata(meta4.first, meta4.second); response_writer.SendInitialMetadata(tag(3)); - Verifier(GetParam()).Expect(3, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking).Expect(3, true).Verify(cq_.get()); response_reader->ReadInitialMetadata(tag(4)); - Verifier(GetParam()).Expect(4, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking).Expect(4, true).Verify(cq_.get()); auto server_initial_metadata = cli_ctx.GetServerInitialMetadata(); EXPECT_EQ(meta3.second, ToString(server_initial_metadata.find(meta3.first)->second)); @@ -697,11 +772,13 @@ TEST_P(AsyncEnd2endTest, MetadataRpc) { srv_ctx.AddTrailingMetadata(meta5.first, meta5.second); srv_ctx.AddTrailingMetadata(meta6.first, meta6.second); response_writer.Finish(send_response, Status::OK, tag(5)); + response_reader->Finish(&recv_response, &recv_status, tag(6)); - Verifier(GetParam()).Expect(5, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking) + .Expect(5, true) + .Expect(6, true) + .Verify(cq_.get()); - response_reader->Finish(&recv_response, &recv_status, tag(6)); - Verifier(GetParam()).Expect(6, true).Verify(cq_.get()); EXPECT_EQ(send_response.message(), recv_response.message()); EXPECT_TRUE(recv_status.ok()); auto server_trailing_metadata = cli_ctx.GetServerTrailingMetadata(); @@ -726,7 +803,7 @@ TEST_P(AsyncEnd2endTest, ServerCheckCancellation) { ServerContext srv_ctx; grpc::ServerAsyncResponseWriter<EchoResponse> response_writer(&srv_ctx); - send_request.set_message("Hello"); + send_request.set_message(GetParam().message_content); std::unique_ptr<ClientAsyncResponseReader<EchoResponse>> response_reader( stub_->AsyncEcho(&cli_ctx, send_request, cq_.get())); @@ -734,15 +811,15 @@ TEST_P(AsyncEnd2endTest, ServerCheckCancellation) { service_.RequestEcho(&srv_ctx, &recv_request, &response_writer, cq_.get(), cq_.get(), tag(2)); - Verifier(GetParam()).Expect(2, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking).Expect(2, true).Verify(cq_.get()); EXPECT_EQ(send_request.message(), recv_request.message()); cli_ctx.TryCancel(); - Verifier(GetParam()).Expect(5, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking).Expect(5, true).Verify(cq_.get()); EXPECT_TRUE(srv_ctx.IsCancelled()); response_reader->Finish(&recv_response, &recv_status, tag(4)); - Verifier(GetParam()).Expect(4, false).Verify(cq_.get()); + Verifier(GetParam().disable_blocking).Expect(4, false).Verify(cq_.get()); EXPECT_EQ(StatusCode::CANCELLED, recv_status.error_code()); } @@ -761,7 +838,7 @@ TEST_P(AsyncEnd2endTest, ServerCheckDone) { ServerContext srv_ctx; grpc::ServerAsyncResponseWriter<EchoResponse> response_writer(&srv_ctx); - send_request.set_message("Hello"); + send_request.set_message(GetParam().message_content); std::unique_ptr<ClientAsyncResponseReader<EchoResponse>> response_reader( stub_->AsyncEcho(&cli_ctx, send_request, cq_.get())); @@ -769,25 +846,29 @@ TEST_P(AsyncEnd2endTest, ServerCheckDone) { service_.RequestEcho(&srv_ctx, &recv_request, &response_writer, cq_.get(), cq_.get(), tag(2)); - Verifier(GetParam()).Expect(2, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking).Expect(2, true).Verify(cq_.get()); EXPECT_EQ(send_request.message(), recv_request.message()); send_response.set_message(recv_request.message()); response_writer.Finish(send_response, Status::OK, tag(3)); - Verifier(GetParam()).Expect(3, true).Verify(cq_.get()); - Verifier(GetParam()).Expect(5, true).Verify(cq_.get()); - EXPECT_FALSE(srv_ctx.IsCancelled()); - response_reader->Finish(&recv_response, &recv_status, tag(4)); - Verifier(GetParam()).Expect(4, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking) + .Expect(3, true) + .Expect(4, true) + .Expect(5, true) + .Verify(cq_.get()); + EXPECT_FALSE(srv_ctx.IsCancelled()); EXPECT_EQ(send_response.message(), recv_response.message()); EXPECT_TRUE(recv_status.ok()); } TEST_P(AsyncEnd2endTest, UnimplementedRpc) { + ChannelArguments args; + auto channel_creds = + GetChannelCredentials(GetParam().credentials_type, &args); std::shared_ptr<Channel> channel = - CreateChannel(server_address_.str(), InsecureChannelCredentials()); + CreateCustomChannel(server_address_.str(), channel_creds, args); std::unique_ptr<grpc::testing::UnimplementedService::Stub> stub; stub = grpc::testing::UnimplementedService::NewStub(channel); EchoRequest send_request; @@ -795,12 +876,12 @@ TEST_P(AsyncEnd2endTest, UnimplementedRpc) { Status recv_status; ClientContext cli_ctx; - send_request.set_message("Hello"); + send_request.set_message(GetParam().message_content); std::unique_ptr<ClientAsyncResponseReader<EchoResponse>> response_reader( stub->AsyncUnimplemented(&cli_ctx, send_request, cq_.get())); response_reader->Finish(&recv_response, &recv_status, tag(4)); - Verifier(GetParam()).Expect(4, false).Verify(cq_.get()); + Verifier(GetParam().disable_blocking).Expect(4, false).Verify(cq_.get()); EXPECT_EQ(StatusCode::UNIMPLEMENTED, recv_status.error_code()); EXPECT_EQ("", recv_status.error_message()); @@ -847,23 +928,25 @@ class AsyncEnd2endServerTryCancelTest : public AsyncEnd2endTest { // Initiate the 'RequestStream' call on client std::unique_ptr<ClientAsyncWriter<EchoRequest>> cli_stream( stub_->AsyncRequestStream(&cli_ctx, &recv_response, cq_.get(), tag(1))); - Verifier(GetParam()).Expect(1, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking).Expect(1, true).Verify(cq_.get()); // On the server, request to be notified of 'RequestStream' calls // and receive the 'RequestStream' call just made by the client srv_ctx.AsyncNotifyWhenDone(tag(11)); service_.RequestRequestStream(&srv_ctx, &srv_stream, cq_.get(), cq_.get(), tag(2)); - Verifier(GetParam()).Expect(2, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking).Expect(2, true).Verify(cq_.get()); // Client sends 3 messages (tags 3, 4 and 5) for (int tag_idx = 3; tag_idx <= 5; tag_idx++) { send_request.set_message("Ping " + std::to_string(tag_idx)); cli_stream->Write(send_request, tag(tag_idx)); - Verifier(GetParam()).Expect(tag_idx, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking) + .Expect(tag_idx, true) + .Verify(cq_.get()); } cli_stream->WritesDone(tag(6)); - Verifier(GetParam()).Expect(6, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking).Expect(6, true).Verify(cq_.get()); bool expected_server_cq_result = true; bool ignore_cq_result = false; @@ -871,7 +954,7 @@ class AsyncEnd2endServerTryCancelTest : public AsyncEnd2endTest { if (server_try_cancel == CANCEL_BEFORE_PROCESSING) { srv_ctx.TryCancel(); - Verifier(GetParam()).Expect(11, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking).Expect(11, true).Verify(cq_.get()); EXPECT_TRUE(srv_ctx.IsCancelled()); // Since cancellation is done before server reads any results, we know @@ -881,7 +964,7 @@ class AsyncEnd2endServerTryCancelTest : public AsyncEnd2endTest { std::thread* server_try_cancel_thd = NULL; - auto verif = Verifier(GetParam()); + auto verif = Verifier(GetParam().disable_blocking); if (server_try_cancel == CANCEL_DURING_PROCESSING) { server_try_cancel_thd = @@ -939,13 +1022,13 @@ class AsyncEnd2endServerTryCancelTest : public AsyncEnd2endTest { // Server sends the final message and cancelled status (but the RPC is // already cancelled at this point. So we expect the operation to fail) srv_stream.Finish(send_response, Status::CANCELLED, tag(9)); - Verifier(GetParam()).Expect(9, false).Verify(cq_.get()); + Verifier(GetParam().disable_blocking).Expect(9, false).Verify(cq_.get()); // Client will see the cancellation cli_stream->Finish(&recv_status, tag(10)); // TODO(sreek): The expectation here should be true. This is a bug (github // issue #4972) - Verifier(GetParam()).Expect(10, false).Verify(cq_.get()); + Verifier(GetParam().disable_blocking).Expect(10, false).Verify(cq_.get()); EXPECT_FALSE(recv_status.ok()); EXPECT_EQ(::grpc::StatusCode::CANCELLED, recv_status.error_code()); } @@ -979,13 +1062,13 @@ class AsyncEnd2endServerTryCancelTest : public AsyncEnd2endTest { // Initiate the 'ResponseStream' call on the client std::unique_ptr<ClientAsyncReader<EchoResponse>> cli_stream( stub_->AsyncResponseStream(&cli_ctx, send_request, cq_.get(), tag(1))); - Verifier(GetParam()).Expect(1, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking).Expect(1, true).Verify(cq_.get()); // On the server, request to be notified of 'ResponseStream' calls and // receive the call just made by the client srv_ctx.AsyncNotifyWhenDone(tag(11)); service_.RequestResponseStream(&srv_ctx, &recv_request, &srv_stream, cq_.get(), cq_.get(), tag(2)); - Verifier(GetParam()).Expect(2, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking).Expect(2, true).Verify(cq_.get()); EXPECT_EQ(send_request.message(), recv_request.message()); bool expected_cq_result = true; @@ -994,7 +1077,7 @@ class AsyncEnd2endServerTryCancelTest : public AsyncEnd2endTest { if (server_try_cancel == CANCEL_BEFORE_PROCESSING) { srv_ctx.TryCancel(); - Verifier(GetParam()).Expect(11, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking).Expect(11, true).Verify(cq_.get()); EXPECT_TRUE(srv_ctx.IsCancelled()); // We know for sure that all cq results will be false from this point @@ -1004,7 +1087,7 @@ class AsyncEnd2endServerTryCancelTest : public AsyncEnd2endTest { std::thread* server_try_cancel_thd = NULL; - auto verif = Verifier(GetParam()); + auto verif = Verifier(GetParam().disable_blocking); if (server_try_cancel == CANCEL_DURING_PROCESSING) { server_try_cancel_thd = @@ -1064,7 +1147,7 @@ class AsyncEnd2endServerTryCancelTest : public AsyncEnd2endTest { // Client attemts to read the three messages from the server for (int tag_idx = 6; tag_idx <= 8; tag_idx++) { cli_stream->Read(&recv_response, tag(tag_idx)); - Verifier(GetParam()) + Verifier(GetParam().disable_blocking) .Expect(tag_idx, expected_cq_result) .Verify(cq_.get(), ignore_cq_result); } @@ -1075,11 +1158,11 @@ class AsyncEnd2endServerTryCancelTest : public AsyncEnd2endTest { // Server finishes the stream (but the RPC is already cancelled) srv_stream.Finish(Status::CANCELLED, tag(9)); - Verifier(GetParam()).Expect(9, false).Verify(cq_.get()); + Verifier(GetParam().disable_blocking).Expect(9, false).Verify(cq_.get()); // Client will see the cancellation cli_stream->Finish(&recv_status, tag(10)); - Verifier(GetParam()).Expect(10, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking).Expect(10, true).Verify(cq_.get()); EXPECT_FALSE(recv_status.ok()); EXPECT_EQ(::grpc::StatusCode::CANCELLED, recv_status.error_code()); } @@ -1114,19 +1197,19 @@ class AsyncEnd2endServerTryCancelTest : public AsyncEnd2endTest { // Initiate the call from the client side std::unique_ptr<ClientAsyncReaderWriter<EchoRequest, EchoResponse>> cli_stream(stub_->AsyncBidiStream(&cli_ctx, cq_.get(), tag(1))); - Verifier(GetParam()).Expect(1, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking).Expect(1, true).Verify(cq_.get()); // On the server, request to be notified of the 'BidiStream' call and // receive the call just made by the client srv_ctx.AsyncNotifyWhenDone(tag(11)); service_.RequestBidiStream(&srv_ctx, &srv_stream, cq_.get(), cq_.get(), tag(2)); - Verifier(GetParam()).Expect(2, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking).Expect(2, true).Verify(cq_.get()); // Client sends the first and the only message send_request.set_message("Ping"); cli_stream->Write(send_request, tag(3)); - Verifier(GetParam()).Expect(3, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking).Expect(3, true).Verify(cq_.get()); bool expected_cq_result = true; bool ignore_cq_result = false; @@ -1134,7 +1217,7 @@ class AsyncEnd2endServerTryCancelTest : public AsyncEnd2endTest { if (server_try_cancel == CANCEL_BEFORE_PROCESSING) { srv_ctx.TryCancel(); - Verifier(GetParam()).Expect(11, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking).Expect(11, true).Verify(cq_.get()); EXPECT_TRUE(srv_ctx.IsCancelled()); // We know for sure that all cq results will be false from this point @@ -1144,7 +1227,7 @@ class AsyncEnd2endServerTryCancelTest : public AsyncEnd2endTest { std::thread* server_try_cancel_thd = NULL; - auto verif = Verifier(GetParam()); + auto verif = Verifier(GetParam().disable_blocking); if (server_try_cancel == CANCEL_DURING_PROCESSING) { server_try_cancel_thd = @@ -1244,10 +1327,10 @@ class AsyncEnd2endServerTryCancelTest : public AsyncEnd2endTest { // know that cq results are supposed to return false on server. srv_stream.Finish(Status::CANCELLED, tag(9)); - Verifier(GetParam()).Expect(9, false).Verify(cq_.get()); + Verifier(GetParam().disable_blocking).Expect(9, false).Verify(cq_.get()); cli_stream->Finish(&recv_status, tag(10)); - Verifier(GetParam()).Expect(10, true).Verify(cq_.get()); + Verifier(GetParam().disable_blocking).Expect(10, true).Verify(cq_.get()); EXPECT_FALSE(recv_status.ok()); EXPECT_EQ(grpc::StatusCode::CANCELLED, recv_status.error_code()); } @@ -1289,11 +1372,48 @@ TEST_P(AsyncEnd2endServerTryCancelTest, ServerBidiStreamingTryCancelAfter) { TestBidiStreamingServerCancel(CANCEL_AFTER_PROCESSING); } +std::vector<TestScenario> CreateTestScenarios(bool test_disable_blocking, + bool test_secure, + int test_big_limit) { + std::vector<TestScenario> scenarios; + std::vector<grpc::string> credentials_types; + std::vector<grpc::string> messages; + + credentials_types.push_back(kInsecureCredentialsType); + auto sec_list = GetSecureCredentialsTypeList(); + for (auto sec = sec_list.begin(); sec != sec_list.end(); sec++) { + credentials_types.push_back(*sec); + } + + messages.push_back("Hello"); + for (int sz = 1; sz < test_big_limit; sz *= 2) { + grpc::string big_msg; + for (int i = 0; i < sz * 1024; i++) { + char c = 'a' + (i % 26); + big_msg += c; + } + messages.push_back(big_msg); + } + + for (auto cred = credentials_types.begin(); cred != credentials_types.end(); + ++cred) { + for (auto msg = messages.begin(); msg != messages.end(); msg++) { + scenarios.push_back(TestScenario(false, *cred, *msg)); + if (test_disable_blocking) { + scenarios.push_back(TestScenario(true, *cred, *msg)); + } + } + } + return scenarios; +} + INSTANTIATE_TEST_CASE_P(AsyncEnd2end, AsyncEnd2endTest, - ::testing::Values(false, true)); + ::testing::ValuesIn(CreateTestScenarios(true, true, + 1024))); INSTANTIATE_TEST_CASE_P(AsyncEnd2endServerTryCancel, AsyncEnd2endServerTryCancelTest, - ::testing::Values(false)); + ::testing::ValuesIn(CreateTestScenarios(false, false, + 0))); } // namespace } // namespace testing diff --git a/test/cpp/end2end/end2end_test.cc b/test/cpp/end2end/end2end_test.cc index 0c9313f88f0d7e8ef09ade3ee458de00058d85e4..e3408bff75eda5d32b5ceaf8d69cee69ea6d859c 100644 --- a/test/cpp/end2end/end2end_test.cc +++ b/test/cpp/end2end/end2end_test.cc @@ -975,6 +975,34 @@ TEST_P(End2endTest, NonExistingService) { EXPECT_EQ("", s.error_message()); } +// Ask the server to send back a serialized proto in trailer. +// This is an example of setting error details. +TEST_P(End2endTest, BinaryTrailerTest) { + ResetStub(); + EchoRequest request; + EchoResponse response; + ClientContext context; + + request.mutable_param()->set_echo_metadata(true); + DebugInfo* info = request.mutable_param()->mutable_debug_info(); + info->add_stack_entries("stack_entry_1"); + info->add_stack_entries("stack_entry_2"); + info->add_stack_entries("stack_entry_3"); + info->set_detail("detailed debug info"); + grpc::string expected_string = info->SerializeAsString(); + request.set_message("Hello"); + + Status s = stub_->Echo(&context, request, &response); + EXPECT_FALSE(s.ok()); + auto trailers = context.GetServerTrailingMetadata(); + EXPECT_EQ(1u, trailers.count(kDebugInfoTrailerKey)); + auto iter = trailers.find(kDebugInfoTrailerKey); + EXPECT_EQ(expected_string, iter->second); + // Parse the returned trailer into a DebugInfo proto. + DebugInfo returned_info; + EXPECT_TRUE(returned_info.ParseFromString(ToString(iter->second))); +} + ////////////////////////////////////////////////////////////////////////// // Test with and without a proxy. class ProxyEnd2endTest : public End2endTest { diff --git a/test/cpp/end2end/server_builder_plugin_test.cc b/test/cpp/end2end/server_builder_plugin_test.cc new file mode 100644 index 0000000000000000000000000000000000000000..87e3709d7d272bbf562af639adebf4a960f4207a --- /dev/null +++ b/test/cpp/end2end/server_builder_plugin_test.cc @@ -0,0 +1,256 @@ +/* + * + * 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 <grpc++/channel.h> +#include <grpc++/client_context.h> +#include <grpc++/create_channel.h> +#include <grpc++/impl/server_builder_option.h> +#include <grpc++/impl/server_builder_plugin.h> +#include <grpc++/impl/server_initializer.h> +#include <grpc++/security/credentials.h> +#include <grpc++/security/server_credentials.h> +#include <grpc++/server.h> +#include <grpc++/server_builder.h> +#include <grpc++/server_context.h> +#include <grpc/grpc.h> +#include <gtest/gtest.h> + +#include "src/proto/grpc/testing/echo.grpc.pb.h" +#include "test/core/util/port.h" +#include "test/core/util/test_config.h" +#include "test/cpp/end2end/test_service_impl.h" + +#define PLUGIN_NAME "TestServerBuilderPlugin" + +namespace grpc { +namespace testing { + +class TestServerBuilderPlugin : public ServerBuilderPlugin { + public: + TestServerBuilderPlugin() : service_(new TestServiceImpl()) { + init_server_is_called_ = false; + finish_is_called_ = false; + change_arguments_is_called_ = false; + } + + grpc::string name() GRPC_OVERRIDE { return PLUGIN_NAME; } + + void InitServer(ServerInitializer* si) GRPC_OVERRIDE { + init_server_is_called_ = true; + if (register_service_) { + si->RegisterService(service_); + } + } + + void Finish(ServerInitializer* si) GRPC_OVERRIDE { finish_is_called_ = true; } + + void ChangeArguments(const grpc::string& name, void* value) GRPC_OVERRIDE { + change_arguments_is_called_ = true; + } + + bool has_async_methods() const GRPC_OVERRIDE { + if (register_service_) { + return service_->has_async_methods(); + } + return false; + } + + bool has_sync_methods() const GRPC_OVERRIDE { + if (register_service_) { + return service_->has_synchronous_methods(); + } + return false; + } + + void SetRegisterService() { register_service_ = true; } + + bool init_server_is_called() { return init_server_is_called_; } + bool finish_is_called() { return finish_is_called_; } + bool change_arguments_is_called() { return change_arguments_is_called_; } + + private: + bool init_server_is_called_; + bool finish_is_called_; + bool change_arguments_is_called_; + bool register_service_; + std::shared_ptr<TestServiceImpl> service_; +}; + +class InsertPluginServerBuilderOption : public ServerBuilderOption { + public: + InsertPluginServerBuilderOption() { register_service_ = false; } + + void UpdateArguments(ChannelArguments* arg) GRPC_OVERRIDE {} + + void UpdatePlugins( + std::map<grpc::string, std::unique_ptr<ServerBuilderPlugin>>* plugins) + GRPC_OVERRIDE { + plugins->clear(); + + std::unique_ptr<TestServerBuilderPlugin> plugin( + new TestServerBuilderPlugin()); + if (register_service_) plugin->SetRegisterService(); + (*plugins)[plugin->name()] = std::move(plugin); + } + + void SetRegisterService() { register_service_ = true; } + + private: + bool register_service_; +}; + +std::unique_ptr<ServerBuilderPlugin> CreateTestServerBuilderPlugin() { + return std::unique_ptr<ServerBuilderPlugin>(new TestServerBuilderPlugin()); +} + +void AddTestServerBuilderPlugin() { + static bool already_here = false; + if (already_here) return; + already_here = true; + ::grpc::ServerBuilder::InternalAddPluginFactory( + &CreateTestServerBuilderPlugin); +} + +// Force AddServerBuilderPlugin() to be called at static initialization time. +struct StaticTestPluginInitializer { + StaticTestPluginInitializer() { AddTestServerBuilderPlugin(); } +} static_plugin_initializer_test_; + +// When the param boolean is true, the ServerBuilder plugin will be added at the +// time of static initialization. When it's false, the ServerBuilder plugin will +// be added using ServerBuilder::SetOption(). +class ServerBuilderPluginTest : public ::testing::TestWithParam<bool> { + public: + ServerBuilderPluginTest() {} + + void SetUp() GRPC_OVERRIDE { + port_ = grpc_pick_unused_port_or_die(); + builder_.reset(new ServerBuilder()); + } + + void InsertPlugin() { + if (GetParam()) { + // Add ServerBuilder plugin in static initialization + EXPECT_TRUE(builder_->plugins_[PLUGIN_NAME] != nullptr); + } else { + // Add ServerBuilder plugin using ServerBuilder::SetOption() + builder_->SetOption(std::unique_ptr<ServerBuilderOption>( + new InsertPluginServerBuilderOption())); + } + } + + void InsertPluginWithTestService() { + if (GetParam()) { + // Add ServerBuilder plugin in static initialization + EXPECT_TRUE(builder_->plugins_[PLUGIN_NAME] != nullptr); + auto plugin = static_cast<TestServerBuilderPlugin*>( + builder_->plugins_[PLUGIN_NAME].get()); + EXPECT_TRUE(plugin != nullptr); + plugin->SetRegisterService(); + } else { + // Add ServerBuilder plugin using ServerBuilder::SetOption() + std::unique_ptr<InsertPluginServerBuilderOption> option( + new InsertPluginServerBuilderOption()); + option->SetRegisterService(); + builder_->SetOption(std::move(option)); + } + } + + void StartServer() { + grpc::string server_address = "localhost:" + to_string(port_); + builder_->AddListeningPort(server_address, InsecureServerCredentials()); + server_ = builder_->BuildAndStart(); + EXPECT_TRUE(builder_->plugins_[PLUGIN_NAME] != nullptr); + } + + void ResetStub() { + string target = "dns:localhost:" + to_string(port_); + channel_ = CreateChannel(target, InsecureChannelCredentials()); + stub_ = grpc::testing::EchoTestService::NewStub(channel_); + } + + void TearDown() GRPC_OVERRIDE { + EXPECT_TRUE(builder_->plugins_[PLUGIN_NAME] != nullptr); + auto plugin = static_cast<TestServerBuilderPlugin*>( + builder_->plugins_[PLUGIN_NAME].get()); + EXPECT_TRUE(plugin != nullptr); + EXPECT_TRUE(plugin->init_server_is_called()); + EXPECT_TRUE(plugin->finish_is_called()); + } + + string to_string(const int number) { + std::stringstream strs; + strs << number; + return strs.str(); + } + + protected: + std::shared_ptr<Channel> channel_; + std::unique_ptr<ServerBuilder> builder_; + std::unique_ptr<grpc::testing::EchoTestService::Stub> stub_; + std::unique_ptr<Server> server_; + TestServiceImpl service_; + int port_; +}; + +TEST_P(ServerBuilderPluginTest, PluginWithoutServiceTest) { + InsertPlugin(); + StartServer(); +} + +TEST_P(ServerBuilderPluginTest, PluginWithServiceTest) { + InsertPluginWithTestService(); + StartServer(); + ResetStub(); + + EchoRequest request; + EchoResponse response; + request.set_message("Hello hello hello hello"); + ClientContext context; + context.set_compression_algorithm(GRPC_COMPRESS_GZIP); + Status s = stub_->Echo(&context, request, &response); + EXPECT_EQ(response.message(), request.message()); + EXPECT_TRUE(s.ok()); +} + +INSTANTIATE_TEST_CASE_P(ServerBuilderPluginTest, ServerBuilderPluginTest, + ::testing::Values(false, true)); + +} // namespace testing +} // namespace grpc + +int main(int argc, char** argv) { + grpc_test_init(argc, argv); + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/test/cpp/end2end/test_service_impl.cc b/test/cpp/end2end/test_service_impl.cc index 2f5dd6d49e8602eed8fb6c8f3d0559dc900eb9a4..cbaee922289f91faab0ab29d36502ccc3306ece9 100644 --- a/test/cpp/end2end/test_service_impl.cc +++ b/test/cpp/end2end/test_service_impl.cc @@ -135,6 +135,14 @@ Status TestServiceImpl::Echo(ServerContext* context, const EchoRequest* request, context->AddTrailingMetadata(ToString(iter->first), ToString(iter->second)); } + // Terminate rpc with error and debug info in trailer. + if (request->param().debug_info().stack_entries_size() || + !request->param().debug_info().detail().empty()) { + grpc::string serialized_debug_info = + request->param().debug_info().SerializeAsString(); + context->AddTrailingMetadata(kDebugInfoTrailerKey, serialized_debug_info); + return Status::CANCELLED; + } } if (request->has_param() && (request->param().expected_client_identity().length() > 0 || diff --git a/test/cpp/end2end/test_service_impl.h b/test/cpp/end2end/test_service_impl.h index 1ab6ced9e00c23de2feb966a6f714b28bc809bc6..c89f88c900edadf8679856fd33ab447a198b071f 100644 --- a/test/cpp/end2end/test_service_impl.h +++ b/test/cpp/end2end/test_service_impl.h @@ -47,6 +47,7 @@ namespace testing { const int kNumResponseStreamsMsgs = 3; const char* const kServerCancelAfterReads = "cancel_after_reads"; const char* const kServerTryCancelRequest = "server_try_cancel"; +const char* const kDebugInfoTrailerKey = "debug-info-bin"; typedef enum { DO_NOT_CANCEL = 0, diff --git a/test/cpp/grpclb/grpclb_api_test.cc b/test/cpp/grpclb/grpclb_api_test.cc index 92f93c869c72c3f41a565a01367dc3101efe2054..bf77878e0a6c5e9a8073c6dbb58ff68da7dde0ef 100644 --- a/test/cpp/grpclb/grpclb_api_test.cc +++ b/test/cpp/grpclb/grpclb_api_test.cc @@ -35,13 +35,13 @@ #include <string> #include "src/core/ext/lb_policy/grpclb/load_balancer_api.h" -#include "src/proto/grpc/lb/v0/load_balancer.pb.h" // C++ version +#include "src/proto/grpc/lb/v1/load_balancer.pb.h" // C++ version namespace grpc { namespace { -using grpc::lb::v0::LoadBalanceRequest; -using grpc::lb::v0::LoadBalanceResponse; +using grpc::lb::v1::LoadBalanceRequest; +using grpc::lb::v1::LoadBalanceResponse; class GrpclbTest : public ::testing::Test {}; @@ -60,9 +60,7 @@ TEST_F(GrpclbTest, CreateRequest) { TEST_F(GrpclbTest, ParseResponse) { LoadBalanceResponse response; - const std::string client_config_str = "I'm a client config"; auto* initial_response = response.mutable_initial_response(); - initial_response->set_client_config(client_config_str); auto* client_stats_report_interval = initial_response->mutable_client_stats_report_interval(); client_stats_report_interval->set_seconds(123); @@ -73,10 +71,7 @@ TEST_F(GrpclbTest, ParseResponse) { gpr_slice_from_copied_string(encoded_response.c_str()); grpc_grpclb_response* c_response = grpc_grpclb_response_parse(encoded_slice); EXPECT_TRUE(c_response->has_initial_response); - EXPECT_TRUE(c_response->initial_response.has_client_config); EXPECT_FALSE(c_response->initial_response.has_load_balancer_delegate); - EXPECT_TRUE(strcmp(c_response->initial_response.client_config, - client_config_str.c_str()) == 0); EXPECT_EQ(c_response->initial_response.client_stats_report_interval.seconds, 123); EXPECT_EQ(c_response->initial_response.client_stats_report_interval.nanos, diff --git a/test/cpp/interop/client.cc b/test/cpp/interop/client.cc index 9af6a88044739d6f17b888276df16689843a1bb1..77278249794751b63a9c54ba0d5112a2da26d272 100644 --- a/test/cpp/interop/client.cc +++ b/test/cpp/interop/client.cc @@ -81,6 +81,14 @@ DEFINE_string(default_service_account, "", DEFINE_string(service_account_key_file, "", "Path to service account json key file."); DEFINE_string(oauth_scope, "", "Scope for OAuth tokens."); +DEFINE_bool(do_not_abort_on_transient_failures, false, + "If set to 'true', abort() is not called in case of transient " + "failures (i.e failures that are temporary and will likely go away " + "on retrying; like a temporary connection failure) and an error " + "message is printed instead. Note that this flag just controls " + "whether abort() is called or not. It does not control whether the " + "test is retried in case of transient failures (and currently the " + "interop tests are not retried even if this flag is set to true)"); using grpc::testing::CreateChannelForTestCase; using grpc::testing::GetServiceAccountJsonKey; @@ -89,8 +97,9 @@ int main(int argc, char** argv) { grpc::testing::InitTest(&argc, &argv, true); gpr_log(GPR_INFO, "Testing these cases: %s", FLAGS_test_case.c_str()); int ret = 0; - grpc::testing::InteropClient client( - CreateChannelForTestCase(FLAGS_test_case)); + grpc::testing::InteropClient client(CreateChannelForTestCase(FLAGS_test_case), + true, + FLAGS_do_not_abort_on_transient_failures); if (FLAGS_test_case == "empty_unary") { client.DoEmpty(); } else if (FLAGS_test_case == "large_unary") { diff --git a/test/cpp/interop/client_helper.cc b/test/cpp/interop/client_helper.cc index c8b1e505c16e13046e9ae1e20052d21930cc12c2..c171969e147d35665fe5dd95d14f38db8cb8019b 100644 --- a/test/cpp/interop/client_helper.cc +++ b/test/cpp/interop/client_helper.cc @@ -97,30 +97,25 @@ std::shared_ptr<Channel> CreateChannelForTestCase( snprintf(host_port, host_port_buf_size, "%s:%d", FLAGS_server_host.c_str(), FLAGS_server_port); + std::shared_ptr<CallCredentials> creds; if (test_case == "compute_engine_creds") { - std::shared_ptr<CallCredentials> creds; GPR_ASSERT(FLAGS_use_tls); creds = GoogleComputeEngineCredentials(); - return CreateTestChannel(host_port, FLAGS_server_host_override, - FLAGS_use_tls, !FLAGS_use_test_ca, creds); + GPR_ASSERT(creds); } else if (test_case == "jwt_token_creds") { - std::shared_ptr<CallCredentials> creds; GPR_ASSERT(FLAGS_use_tls); grpc::string json_key = GetServiceAccountJsonKey(); std::chrono::seconds token_lifetime = std::chrono::hours(1); creds = ServiceAccountJWTAccessCredentials(json_key, token_lifetime.count()); - return CreateTestChannel(host_port, FLAGS_server_host_override, - FLAGS_use_tls, !FLAGS_use_test_ca, creds); + GPR_ASSERT(creds); } else if (test_case == "oauth2_auth_token") { grpc::string raw_token = GetOauth2AccessToken(); - std::shared_ptr<CallCredentials> creds = AccessTokenCredentials(raw_token); - return CreateTestChannel(host_port, FLAGS_server_host_override, - FLAGS_use_tls, !FLAGS_use_test_ca, creds); - } else { - return CreateTestChannel(host_port, FLAGS_server_host_override, - FLAGS_use_tls, !FLAGS_use_test_ca); + creds = AccessTokenCredentials(raw_token); + GPR_ASSERT(creds); } + return CreateTestChannel(host_port, FLAGS_server_host_override, FLAGS_use_tls, + !FLAGS_use_test_ca, creds); } } // namespace testing diff --git a/test/cpp/interop/interop_client.cc b/test/cpp/interop/interop_client.cc index 22293d211facaee97b13837207908c4d8d8a9541..189e4a8aabeb286eb729619a73f73e21b7b62f81 100644 --- a/test/cpp/interop/interop_client.cc +++ b/test/cpp/interop/interop_client.cc @@ -60,7 +60,7 @@ static const char* kRandomFile = "test/cpp/interop/rnd.dat"; namespace { // The same value is defined by the Java client. const std::vector<int> request_stream_sizes = {27182, 8, 1828, 45904}; -const std::vector<int> response_stream_sizes = {31415, 9, 2653, 58979}; +const std::vector<int> response_stream_sizes = {31415, 59, 2653, 58979}; const int kNumResponseMessages = 2000; const int kResponseMessageSize = 1030; const int kReceiveDelayMilliSeconds = 20; @@ -134,23 +134,43 @@ void InteropClient::Reset(std::shared_ptr<Channel> channel) { serviceStub_.Reset(channel); } -InteropClient::InteropClient(std::shared_ptr<Channel> channel) - : serviceStub_(channel, true) {} - InteropClient::InteropClient(std::shared_ptr<Channel> channel, - bool new_stub_every_test_case) - : serviceStub_(channel, new_stub_every_test_case) {} + bool new_stub_every_test_case, + bool do_not_abort_on_transient_failures) + : serviceStub_(channel, new_stub_every_test_case), + do_not_abort_on_transient_failures_(do_not_abort_on_transient_failures) {} -void InteropClient::AssertOkOrPrintErrorStatus(const Status& s) { +bool InteropClient::AssertStatusOk(const Status& s) { if (s.ok()) { - return; + return true; } - gpr_log(GPR_ERROR, "Error status code: %d, message: %s", s.error_code(), - s.error_message().c_str()); - GPR_ASSERT(0); + + // Note: At this point, s.error_code is definitely not StatusCode::OK (we + // already checked for s.ok() above). So, the following will call abort() + // (unless s.error_code() corresponds to a transient failure and + // 'do_not_abort_on_transient_failures' is true) + return AssertStatusCode(s, StatusCode::OK); } -void InteropClient::DoEmpty() { +bool InteropClient::AssertStatusCode(const Status& s, + StatusCode expected_code) { + if (s.error_code() == expected_code) { + return true; + } + + gpr_log(GPR_ERROR, "Error status code: %d (expected: %d), message: %s", + s.error_code(), expected_code, s.error_message().c_str()); + + // In case of transient transient/retryable failures (like a broken + // connection) we may or may not abort (see TransientFailureOrAbort()) + if (s.error_code() == grpc::StatusCode::UNAVAILABLE) { + return TransientFailureOrAbort(); + } + + abort(); +} + +bool InteropClient::DoEmpty() { gpr_log(GPR_DEBUG, "Sending an empty rpc..."); Empty request = Empty::default_instance(); @@ -158,17 +178,21 @@ void InteropClient::DoEmpty() { ClientContext context; Status s = serviceStub_.Get()->EmptyCall(&context, request, &response); - AssertOkOrPrintErrorStatus(s); + + if (!AssertStatusOk(s)) { + return false; + } gpr_log(GPR_DEBUG, "Empty rpc done."); + return true; } -void InteropClient::PerformLargeUnary(SimpleRequest* request, +bool InteropClient::PerformLargeUnary(SimpleRequest* request, SimpleResponse* response) { - PerformLargeUnary(request, response, NoopChecks); + return PerformLargeUnary(request, response, NoopChecks); } -void InteropClient::PerformLargeUnary(SimpleRequest* request, +bool InteropClient::PerformLargeUnary(SimpleRequest* request, SimpleResponse* response, CheckerFn custom_checks_fn) { ClientContext context; @@ -180,7 +204,9 @@ void InteropClient::PerformLargeUnary(SimpleRequest* request, request->mutable_payload()->set_body(payload.c_str(), kLargeRequestSize); Status s = serviceStub_.Get()->UnaryCall(&context, *request, response); - AssertOkOrPrintErrorStatus(s); + if (!AssertStatusOk(s)) { + return false; + } custom_checks_fn(inspector, request, response); @@ -203,9 +229,11 @@ void InteropClient::PerformLargeUnary(SimpleRequest* request, default: GPR_ASSERT(false); } + + return true; } -void InteropClient::DoComputeEngineCreds( +bool InteropClient::DoComputeEngineCreds( const grpc::string& default_service_account, const grpc::string& oauth_scope) { gpr_log(GPR_DEBUG, @@ -215,7 +243,11 @@ void InteropClient::DoComputeEngineCreds( request.set_fill_username(true); request.set_fill_oauth_scope(true); request.set_response_type(PayloadType::COMPRESSABLE); - PerformLargeUnary(&request, &response); + + if (!PerformLargeUnary(&request, &response)) { + return false; + } + gpr_log(GPR_DEBUG, "Got username %s", response.username().c_str()); gpr_log(GPR_DEBUG, "Got oauth_scope %s", response.oauth_scope().c_str()); GPR_ASSERT(!response.username().empty()); @@ -224,9 +256,10 @@ void InteropClient::DoComputeEngineCreds( const char* oauth_scope_str = response.oauth_scope().c_str(); GPR_ASSERT(oauth_scope.find(oauth_scope_str) != grpc::string::npos); gpr_log(GPR_DEBUG, "Large unary with compute engine creds done."); + return true; } -void InteropClient::DoOauth2AuthToken(const grpc::string& username, +bool InteropClient::DoOauth2AuthToken(const grpc::string& username, const grpc::string& oauth_scope) { gpr_log(GPR_DEBUG, "Sending a unary rpc with raw oauth2 access token credentials ..."); @@ -239,16 +272,20 @@ void InteropClient::DoOauth2AuthToken(const grpc::string& username, Status s = serviceStub_.Get()->UnaryCall(&context, request, &response); - AssertOkOrPrintErrorStatus(s); + if (!AssertStatusOk(s)) { + return false; + } + GPR_ASSERT(!response.username().empty()); GPR_ASSERT(!response.oauth_scope().empty()); GPR_ASSERT(username == response.username()); const char* oauth_scope_str = response.oauth_scope().c_str(); GPR_ASSERT(oauth_scope.find(oauth_scope_str) != grpc::string::npos); gpr_log(GPR_DEBUG, "Unary with oauth2 access token credentials done."); + return true; } -void InteropClient::DoPerRpcCreds(const grpc::string& json_key) { +bool InteropClient::DoPerRpcCreds(const grpc::string& json_key) { gpr_log(GPR_DEBUG, "Sending a unary rpc with per-rpc JWT access token ..."); SimpleRequest request; SimpleResponse response; @@ -263,35 +300,47 @@ void InteropClient::DoPerRpcCreds(const grpc::string& json_key) { Status s = serviceStub_.Get()->UnaryCall(&context, request, &response); - AssertOkOrPrintErrorStatus(s); + if (!AssertStatusOk(s)) { + return false; + } + GPR_ASSERT(!response.username().empty()); GPR_ASSERT(json_key.find(response.username()) != grpc::string::npos); gpr_log(GPR_DEBUG, "Unary with per-rpc JWT access token done."); + return true; } -void InteropClient::DoJwtTokenCreds(const grpc::string& username) { +bool InteropClient::DoJwtTokenCreds(const grpc::string& username) { gpr_log(GPR_DEBUG, "Sending a large unary rpc with JWT token credentials ..."); SimpleRequest request; SimpleResponse response; request.set_fill_username(true); request.set_response_type(PayloadType::COMPRESSABLE); - PerformLargeUnary(&request, &response); + + if (!PerformLargeUnary(&request, &response)) { + return false; + } + GPR_ASSERT(!response.username().empty()); GPR_ASSERT(username.find(response.username()) != grpc::string::npos); gpr_log(GPR_DEBUG, "Large unary with JWT token creds done."); + return true; } -void InteropClient::DoLargeUnary() { +bool InteropClient::DoLargeUnary() { gpr_log(GPR_DEBUG, "Sending a large unary rpc..."); SimpleRequest request; SimpleResponse response; request.set_response_type(PayloadType::COMPRESSABLE); - PerformLargeUnary(&request, &response); + if (!PerformLargeUnary(&request, &response)) { + return false; + } gpr_log(GPR_DEBUG, "Large unary done."); + return true; } -void InteropClient::DoLargeCompressedUnary() { +bool InteropClient::DoLargeCompressedUnary() { const CompressionType compression_types[] = {NONE, GZIP, DEFLATE}; const PayloadType payload_types[] = {COMPRESSABLE, UNCOMPRESSABLE, RANDOM}; for (size_t i = 0; i < GPR_ARRAY_SIZE(payload_types); i++) { @@ -307,14 +356,32 @@ void InteropClient::DoLargeCompressedUnary() { SimpleResponse response; request.set_response_type(payload_types[i]); request.set_response_compression(compression_types[j]); - PerformLargeUnary(&request, &response, CompressionChecks); + + if (!PerformLargeUnary(&request, &response, CompressionChecks)) { + gpr_log(GPR_ERROR, "Large compressed unary failed %s", log_suffix); + gpr_free(log_suffix); + return false; + } + gpr_log(GPR_DEBUG, "Large compressed unary done %s.", log_suffix); gpr_free(log_suffix); } } + + return true; +} + +// Either abort() (unless do_not_abort_on_transient_failures_ is true) or return +// false +bool InteropClient::TransientFailureOrAbort() { + if (do_not_abort_on_transient_failures_) { + return false; + } + + abort(); } -void InteropClient::DoRequestStreaming() { +bool InteropClient::DoRequestStreaming() { gpr_log(GPR_DEBUG, "Sending request steaming rpc ..."); ClientContext context; @@ -328,19 +395,25 @@ void InteropClient::DoRequestStreaming() { for (unsigned int i = 0; i < request_stream_sizes.size(); ++i) { Payload* payload = request.mutable_payload(); payload->set_body(grpc::string(request_stream_sizes[i], '\0')); - GPR_ASSERT(stream->Write(request)); + if (!stream->Write(request)) { + gpr_log(GPR_ERROR, "DoRequestStreaming(): stream->Write() failed"); + return TransientFailureOrAbort(); + } aggregated_payload_size += request_stream_sizes[i]; } stream->WritesDone(); + Status s = stream->Finish(); + if (!AssertStatusOk(s)) { + return false; + } GPR_ASSERT(response.aggregated_payload_size() == aggregated_payload_size); - AssertOkOrPrintErrorStatus(s); - gpr_log(GPR_DEBUG, "Request streaming done."); + return true; } -void InteropClient::DoResponseStreaming() { - gpr_log(GPR_DEBUG, "Receiving response steaming rpc ..."); +bool InteropClient::DoResponseStreaming() { + gpr_log(GPR_DEBUG, "Receiving response streaming rpc ..."); ClientContext context; StreamingOutputCallRequest request; @@ -358,13 +431,27 @@ void InteropClient::DoResponseStreaming() { grpc::string(response_stream_sizes[i], '\0')); ++i; } - GPR_ASSERT(response_stream_sizes.size() == i); + + if (i < response_stream_sizes.size()) { + // stream->Read() failed before reading all the expected messages. This is + // most likely due to connection failure. + gpr_log(GPR_ERROR, + "DoResponseStreaming(): Read fewer streams (%d) than " + "response_stream_sizes.size() (%d)", + i, response_stream_sizes.size()); + return TransientFailureOrAbort(); + } + Status s = stream->Finish(); - AssertOkOrPrintErrorStatus(s); + if (!AssertStatusOk(s)) { + return false; + } + gpr_log(GPR_DEBUG, "Response streaming done."); + return true; } -void InteropClient::DoResponseCompressedStreaming() { +bool InteropClient::DoResponseCompressedStreaming() { const CompressionType compression_types[] = {NONE, GZIP, DEFLATE}; const PayloadType payload_types[] = {COMPRESSABLE, UNCOMPRESSABLE, RANDOM}; for (size_t i = 0; i < GPR_ARRAY_SIZE(payload_types); i++) { @@ -378,7 +465,7 @@ void InteropClient::DoResponseCompressedStreaming() { CompressionType_Name(compression_types[j]).c_str(), PayloadType_Name(payload_types[i]).c_str()); - gpr_log(GPR_DEBUG, "Receiving response steaming rpc %s.", log_suffix); + gpr_log(GPR_DEBUG, "Receiving response streaming rpc %s.", log_suffix); request.set_response_type(payload_types[i]); request.set_response_compression(compression_types[j]); @@ -432,18 +519,32 @@ void InteropClient::DoResponseCompressedStreaming() { ++k; } - GPR_ASSERT(response_stream_sizes.size() == k); - Status s = stream->Finish(); - - AssertOkOrPrintErrorStatus(s); gpr_log(GPR_DEBUG, "Response streaming done %s.", log_suffix); gpr_free(log_suffix); + + if (k < response_stream_sizes.size()) { + // stream->Read() failed before reading all the expected messages. This + // is most likely due to a connection failure. + gpr_log(GPR_ERROR, + "DoResponseCompressedStreaming(): Responses read (k=%d) is " + "less than the expected messages (i.e " + "response_stream_sizes.size() (%d)). (i=%d, j=%d)", + k, response_stream_sizes.size(), i, j); + return TransientFailureOrAbort(); + } + + Status s = stream->Finish(); + if (!AssertStatusOk(s)) { + return false; + } } } + + return true; } -void InteropClient::DoResponseStreamingWithSlowConsumer() { - gpr_log(GPR_DEBUG, "Receiving response steaming rpc with slow consumer ..."); +bool InteropClient::DoResponseStreamingWithSlowConsumer() { + gpr_log(GPR_DEBUG, "Receiving response streaming rpc with slow consumer ..."); ClientContext context; StreamingOutputCallRequest request; @@ -464,14 +565,26 @@ void InteropClient::DoResponseStreamingWithSlowConsumer() { usleep(kReceiveDelayMilliSeconds * 1000); ++i; } - GPR_ASSERT(kNumResponseMessages == i); + + if (i < kNumResponseMessages) { + gpr_log(GPR_ERROR, + "DoResponseStreamingWithSlowConsumer(): Responses read (i=%d) is " + "less than the expected messages (i.e kNumResponseMessages = %d)", + i, kNumResponseMessages); + + return TransientFailureOrAbort(); + } + Status s = stream->Finish(); + if (!AssertStatusOk(s)) { + return false; + } - AssertOkOrPrintErrorStatus(s); gpr_log(GPR_DEBUG, "Response streaming done."); + return true; } -void InteropClient::DoHalfDuplex() { +bool InteropClient::DoHalfDuplex() { gpr_log(GPR_DEBUG, "Sending half-duplex streaming rpc ..."); ClientContext context; @@ -483,7 +596,11 @@ void InteropClient::DoHalfDuplex() { ResponseParameters* response_parameter = request.add_response_parameters(); for (unsigned int i = 0; i < response_stream_sizes.size(); ++i) { response_parameter->set_size(response_stream_sizes[i]); - GPR_ASSERT(stream->Write(request)); + + if (!stream->Write(request)) { + gpr_log(GPR_ERROR, "DoHalfDuplex(): stream->Write() failed. i=%d", i); + return TransientFailureOrAbort(); + } } stream->WritesDone(); @@ -494,13 +611,27 @@ void InteropClient::DoHalfDuplex() { grpc::string(response_stream_sizes[i], '\0')); ++i; } - GPR_ASSERT(response_stream_sizes.size() == i); + + if (i < response_stream_sizes.size()) { + // stream->Read() failed before reading all the expected messages. This is + // most likely due to a connection failure + gpr_log(GPR_ERROR, + "DoHalfDuplex(): Responses read (i=%d) are less than the expected " + "number of messages response_stream_sizes.size() (%d)", + i, response_stream_sizes.size()); + return TransientFailureOrAbort(); + } + Status s = stream->Finish(); - AssertOkOrPrintErrorStatus(s); + if (!AssertStatusOk(s)) { + return false; + } + gpr_log(GPR_DEBUG, "Half-duplex streaming rpc done."); + return true; } -void InteropClient::DoPingPong() { +bool InteropClient::DoPingPong() { gpr_log(GPR_DEBUG, "Sending Ping Pong streaming rpc ..."); ClientContext context; @@ -513,24 +644,40 @@ void InteropClient::DoPingPong() { ResponseParameters* response_parameter = request.add_response_parameters(); Payload* payload = request.mutable_payload(); StreamingOutputCallResponse response; + for (unsigned int i = 0; i < request_stream_sizes.size(); ++i) { response_parameter->set_size(response_stream_sizes[i]); payload->set_body(grpc::string(request_stream_sizes[i], '\0')); - GPR_ASSERT(stream->Write(request)); - GPR_ASSERT(stream->Read(&response)); + + if (!stream->Write(request)) { + gpr_log(GPR_ERROR, "DoPingPong(): stream->Write() failed. i: %d", i); + return TransientFailureOrAbort(); + } + + if (!stream->Read(&response)) { + gpr_log(GPR_ERROR, "DoPingPong(): stream->Read() failed. i:%d", i); + return TransientFailureOrAbort(); + } + GPR_ASSERT(response.payload().body() == grpc::string(response_stream_sizes[i], '\0')); } stream->WritesDone(); + GPR_ASSERT(!stream->Read(&response)); + Status s = stream->Finish(); - AssertOkOrPrintErrorStatus(s); + if (!AssertStatusOk(s)) { + return false; + } + gpr_log(GPR_DEBUG, "Ping pong streaming done."); + return true; } -void InteropClient::DoCancelAfterBegin() { - gpr_log(GPR_DEBUG, "Sending request steaming rpc ..."); +bool InteropClient::DoCancelAfterBegin() { + gpr_log(GPR_DEBUG, "Sending request streaming rpc ..."); ClientContext context; StreamingInputCallRequest request; @@ -542,11 +689,16 @@ void InteropClient::DoCancelAfterBegin() { gpr_log(GPR_DEBUG, "Trying to cancel..."); context.TryCancel(); Status s = stream->Finish(); - GPR_ASSERT(s.error_code() == StatusCode::CANCELLED); + + if (!AssertStatusCode(s, StatusCode::CANCELLED)) { + return false; + } + gpr_log(GPR_DEBUG, "Canceling streaming done."); + return true; } -void InteropClient::DoCancelAfterFirstResponse() { +bool InteropClient::DoCancelAfterFirstResponse() { gpr_log(GPR_DEBUG, "Sending Ping Pong streaming rpc ..."); ClientContext context; @@ -560,17 +712,27 @@ void InteropClient::DoCancelAfterFirstResponse() { response_parameter->set_size(31415); request.mutable_payload()->set_body(grpc::string(27182, '\0')); StreamingOutputCallResponse response; - GPR_ASSERT(stream->Write(request)); - GPR_ASSERT(stream->Read(&response)); + + if (!stream->Write(request)) { + gpr_log(GPR_ERROR, "DoCancelAfterFirstResponse(): stream->Write() failed"); + return TransientFailureOrAbort(); + } + + if (!stream->Read(&response)) { + gpr_log(GPR_ERROR, "DoCancelAfterFirstResponse(): stream->Read failed"); + return TransientFailureOrAbort(); + } GPR_ASSERT(response.payload().body() == grpc::string(31415, '\0')); + gpr_log(GPR_DEBUG, "Trying to cancel..."); context.TryCancel(); Status s = stream->Finish(); gpr_log(GPR_DEBUG, "Canceling pingpong streaming done."); + return true; } -void InteropClient::DoTimeoutOnSleepingServer() { +bool InteropClient::DoTimeoutOnSleepingServer() { gpr_log(GPR_DEBUG, "Sending Ping Pong streaming rpc with a short deadline..."); @@ -587,11 +749,15 @@ void InteropClient::DoTimeoutOnSleepingServer() { stream->Write(request); Status s = stream->Finish(); - GPR_ASSERT(s.error_code() == StatusCode::DEADLINE_EXCEEDED); + if (!AssertStatusCode(s, StatusCode::DEADLINE_EXCEEDED)) { + return false; + } + gpr_log(GPR_DEBUG, "Pingpong streaming timeout done."); + return true; } -void InteropClient::DoEmptyStream() { +bool InteropClient::DoEmptyStream() { gpr_log(GPR_DEBUG, "Starting empty_stream."); ClientContext context; @@ -601,12 +767,17 @@ void InteropClient::DoEmptyStream() { stream->WritesDone(); StreamingOutputCallResponse response; GPR_ASSERT(stream->Read(&response) == false); + Status s = stream->Finish(); - AssertOkOrPrintErrorStatus(s); + if (!AssertStatusOk(s)) { + return false; + } + gpr_log(GPR_DEBUG, "empty_stream done."); + return true; } -void InteropClient::DoStatusWithMessage() { +bool InteropClient::DoStatusWithMessage() { gpr_log(GPR_DEBUG, "Sending RPC with a request for status code 2 and message"); @@ -620,12 +791,16 @@ void InteropClient::DoStatusWithMessage() { Status s = serviceStub_.Get()->UnaryCall(&context, request, &response); - GPR_ASSERT(s.error_code() == grpc::StatusCode::UNKNOWN); + if (!AssertStatusCode(s, grpc::StatusCode::UNKNOWN)) { + return false; + } + GPR_ASSERT(s.error_message() == test_msg); gpr_log(GPR_DEBUG, "Done testing Status and Message"); + return true; } -void InteropClient::DoCustomMetadata() { +bool InteropClient::DoCustomMetadata() { const grpc::string kEchoInitialMetadataKey("x-grpc-test-echo-initial"); const grpc::string kInitialMetadataValue("test_initial_metadata_value"); const grpc::string kEchoTrailingBinMetadataKey( @@ -645,7 +820,10 @@ void InteropClient::DoCustomMetadata() { request.mutable_payload()->set_body(payload.c_str(), kLargeRequestSize); Status s = serviceStub_.Get()->UnaryCall(&context, request, &response); - AssertOkOrPrintErrorStatus(s); + if (!AssertStatusOk(s)) { + return false; + } + const auto& server_initial_metadata = context.GetServerInitialMetadata(); auto iter = server_initial_metadata.find(kEchoInitialMetadataKey); GPR_ASSERT(iter != server_initial_metadata.end()); @@ -675,14 +853,29 @@ void InteropClient::DoCustomMetadata() { grpc::string payload(kLargeRequestSize, '\0'); request.mutable_payload()->set_body(payload.c_str(), kLargeRequestSize); StreamingOutputCallResponse response; - GPR_ASSERT(stream->Write(request)); + + if (!stream->Write(request)) { + gpr_log(GPR_ERROR, "DoCustomMetadata(): stream->Write() failed"); + return TransientFailureOrAbort(); + } + stream->WritesDone(); - GPR_ASSERT(stream->Read(&response)); + + if (!stream->Read(&response)) { + gpr_log(GPR_ERROR, "DoCustomMetadata(): stream->Read() failed"); + return TransientFailureOrAbort(); + } + GPR_ASSERT(response.payload().body() == grpc::string(kLargeResponseSize, '\0')); + GPR_ASSERT(!stream->Read(&response)); + Status s = stream->Finish(); - AssertOkOrPrintErrorStatus(s); + if (!AssertStatusOk(s)) { + return false; + } + const auto& server_initial_metadata = context.GetServerInitialMetadata(); auto iter = server_initial_metadata.find(kEchoInitialMetadataKey); GPR_ASSERT(iter != server_initial_metadata.end()); @@ -695,6 +888,8 @@ void InteropClient::DoCustomMetadata() { gpr_log(GPR_DEBUG, "Done testing stream with custom metadata"); } + + return true; } } // namespace testing diff --git a/test/cpp/interop/interop_client.h b/test/cpp/interop/interop_client.h index a3794fd93feb785dbada780f65b755f25d417fe3..ae75762bb8f634b3598aba4c3195270f5e7eb76c 100644 --- a/test/cpp/interop/interop_client.h +++ b/test/cpp/interop/interop_client.h @@ -51,41 +51,42 @@ using CheckerFn = class InteropClient { public: - explicit InteropClient(std::shared_ptr<Channel> channel); - explicit InteropClient( - std::shared_ptr<Channel> channel, - bool new_stub_every_test_case); // If new_stub_every_test_case is true, - // a new TestService::Stub object is - // created for every test case below + /// If new_stub_every_test_case is true, a new TestService::Stub object is + /// created for every test case + /// If do_not_abort_on_transient_failures is true, abort() is not called in + /// case of transient failures (like connection failures) + explicit InteropClient(std::shared_ptr<Channel> channel, + bool new_stub_every_test_case, + bool do_not_abort_on_transient_failures); ~InteropClient() {} void Reset(std::shared_ptr<Channel> channel); - void DoEmpty(); - void DoLargeUnary(); - void DoLargeCompressedUnary(); - void DoPingPong(); - void DoHalfDuplex(); - void DoRequestStreaming(); - void DoResponseStreaming(); - void DoResponseCompressedStreaming(); - void DoResponseStreamingWithSlowConsumer(); - void DoCancelAfterBegin(); - void DoCancelAfterFirstResponse(); - void DoTimeoutOnSleepingServer(); - void DoEmptyStream(); - void DoStatusWithMessage(); - void DoCustomMetadata(); + bool DoEmpty(); + bool DoLargeUnary(); + bool DoLargeCompressedUnary(); + bool DoPingPong(); + bool DoHalfDuplex(); + bool DoRequestStreaming(); + bool DoResponseStreaming(); + bool DoResponseCompressedStreaming(); + bool DoResponseStreamingWithSlowConsumer(); + bool DoCancelAfterBegin(); + bool DoCancelAfterFirstResponse(); + bool DoTimeoutOnSleepingServer(); + bool DoEmptyStream(); + bool DoStatusWithMessage(); + bool DoCustomMetadata(); // Auth tests. // username is a string containing the user email - void DoJwtTokenCreds(const grpc::string& username); - void DoComputeEngineCreds(const grpc::string& default_service_account, + bool DoJwtTokenCreds(const grpc::string& username); + bool DoComputeEngineCreds(const grpc::string& default_service_account, const grpc::string& oauth_scope); // username the GCE default service account email - void DoOauth2AuthToken(const grpc::string& username, + bool DoOauth2AuthToken(const grpc::string& username, const grpc::string& oauth_scope); // username is a string containing the user email - void DoPerRpcCreds(const grpc::string& json_key); + bool DoPerRpcCreds(const grpc::string& json_key); private: class ServiceStub { @@ -105,13 +106,18 @@ class InteropClient { // Get() call }; - void PerformLargeUnary(SimpleRequest* request, SimpleResponse* response); + bool PerformLargeUnary(SimpleRequest* request, SimpleResponse* response); /// Run \a custom_check_fn as an additional check. - void PerformLargeUnary(SimpleRequest* request, SimpleResponse* response, + bool PerformLargeUnary(SimpleRequest* request, SimpleResponse* response, CheckerFn custom_checks_fn); - void AssertOkOrPrintErrorStatus(const Status& s); + bool AssertStatusOk(const Status& s); + bool AssertStatusCode(const Status& s, StatusCode expected_code); + bool TransientFailureOrAbort(); ServiceStub serviceStub_; + + /// If true, abort() is not called for transient failures + bool do_not_abort_on_transient_failures_; }; } // namespace testing diff --git a/test/cpp/interop/metrics_client.cc b/test/cpp/interop/metrics_client.cc index cc304f2e89560d51422adf39b7961716c973af79..c8c2215fab186e8ebbd6ddceb1a3f84c86e0ccd8 100644 --- a/test/cpp/interop/metrics_client.cc +++ b/test/cpp/interop/metrics_client.cc @@ -42,13 +42,15 @@ #include "test/cpp/util/metrics_server.h" #include "test/cpp/util/test_config.h" -DEFINE_string(metrics_server_address, "", +int kDeadlineSecs = 10; + +DEFINE_string(metrics_server_address, "localhost:8081", "The metrics server addresses in the fomrat <hostname>:<port>"); +DEFINE_int32(deadline_secs, kDeadlineSecs, + "The deadline (in seconds) for RCP call"); DEFINE_bool(total_only, false, "If true, this prints only the total value of all gauges"); -int kDeadlineSecs = 10; - using grpc::testing::EmptyMessage; using grpc::testing::GaugeResponse; using grpc::testing::MetricsService; @@ -56,12 +58,13 @@ using grpc::testing::MetricsServiceImpl; // Prints the values of all Gauges (unless total_only is set to 'true' in which // case this only prints the sum of all gauge values). -bool PrintMetrics(std::unique_ptr<MetricsService::Stub> stub, bool total_only) { +bool PrintMetrics(std::unique_ptr<MetricsService::Stub> stub, bool total_only, + int deadline_secs) { grpc::ClientContext context; EmptyMessage message; std::chrono::system_clock::time_point deadline = - std::chrono::system_clock::now() + std::chrono::seconds(kDeadlineSecs); + std::chrono::system_clock::now() + std::chrono::seconds(deadline_secs); context.set_deadline(deadline); @@ -108,7 +111,8 @@ int main(int argc, char** argv) { std::shared_ptr<grpc::Channel> channel(grpc::CreateChannel( FLAGS_metrics_server_address, grpc::InsecureChannelCredentials())); - if (!PrintMetrics(MetricsService::NewStub(channel), FLAGS_total_only)) { + if (!PrintMetrics(MetricsService::NewStub(channel), FLAGS_total_only, + FLAGS_deadline_secs)) { return 1; } diff --git a/test/cpp/interop/stress_interop_client.cc b/test/cpp/interop/stress_interop_client.cc index f287a5aa3b47386e2ecd6992013bc17725a5c2ca..aa95682e7413598b360b06312fbc99175c0eabf0 100644 --- a/test/cpp/interop/stress_interop_client.cc +++ b/test/cpp/interop/stress_interop_client.cc @@ -84,11 +84,12 @@ StressTestInteropClient::StressTestInteropClient( int test_id, const grpc::string& server_address, std::shared_ptr<Channel> channel, const WeightedRandomTestSelector& test_selector, long test_duration_secs, - long sleep_duration_ms) + long sleep_duration_ms, bool do_not_abort_on_transient_failures) : test_id_(test_id), server_address_(server_address), channel_(channel), - interop_client_(new InteropClient(channel, false)), + interop_client_(new InteropClient(channel, false, + do_not_abort_on_transient_failures)), test_selector_(test_selector), test_duration_secs_(test_duration_secs), sleep_duration_ms_(sleep_duration_ms) {} @@ -126,31 +127,67 @@ void StressTestInteropClient::MainLoop(std::shared_ptr<QpsGauge> qps_gauge) { } } -// TODO(sree): Add all interop tests -void StressTestInteropClient::RunTest(TestCaseType test_case) { +bool StressTestInteropClient::RunTest(TestCaseType test_case) { + bool is_success = false; switch (test_case) { case EMPTY_UNARY: { - interop_client_->DoEmpty(); + is_success = interop_client_->DoEmpty(); break; } case LARGE_UNARY: { - interop_client_->DoLargeUnary(); + is_success = interop_client_->DoLargeUnary(); break; } case LARGE_COMPRESSED_UNARY: { - interop_client_->DoLargeCompressedUnary(); + is_success = interop_client_->DoLargeCompressedUnary(); break; } case CLIENT_STREAMING: { - interop_client_->DoRequestStreaming(); + is_success = interop_client_->DoRequestStreaming(); break; } case SERVER_STREAMING: { - interop_client_->DoResponseStreaming(); + is_success = interop_client_->DoResponseStreaming(); + break; + } + case SERVER_COMPRESSED_STREAMING: { + is_success = interop_client_->DoResponseCompressedStreaming(); + break; + } + case SLOW_CONSUMER: { + is_success = interop_client_->DoResponseStreamingWithSlowConsumer(); + break; + } + case HALF_DUPLEX: { + is_success = interop_client_->DoHalfDuplex(); + break; + } + case PING_PONG: { + is_success = interop_client_->DoPingPong(); + break; + } + case CANCEL_AFTER_BEGIN: { + is_success = interop_client_->DoCancelAfterBegin(); + break; + } + case CANCEL_AFTER_FIRST_RESPONSE: { + is_success = interop_client_->DoCancelAfterFirstResponse(); + break; + } + case TIMEOUT_ON_SLEEPING_SERVER: { + is_success = interop_client_->DoTimeoutOnSleepingServer(); break; } case EMPTY_STREAM: { - interop_client_->DoEmptyStream(); + is_success = interop_client_->DoEmptyStream(); + break; + } + case STATUS_CODE_AND_MESSAGE: { + is_success = interop_client_->DoStatusWithMessage(); + break; + } + case CUSTOM_METADATA: { + is_success = interop_client_->DoCustomMetadata(); break; } default: { @@ -159,6 +196,8 @@ void StressTestInteropClient::RunTest(TestCaseType test_case) { break; } } + + return is_success; } } // namespace testing diff --git a/test/cpp/interop/stress_interop_client.h b/test/cpp/interop/stress_interop_client.h index cb0cd988214e5298e39955a8087169a279207263..aa93b58b4a75b233d0c10ce55df4c2c3c9dbdbd1 100644 --- a/test/cpp/interop/stress_interop_client.h +++ b/test/cpp/interop/stress_interop_client.h @@ -49,7 +49,6 @@ namespace testing { using std::pair; using std::vector; -// TODO(sreek): Add more test cases here in future enum TestCaseType { UNKNOWN_TEST = -1, EMPTY_UNARY = 0, @@ -57,7 +56,16 @@ enum TestCaseType { LARGE_COMPRESSED_UNARY = 2, CLIENT_STREAMING = 3, SERVER_STREAMING = 4, - EMPTY_STREAM = 5 + SERVER_COMPRESSED_STREAMING = 5, + SLOW_CONSUMER = 6, + HALF_DUPLEX = 7, + PING_PONG = 8, + CANCEL_AFTER_BEGIN = 9, + CANCEL_AFTER_FIRST_RESPONSE = 10, + TIMEOUT_ON_SLEEPING_SERVER = 11, + EMPTY_STREAM = 12, + STATUS_CODE_AND_MESSAGE = 13, + CUSTOM_METADATA = 14 }; const vector<pair<TestCaseType, grpc::string>> kTestCaseList = { @@ -66,7 +74,16 @@ const vector<pair<TestCaseType, grpc::string>> kTestCaseList = { {LARGE_COMPRESSED_UNARY, "large_compressed_unary"}, {CLIENT_STREAMING, "client_streaming"}, {SERVER_STREAMING, "server_streaming"}, - {EMPTY_STREAM, "empty_stream"}}; + {SERVER_COMPRESSED_STREAMING, "server_compressed_streaming"}, + {SLOW_CONSUMER, "slow_consumer"}, + {HALF_DUPLEX, "half_duplex"}, + {PING_PONG, "ping_pong"}, + {CANCEL_AFTER_BEGIN, "cancel_after_begin"}, + {CANCEL_AFTER_FIRST_RESPONSE, "cancel_after_first_response"}, + {TIMEOUT_ON_SLEEPING_SERVER, "timeout_on_sleeping_server"}, + {EMPTY_STREAM, "empty_stream"}, + {STATUS_CODE_AND_MESSAGE, "status_code_and_message"}, + {CUSTOM_METADATA, "custom_metadata"}}; class WeightedRandomTestSelector { public: @@ -87,14 +104,15 @@ class StressTestInteropClient { StressTestInteropClient(int test_id, const grpc::string& server_address, std::shared_ptr<Channel> channel, const WeightedRandomTestSelector& test_selector, - long test_duration_secs, long sleep_duration_ms); + long test_duration_secs, long sleep_duration_ms, + bool do_not_abort_on_transient_failures); // The main function. Use this as the thread entry point. // qps_gauge is the QpsGauge to record the requests per second metric void MainLoop(std::shared_ptr<QpsGauge> qps_gauge); private: - void RunTest(TestCaseType test_case); + bool RunTest(TestCaseType test_case); int test_id_; const grpc::string& server_address_; diff --git a/test/cpp/interop/stress_test.cc b/test/cpp/interop/stress_test.cc index d9e3fd25c512960837171939f8b00c6a00733575..77879319003f281692ef05a56fb9efbcc174e820 100644 --- a/test/cpp/interop/stress_test.cc +++ b/test/cpp/interop/stress_test.cc @@ -89,7 +89,16 @@ DEFINE_string(test_cases, "", " large_compressed_unary\n" " client_streaming\n" " server_streaming\n" + " server_compressed_streaming\n" + " slow_consumer\n" + " half_duplex\n" + " ping_pong\n" + " cancel_after_begin\n" + " cancel_after_first_response\n" + " timeout_on_sleeping_server\n" " empty_stream\n" + " status_code_and_message\n" + " custom_metadata\n" " Example: \"empty_unary:20,large_unary:10,empty_stream:70\"\n" " The above will execute 'empty_unary', 20% of the time," " 'large_unary', 10% of the time and 'empty_stream' the remaining" @@ -101,6 +110,10 @@ DEFINE_int32(log_level, GPR_LOG_SEVERITY_INFO, "The choices are: 0 (GPR_LOG_SEVERITY_DEBUG), 1 " "(GPR_LOG_SEVERITY_INFO) and 2 (GPR_LOG_SEVERITY_ERROR)"); +DEFINE_bool(do_not_abort_on_transient_failures, true, + "If set to 'true', abort() is not called in case of transient " + "failures like temporary connection failures."); + using grpc::testing::kTestCaseList; using grpc::testing::MetricsService; using grpc::testing::MetricsServiceImpl; @@ -189,6 +202,12 @@ void LogParameterInfo(const std::vector<grpc::string>& addresses, gpr_log(GPR_INFO, "test_cases : %s", FLAGS_test_cases.c_str()); gpr_log(GPR_INFO, "sleep_duration_ms: %d", FLAGS_sleep_duration_ms); gpr_log(GPR_INFO, "test_duration_secs: %d", FLAGS_test_duration_secs); + gpr_log(GPR_INFO, "num_channels_per_server: %d", + FLAGS_num_channels_per_server); + gpr_log(GPR_INFO, "num_stubs_per_channel: %d", FLAGS_num_stubs_per_channel); + gpr_log(GPR_INFO, "log_level: %d", FLAGS_log_level); + gpr_log(GPR_INFO, "do_not_abort_on_transient_failures: %s", + FLAGS_do_not_abort_on_transient_failures ? "true" : "false"); int num = 0; for (auto it = addresses.begin(); it != addresses.end(); it++) { @@ -272,7 +291,7 @@ int main(int argc, char** argv) { stub_idx++) { StressTestInteropClient* client = new StressTestInteropClient( ++thread_idx, *it, channel, test_selector, FLAGS_test_duration_secs, - FLAGS_sleep_duration_ms); + FLAGS_sleep_duration_ms, FLAGS_do_not_abort_on_transient_failures); bool is_already_created = false; // QpsGauge name diff --git a/test/cpp/qps/client.h b/test/cpp/qps/client.h index 175529f01b2051d72d5addae054a9ed13d1be9c7..2a89eb8018299faac6ff641864b6415b9a059bf9 100644 --- a/test/cpp/qps/client.h +++ b/test/cpp/qps/client.h @@ -38,6 +38,7 @@ #include <mutex> #include <vector> +#include <grpc++/channel.h> #include <grpc++/support/byte_buffer.h> #include <grpc++/support/channel_arguments.h> #include <grpc++/support/slice.h> @@ -315,6 +316,10 @@ class ClientImpl : public Client { target, config.security_params().server_host_override(), config.has_security_params(), !config.security_params().use_test_ca(), std::shared_ptr<CallCredentials>(), args); + gpr_log(GPR_INFO, "Connecting to %s", target.c_str()); + GPR_ASSERT(channel_->WaitForConnected( + gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), + gpr_time_from_seconds(30, GPR_TIMESPAN)))); stub_ = create_stub(channel_); } Channel* get_channel() { return channel_.get(); } diff --git a/test/cpp/qps/client_async.cc b/test/cpp/qps/client_async.cc index e72cef28114d5b2dd1799612b22313a6a50d5f59..c32160a7d4552fd907bfb4f21986234abf1bf613 100644 --- a/test/cpp/qps/client_async.cc +++ b/test/cpp/qps/client_async.cc @@ -84,7 +84,8 @@ class ClientRpcContextUnaryImpl : public ClientRpcContext { std::function< std::unique_ptr<grpc::ClientAsyncResponseReader<ResponseType>>( BenchmarkService::Stub*, grpc::ClientContext*, const RequestType&, - CompletionQueue*)> start_req, + CompletionQueue*)> + start_req, std::function<void(grpc::Status, ResponseType*)> on_done) : context_(), stub_(stub), @@ -165,7 +166,8 @@ class AsyncClient : public ClientImpl<StubType, RequestType> { AsyncClient(const ClientConfig& config, std::function<ClientRpcContext*( StubType*, std::function<gpr_timespec()> next_issue, - const RequestType&)> setup_ctx, + const RequestType&)> + setup_ctx, std::function<std::unique_ptr<StubType>(std::shared_ptr<Channel>)> create_stub) : ClientImpl<StubType, RequestType>(config, create_stub), @@ -278,7 +280,8 @@ class ClientRpcContextStreamingImpl : public ClientRpcContext { std::function<std::unique_ptr< grpc::ClientAsyncReaderWriter<RequestType, ResponseType>>( BenchmarkService::Stub*, grpc::ClientContext*, CompletionQueue*, - void*)> start_req, + void*)> + start_req, std::function<void(grpc::Status, ResponseType*)> on_done) : context_(), stub_(stub), @@ -405,7 +408,8 @@ class ClientRpcContextGenericStreamingImpl : public ClientRpcContext { std::function<gpr_timespec()> next_issue, std::function<std::unique_ptr<grpc::GenericClientAsyncReaderWriter>( grpc::GenericStub*, grpc::ClientContext*, - const grpc::string& method_name, CompletionQueue*, void*)> start_req, + const grpc::string& method_name, CompletionQueue*, void*)> + start_req, std::function<void(grpc::Status, ByteBuffer*)> on_done) : context_(), stub_(stub), diff --git a/test/cpp/qps/gen_build_yaml.py b/test/cpp/qps/gen_build_yaml.py index 9d6bf2ab73ca1d8cc5877afb77f0f14e19747057..6b3329b046b71a86bc8dc76851246d59bfa90acd 100755 --- a/test/cpp/qps/gen_build_yaml.py +++ b/test/cpp/qps/gen_build_yaml.py @@ -43,12 +43,16 @@ sys.path.append(run_tests_root) import performance.scenario_config as scenario_config +def _scenario_json_string(scenario_json): + return json.dumps(scenario_config.remove_nonproto_fields(scenario_json)) + print yaml.dump({ 'tests': [ { 'name': 'json_run_localhost', - 'shortname': 'json_run_localhost:%s' % js['name'], - 'args': ['--scenario_json', pipes.quote(json.dumps(js))], + 'shortname': 'json_run_localhost:%s' % scenario_json['name'], + 'args': ['--scenario_json', + pipes.quote(_scenario_json_string(scenario_json))], 'ci_platforms': ['linux', 'mac', 'posix', 'windows'], 'platforms': ['linux', 'mac', 'posix', 'windows'], 'flaky': False, @@ -58,6 +62,6 @@ print yaml.dump({ 'cpu_cost': 1000.0, 'exclude_configs': [] } - for js in scenario_config.CXXLanguage().scenarios() + for scenario_json in scenario_config.CXXLanguage().scenarios() ] }) diff --git a/test/cpp/qps/server_async.cc b/test/cpp/qps/server_async.cc index a68f1ae7b672086d366d9af5182b210bb9335128..1234542687dd00ac8f650a87e47ec73752ee51c7 100644 --- a/test/cpp/qps/server_async.cc +++ b/test/cpp/qps/server_async.cc @@ -73,7 +73,8 @@ class AsyncQpsServerTest : public Server { CompletionQueue *, ServerCompletionQueue *, void *)> request_streaming_function, std::function<grpc::Status(const PayloadConfig &, const RequestType *, - ResponseType *)> process_rpc) + ResponseType *)> + process_rpc) : Server(config) { char *server_address = NULL; @@ -190,7 +191,8 @@ class AsyncQpsServerTest : public Server { ServerRpcContextUnaryImpl( std::function<void(ServerContextType *, RequestType *, grpc::ServerAsyncResponseWriter<ResponseType> *, - void *)> request_method, + void *)> + request_method, std::function<grpc::Status(const RequestType *, ResponseType *)> invoke_method) : srv_ctx_(new ServerContextType), diff --git a/test/distrib/csharp/DistribTest/DistribTest.csproj b/test/distrib/csharp/DistribTest/DistribTest.csproj index 7605495f0f6242385033675a2f9efd2ad293ab5b..1acb34d1b2e4ba131af27fa4e0a4f9a0410d5265 100644 --- a/test/distrib/csharp/DistribTest/DistribTest.csproj +++ b/test/distrib/csharp/DistribTest/DistribTest.csproj @@ -113,12 +113,12 @@ <None Include="packages.config" /> </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> - <Import Project="..\packages\grpc.native.csharp.__GRPC_NUGET_VERSION__\build\portable-net45+netcore45+wpa81+wp8\grpc.native.csharp.targets" Condition="Exists('..\packages\grpc.native.csharp.__GRPC_NUGET_VERSION__\build\portable-net45+netcore45+wpa81+wp8\grpc.native.csharp.targets')" /> + <Import Project="..\packages\Grpc.Core.__GRPC_NUGET_VERSION__\build\net45\Grpc.Core.targets" Condition="Exists('..\packages\Grpc.Core.__GRPC_NUGET_VERSION__\build\net45\Grpc.Core.targets')" /> <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> <PropertyGroup> <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> </PropertyGroup> - <Error Condition="!Exists('..\packages\grpc.native.csharp.__GRPC_NUGET_VERSION__\build\portable-net45+netcore45+wpa81+wp8\grpc.native.csharp.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.native.csharp.__GRPC_NUGET_VERSION__\build\portable-net45+netcore45+wpa81+wp8\grpc.native.csharp.targets'))" /> + <Error Condition="!Exists('..\packages\Grpc.Core.__GRPC_NUGET_VERSION__\build\net45\Grpc.Core.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Grpc.Core.__GRPC_NUGET_VERSION__\build\net45\Grpc.Core.targets'))" /> <Error Condition="!Exists('..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets'))" /> </Target> <Import Project="..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets" Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" /> @@ -129,4 +129,4 @@ <Target Name="AfterBuild"> </Target> --> -</Project> \ No newline at end of file +</Project> diff --git a/test/distrib/csharp/DistribTest/packages.config b/test/distrib/csharp/DistribTest/packages.config index aca09f600cbd40fa998cec32ff17ac990149f14c..69630193d02755067133b3ea86e842920cc760e9 100644 --- a/test/distrib/csharp/DistribTest/packages.config +++ b/test/distrib/csharp/DistribTest/packages.config @@ -6,11 +6,10 @@ <package id="Grpc" version="__GRPC_NUGET_VERSION__" targetFramework="net45" /> <package id="Grpc.Auth" version="__GRPC_NUGET_VERSION__" targetFramework="net45" /> <package id="Grpc.Core" version="__GRPC_NUGET_VERSION__" targetFramework="net45" /> - <package id="grpc.native.csharp" version="__GRPC_NUGET_VERSION__" targetFramework="net45" /> <package id="Ix-Async" version="1.2.3" targetFramework="net45" /> <package id="Microsoft.Bcl" version="1.1.10" targetFramework="net45" /> <package id="Microsoft.Bcl.Async" version="1.0.168" targetFramework="net45" /> <package id="Microsoft.Bcl.Build" version="1.0.21" targetFramework="net45" /> <package id="Microsoft.Net.Http" version="2.2.29" targetFramework="net45" /> <package id="Newtonsoft.Json" version="7.0.1" targetFramework="net45" /> -</packages> \ No newline at end of file +</packages> diff --git a/test/distrib/csharp/build_vs2015.bat b/test/distrib/csharp/build_vs2015.bat index 50485a30f3070a9b5816548fa647f267ee4a9137..5779878e09e6e4d111831f2850ada526135e93e5 100644 --- a/test/distrib/csharp/build_vs2015.bat +++ b/test/distrib/csharp/build_vs2015.bat @@ -1,3 +1,32 @@ +@rem Copyright 2016, Google Inc. +@rem All rights reserved. +@rem +@rem Redistribution and use in source and binary forms, with or without +@rem modification, are permitted provided that the following conditions are +@rem met: +@rem +@rem * Redistributions of source code must retain the above copyright +@rem notice, this list of conditions and the following disclaimer. +@rem * Redistributions in binary form must reproduce the above +@rem copyright notice, this list of conditions and the following disclaimer +@rem in the documentation and/or other materials provided with the +@rem distribution. +@rem * Neither the name of Google Inc. nor the names of its +@rem contributors may be used to endorse or promote products derived from +@rem this software without specific prior written permission. +@rem +@rem THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +@rem "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +@rem LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +@rem A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +@rem OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +@rem SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +@rem LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +@rem DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +@rem THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +@rem (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +@rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + @rem Convenience wrapper that runs specified gRPC target using msbuild @rem Usage: build.bat TARGET_NAME diff --git a/test/distrib/python/run_distrib_test.sh b/test/distrib/python/run_distrib_test.sh index 79893af8e54be78471473a9931b390e9e6b01ca5..8a983bc248809959a87a1f235d697f891f27d15f 100755 --- a/test/distrib/python/run_distrib_test.sh +++ b/test/distrib/python/run_distrib_test.sh @@ -33,8 +33,8 @@ set -ex cd $(dirname $0) # Pick up the source dist archive whatever its version is -SDIST_ARCHIVE=$EXTERNAL_GIT_ROOT/input_artifacts/grpcio-*.tar.gz -BDIST_DIR="file://$EXTERNAL_GIT_ROOT/input_artifacts" +BDIST_ARCHIVES=$EXTERNAL_GIT_ROOT/input_artifacts/grpcio-*.whl +TOOLS_BDIST_ARCHIVES=$EXTERNAL_GIT_ROOT/input_artifacts/grpcio_tools-*.whl if [ ! -f ${SDIST_ARCHIVE} ] then @@ -42,17 +42,25 @@ then exit 1 fi -PIP=pip2 -which $PIP || PIP=pip PYTHON=python2 +PIP=pip2 which $PYTHON || PYTHON=python +which $PIP || PIP=pip # TODO(jtattermusch): this shouldn't be required -$PIP install --upgrade six +# TODO(jtattermusch): run the command twice to workaround docker-on-overlay +# issue https://github.com/docker/docker/issues/12327 +# (first attempt will fail when using docker with overlayFS) +${PIP} install --upgrade six pip || ${PIP} install --upgrade six pip -GRPC_PYTHON_BINARIES_REPOSITORY="${BDIST_DIR}" \ - $PIP install \ - ${SDIST_ARCHIVE} +# At least one of the bdist packages has to succeed (whichever one matches the +# test machine, anyway). +for bdist in ${BDIST_ARCHIVES} ${TOOLS_BDIST_ARCHIVES}; do + ($PYTHON -m pip install $bdist) || true +done -$PYTHON distribtest.py +# TODO(jtattermusch): add a .proto file to the distribtest, generate python +# code from it and then use the generated code from distribtest.py +$PYTHON -m grpc.tools.protoc +$PYTHON distribtest.py diff --git a/third_party/objective_c/Cronet/cronet_c_for_grpc.h b/third_party/objective_c/Cronet/cronet_c_for_grpc.h new file mode 100644 index 0000000000000000000000000000000000000000..15a511aebd0b3d751b4f13127d8c51b289a89b95 --- /dev/null +++ b/third_party/objective_c/Cronet/cronet_c_for_grpc.h @@ -0,0 +1,202 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_CRONET_IOS_CRONET_C_FOR_GRPC_H_ +#define COMPONENTS_CRONET_IOS_CRONET_C_FOR_GRPC_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include <stddef.h> + +/* Cronet Engine API. */ + +/* Opaque object representing Cronet Engine. Created and configured outside + * of this API to facilitate sharing with other components */ +typedef struct cronet_engine { void* obj; } cronet_engine; + +void cronet_engine_add_quic_hint(cronet_engine* engine, + const char* host, + int port, + int alternate_port); + +/* Cronet Bidirectional Stream API */ + +/* Opaque object representing Cronet Bidirectional Stream. */ +typedef struct cronet_bidirectional_stream { + void* obj; + void* annotation; +} cronet_bidirectional_stream; + +/* A single request or response header element. */ +typedef struct cronet_bidirectional_stream_header { + const char* key; + const char* value; +} cronet_bidirectional_stream_header; + +/* Array of request or response headers or trailers. */ +typedef struct cronet_bidirectional_stream_header_array { + size_t count; + size_t capacity; + cronet_bidirectional_stream_header* headers; +} cronet_bidirectional_stream_header_array; + +/* Set of callbacks used to receive callbacks from bidirectional stream. */ +typedef struct cronet_bidirectional_stream_callback { + /* Invoked when request headers are sent. Indicates that stream has initiated + * the request. Consumer may call cronet_bidirectional_stream_write() to start + * writing data. + */ + void (*on_request_headers_sent)(cronet_bidirectional_stream* stream); + + /* Invoked when initial response headers are received. + * Consumer must call cronet_bidirectional_stream_read() to start reading. + * Consumer may call cronet_bidirectional_stream_write() to start writing or + * close the stream. Contents of |headers| is valid for duration of the call. + */ + void (*on_response_headers_received)( + cronet_bidirectional_stream* stream, + const cronet_bidirectional_stream_header_array* headers, + const char* negotiated_protocol); + + /* Invoked when data is read into the buffer passed to + * cronet_bidirectional_stream_read(). Only part of the buffer may be + * populated. To continue reading, call cronet_bidirectional_stream_read(). + * It may be invoked after on_response_trailers_received()}, if there was + * pending read data before trailers were received. + * + * If count is 0, it means the remote side has signaled that it will send no + * more data; future calls to cronet_bidirectional_stream_read() will result + * in the on_data_read() callback or on_succeded() callback if + * cronet_bidirectional_stream_write() was invoked with end_of_stream set to + * true. + */ + void (*on_read_completed)(cronet_bidirectional_stream* stream, + char* data, + int count); + + /** + * Invoked when all data passed to cronet_bidirectional_stream_write() is + * sent. + * To continue writing, call cronet_bidirectional_stream_write(). + */ + void (*on_write_completed)(cronet_bidirectional_stream* stream, + const char* data); + + /* Invoked when trailers are received before closing the stream. Only invoked + * when server sends trailers, which it may not. May be invoked while there is + * read data remaining in local buffer. Contents of |trailers| is valid for + * duration of the call. + */ + void (*on_response_trailers_received)( + cronet_bidirectional_stream* stream, + const cronet_bidirectional_stream_header_array* trailers); + + /** + * Invoked when there is no data to be read or written and the stream is + * closed successfully remotely and locally. Once invoked, no further callback + * methods will be invoked. + */ + void (*on_succeded)(cronet_bidirectional_stream* stream); + + /** + * Invoked if the stream failed for any reason after + * cronet_bidirectional_stream_start(). HTTP/2 error codes are + * mapped to chrome net error codes. Once invoked, no further callback methods + * will be invoked. + */ + void (*on_failed)(cronet_bidirectional_stream* stream, int net_error); + + /** + * Invoked if the stream was canceled via + * cronet_bidirectional_stream_cancel(). Once invoked, no further callback + * methods will be invoked. + */ + void (*on_canceled)(cronet_bidirectional_stream* stream); +} cronet_bidirectional_stream_callback; + +/* Create a new stream object that uses |engine| and |callback|. All stream + * tasks are performed asynchronously on the |engine| network thread. |callback| + * methods are invoked synchronously on the |engine| network thread, but must + * not run tasks on the current thread to prevent blocking networking operations + * and causing exceptions during shutdown. The |annotation| is stored in + * bidirectional stream for arbitrary use by application. + * + * Returned |cronet_bidirectional_stream*| is owned by the caller, and must be + * destroyed using |cronet_bidirectional_stream_destroy|. + * + * Both |calback| and |engine| must remain valid until stream is destroyed. + */ +cronet_bidirectional_stream* cronet_bidirectional_stream_create( + cronet_engine* engine, + void* annotation, + cronet_bidirectional_stream_callback* callback); + +/* TBD: The following methods return int. Should it be a custom type? */ + +/* Destroy stream object. Destroy could be called from any thread, including + * network thread, but is posted, so |stream| is valid until calling task is + * complete. + */ +int cronet_bidirectional_stream_destroy(cronet_bidirectional_stream* stream); + +/* Start the stream by sending request to |url| using |method| and |headers|. If + * |end_of_stream| is true, then no data is expected to be written. + */ +int cronet_bidirectional_stream_start( + cronet_bidirectional_stream* stream, + const char* url, + int priority, + const char* method, + const cronet_bidirectional_stream_header_array* headers, + bool end_of_stream); + +/* Read response data into |buffer| of |capacity| length. Must only be called at + * most once in response to each invocation of the + * on_response_headers_received() and on_read_completed() methods of the + * cronet_bidirectional_stream_callback. + * Each call will result in an invocation of one of the callback's + * on_read_completed method if data is read, its on_succeeded() method if + * the stream is closed, or its on_failed() method if there's an error. + */ +int cronet_bidirectional_stream_read(cronet_bidirectional_stream* stream, + char* buffer, + int capacity); + +/* Read response data into |buffer| of |capacity| length. Must only be called at + * most once in response to each invocation of the + * on_response_headers_received() and on_read_completed() methods of the + * cronet_bidirectional_stream_callback. + * Each call will result in an invocation of one of the callback's + * on_read_completed method if data is read, its on_succeeded() method if + * the stream is closed, or its on_failed() method if there's an error. + */ +int cronet_bidirectional_stream_write(cronet_bidirectional_stream* stream, + const char* buffer, + int count, + bool end_of_stream); + +/* Cancels the stream. Can be called at any time after + * cronet_bidirectional_stream_start(). The on_canceled() method of + * cronet_bidirectional_stream_callback will be invoked when cancelation + * is complete and no further callback methods will be invoked. If the + * stream has completed or has not started, calling + * cronet_bidirectional_stream_cancel() has no effect and on_canceled() will not + * be invoked. At most one callback method may be invoked after + * cronet_bidirectional_stream_cancel() has completed. + */ +int cronet_bidirectional_stream_cancel(cronet_bidirectional_stream* stream); + +/* Returns true if the |stream| was successfully started and is now done + * (succeeded, canceled, or failed). + * Returns false if the |stream| stream is not yet started or is in progress. + */ +bool cronet_bidirectional_stream_is_done(cronet_bidirectional_stream* stream); + +#ifdef __cplusplus +} +#endif + +#endif // COMPONENTS_CRONET_IOS_CRONET_C_FOR_GRPC_H_ diff --git a/third_party/protobuf b/third_party/protobuf index d5fb408ddc281ffcadeb08699e65bb694656d0bd..3470b6895aa659b7559ed678e029a5338e535f14 160000 --- a/third_party/protobuf +++ b/third_party/protobuf @@ -1 +1 @@ -Subproject commit d5fb408ddc281ffcadeb08699e65bb694656d0bd +Subproject commit 3470b6895aa659b7559ed678e029a5338e535f14 diff --git a/tools/buildgen/plugins/make_fuzzer_tests.py b/tools/buildgen/plugins/make_fuzzer_tests.py index 9d0006973ad50644a6940017a479e504f8af2a53..7c6fd535700c10dcd6cee347d00547ab15f98c5a 100644 --- a/tools/buildgen/plugins/make_fuzzer_tests.py +++ b/tools/buildgen/plugins/make_fuzzer_tests.py @@ -50,6 +50,7 @@ def mako_plugin(dictionary): 'name': new_target['name'], 'args': [fn], 'exclude_configs': [], + 'uses_polling': False, 'platforms': ['linux'], 'ci_platforms': ['linux'], 'flaky': False, diff --git a/tools/codegen/core/gen_header_frame.py b/tools/codegen/core/gen_header_frame.py index 96e6c67fa668a5863d2ada60ae8ae3d2ae883fb7..ee476267f23ac230d21e51ae183b1dc9ab993791 100755 --- a/tools/codegen/core/gen_header_frame.py +++ b/tools/codegen/core/gen_header_frame.py @@ -38,6 +38,8 @@ import json import sys +set_end_stream = len(sys.argv) > 1 and sys.argv[1] == '--set_end_stream' + # parse input, fill in vals vals = [] for line in sys.stdin: @@ -65,6 +67,9 @@ for key, value in vals: payload_bytes.append(payload_line) # fill in header +flags = 0x04 # END_HEADERS +if set_end_stream: + flags |= 0x01 # END_STREAM payload_bytes[0].extend([ (payload_len >> 16) & 0xff, (payload_len >> 8) & 0xff, @@ -72,7 +77,7 @@ payload_bytes[0].extend([ # header frame 0x01, # flags - 0x04, + flags, # stream id 0x00, 0x00, diff --git a/tools/codegen/core/gen_nano_proto.sh b/tools/codegen/core/gen_nano_proto.sh index e2d2f672e93f9e1fb6df5eaef509687a4cfa2481..b216a20379eec3acb488b509264e1897c7b674e6 100755 --- a/tools/codegen/core/gen_nano_proto.sh +++ b/tools/codegen/core/gen_nano_proto.sh @@ -29,11 +29,11 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# # Example usage: # tools/codegen/core/gen_nano_proto.sh \ -# src/proto/grpc/lb/v0/load_balancer.proto -# $PWD/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0 +# src/proto/grpc/lb/v1/load_balancer.proto \ +# $PWD/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1 \ +# src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1 # # Exit statuses: # 1: Incorrect number of arguments diff --git a/tools/distrib/check_copyright.py b/tools/distrib/check_copyright.py index 68411c631df79f0fa908bc7f1be30a07105f47f3..4577ab3d11d4543e8fa89d502b5177735954ab7c 100755 --- a/tools/distrib/check_copyright.py +++ b/tools/distrib/check_copyright.py @@ -71,6 +71,7 @@ with open('LICENSE') as f: # that given a line of license text, returns what should # be in the file LICENSE_PREFIX = { + '.bat': r'@rem\s*', '.c': r'\s*(?://|\*)\s*', '.cc': r'\s*(?://|\*)\s*', '.h': r'\s*(?://|\*)\s*', diff --git a/tools/distrib/check_include_guards.py b/tools/distrib/check_include_guards.py index 897a899e7ed2b4cff6014321c925aac44630d789..ef770b30b42ec53c010648f4671fd0fffaa39192 100755 --- a/tools/distrib/check_include_guards.py +++ b/tools/distrib/check_include_guards.py @@ -31,6 +31,7 @@ import argparse import os +import os.path import re import sys import subprocess @@ -55,7 +56,7 @@ class GuardValidator(object): def __init__(self): self.ifndef_re = re.compile(r'#ifndef ([A-Z][A-Z_1-9]*)') self.define_re = re.compile(r'#define ([A-Z][A-Z_1-9]*)') - self.endif_c_re = re.compile(r'#endif /\* ([A-Z][A-Z_1-9]*) \*/') + self.endif_c_re = re.compile(r'#endif /\* ([A-Z][A-Z_1-9]*) (?:\\ *\n *)?\*/') self.endif_cpp_re = re.compile(r'#endif // ([A-Z][A-Z_1-9]*)') self.failed = False @@ -97,6 +98,7 @@ class GuardValidator(object): match = self.ifndef_re.search(fcontents) if not match: print 'something drastically wrong with: %s' % fpath + return False # failed if match.lastindex is None: # No ifndef. Request manual addition with hints self.fail(fpath, match.re, match.string, '', '', False) @@ -131,7 +133,7 @@ class GuardValidator(object): # Is there a properly commented #endif? endif_re = self.endif_cpp_re if cpp_header else self.endif_c_re flines = fcontents.rstrip().splitlines() - match = endif_re.search(flines[-1]) + match = endif_re.search('\n'.join(flines[-2:])) if not match: # No endif. Check if we have the last line as just '#endif' and if so # replace it with a properly commented one. @@ -169,7 +171,7 @@ argp.add_argument('--precommit', args = argp.parse_args() KNOWN_BAD = set([ - 'src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.h', + 'src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h', ]) @@ -187,6 +189,8 @@ filename_list = [] try: filename_list = subprocess.check_output(FILE_LIST_COMMAND, shell=True).splitlines() + # Filter out non-existent files (ie, file removed or renamed) + filename_list = (f for f in filename_list if os.path.isfile(f)) except subprocess.CalledProcessError: sys.exit(0) diff --git a/tools/distrib/check_nanopb_output.sh b/tools/distrib/check_nanopb_output.sh index 92cb8ecbb4988b8ad15adfde5411baa8c00e3950..c0707051a60a81ffd08b15eb5919fa1c127e9efe 100755 --- a/tools/distrib/check_nanopb_output.sh +++ b/tools/distrib/check_nanopb_output.sh @@ -58,15 +58,15 @@ popd # # Checks for load_balancer.proto # -readonly LOAD_BALANCER_GRPC_OUTPUT_PATH='src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0' +readonly LOAD_BALANCER_GRPC_OUTPUT_PATH='src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1' # nanopb-compile the proto to a temp location ./tools/codegen/core/gen_nano_proto.sh \ - src/proto/grpc/lb/v0/load_balancer.proto \ + src/proto/grpc/lb/v1/load_balancer.proto \ "$NANOPB_TMP_OUTPUT" \ "$LOAD_BALANCER_GRPC_OUTPUT_PATH" # compare outputs to checked compiled code -if ! diff -r $NANOPB_TMP_OUTPUT src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0; then +if ! diff -r $NANOPB_TMP_OUTPUT src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1; then echo "Outputs differ: $NANOPB_TMP_OUTPUT vs $LOAD_BALANCER_GRPC_OUTPUT_PATH" exit 2 fi diff --git a/tools/distrib/python/bazel_deps.sh b/tools/distrib/python/bazel_deps.sh new file mode 100755 index 0000000000000000000000000000000000000000..de3ee079708c6ce7aaf1186939780cb90c8431ce --- /dev/null +++ b/tools/distrib/python/bazel_deps.sh @@ -0,0 +1,46 @@ +#!/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. + +cd $(dirname $0)/../../../ + +# First check if bazel is installed on the machine. If it is, then we don't need +# to invoke the docker bazel. +if [ "bazel version" ] +then + cd third_party/protobuf + bazel query 'deps('$1')' +else + docker build -t bazel `realpath ./tools/dockerfile/bazel/` + docker run -v "`realpath .`:/src/grpc/" \ + -w /src/grpc/third_party/protobuf \ + bazel \ + bazel query 'deps('$1')' +fi diff --git a/tools/distrib/python/check_grpcio_tools.py b/tools/distrib/python/check_grpcio_tools.py new file mode 100755 index 0000000000000000000000000000000000000000..baf2ff4effb3c6f6302f257cd4d2f51c5841322f --- /dev/null +++ b/tools/distrib/python/check_grpcio_tools.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python + +# 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. + +import cStringIO + +import make_grpcio_tools as make + +OUT_OF_DATE_MESSAGE = """file {} is out of date + +Have you called tools/distrib/python/make_grpcio_tools.py since upgrading protobuf?""" + +check_protoc_lib_deps_content = make.get_deps(make.BAZEL_DEPS_PROTOC_LIB_QUERY) + +with open(make.GRPC_PYTHON_PROTOC_LIB_DEPS, 'r') as protoc_lib_deps_file: + if protoc_lib_deps_file.read() != check_protoc_lib_deps_content: + print(OUT_OF_DATE_MESSAGE.format(make.GRPC_PYTHON_PROTOC_LIB_DEPS)) + raise SystemExit(1) diff --git a/tools/distrib/python/grpcio_tools/.gitignore b/tools/distrib/python/grpcio_tools/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..979704d970bf3dc61d4f5e968d693fe43809ceee --- /dev/null +++ b/tools/distrib/python/grpcio_tools/.gitignore @@ -0,0 +1,7 @@ +build/ +protobuf/ +grpc_plugin/ +grpc_root/ +*.c +*.cpp +*.egg-info diff --git a/tools/distrib/python/grpcio_tools/MANIFEST.in b/tools/distrib/python/grpcio_tools/MANIFEST.in new file mode 100644 index 0000000000000000000000000000000000000000..7712834d642ad549cf2e1ff40dd13bb998e3e698 --- /dev/null +++ b/tools/distrib/python/grpcio_tools/MANIFEST.in @@ -0,0 +1,7 @@ +include grpc_version.py +include protoc_deps.py +include protoc_lib_deps.py +include README.rst +graft grpc +graft grpc_root +graft third_party diff --git a/tools/distrib/python/grpcio_tools/README.rst b/tools/distrib/python/grpcio_tools/README.rst new file mode 100644 index 0000000000000000000000000000000000000000..10d2fe8c309a1f2abcf130bd56d5a18d18725249 --- /dev/null +++ b/tools/distrib/python/grpcio_tools/README.rst @@ -0,0 +1,128 @@ +gRPC Python Tools +================= + +Package for gRPC Python tools. + +Installation +------------ + +The gRPC Python tools package is available for Linux, Mac OS X, and Windows +running Python 2.7. + +From PyPI +~~~~~~~~~ + +If you are installing locally... + +:: + + $ pip install grpcio-tools + +Else system wide (on Ubuntu)... + +:: + + $ sudo pip install grpcio-tools + +If you're on Windows make sure that you installed the :code:`pip.exe` component +when you installed Python (if not go back and install it!) then invoke: + +:: + + $ pip.exe install grpcio-tools + +Windows users may need to invoke :code:`pip.exe` from a command line ran as +administrator. + +n.b. On Windows and on Mac OS X one *must* have a recent release of :code:`pip` +to retrieve the proper wheel from PyPI. Be sure to upgrade to the latest +version! + +You might also need to install Cython to handle installation via the source +distribution if gRPC Python's system coverage with wheels does not happen to +include your system. + +From Source +~~~~~~~~~~~ + +Building from source requires that you have the Python headers (usually a +package named :code:`python-dev`) and Cython installed. It further requires a +GCC-like compiler to go smoothly; you can probably get it to work without +GCC-like stuff, but you may end up having a bad time. + +:: + + $ export REPO_ROOT=grpc # REPO_ROOT can be any directory of your choice + $ git clone https://github.com/grpc/grpc.git $REPO_ROOT + $ cd $REPO_ROOT + $ git submodule update --init + + $ cd tools/distrib/python/grpcio_tools + $ python ../make_grpcio_tools.py + + # For the next command do `sudo pip install` if you get permission-denied errors + $ pip install . + +You cannot currently install Python from source on Windows. Things might work +out for you in MSYS2 (follow the Linux instructions), but it isn't officially +supported at the moment. + +Troubleshooting +~~~~~~~~~~~~~~~ + +Help, I ... + +* **... see a** :code:`pkg_resources.VersionConflict` **when I try to install + grpc** + + This is likely because :code:`pip` doesn't own the offending dependency, + which in turn is likely because your operating system's package manager owns + it. You'll need to force the installation of the dependency: + + :code:`pip install --ignore-installed $OFFENDING_DEPENDENCY` + + For example, if you get an error like the following: + + :: + + Traceback (most recent call last): + File "<string>", line 17, in <module> + ... + File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 509, in find + raise VersionConflict(dist, req) + pkg_resources.VersionConflict: (six 1.8.0 (/usr/lib/python2.7/dist-packages), Requirement.parse('six>=1.10')) + + You can fix it by doing: + + :: + + sudo pip install --ignore-installed six + +* **... see compiler errors on some platforms when either installing from source or from the source distribution** + + If you see + + :: + + /tmp/pip-build-U8pSsr/cython/Cython/Plex/Scanners.c:4:20: fatal error: Python.h: No such file or directory + #include "Python.h" + ^ + compilation terminated. + + You can fix it by installing `python-dev` package. i.e + + :: + + sudo apt-get install python-dev + + If you see something similar to: + + :: + + third_party/protobuf/src/google/protobuf/stubs/mathlimits.h:173:31: note: in expansion of macro 'SIGNED_INT_MAX' + static const Type kPosMax = SIGNED_INT_MAX(Type); \\ + ^ + And your toolchain is GCC (at the time of this writing, up through at least + GCC 6.0), this is probably a bug where GCC chokes on constant expressions + when the :code:`-fwrapv` flag is specified. You should consider setting your + environment with :code:`CFLAGS=-fno-wrapv` or using clang (:code:`CC=clang`). diff --git a/tools/distrib/python/grpcio_tools/grpc/__init__.py b/tools/distrib/python/grpcio_tools/grpc/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..70ac5edd48370ac77409293d23742878764020b7 --- /dev/null +++ b/tools/distrib/python/grpcio_tools/grpc/__init__.py @@ -0,0 +1,30 @@ +# 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. + +__import__('pkg_resources').declare_namespace(__name__) diff --git a/tools/distrib/python/grpcio_tools/grpc/tools/__init__.py b/tools/distrib/python/grpcio_tools/grpc/tools/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..d5ad73a74ab7203f989e1faa00976683e1d3e281 --- /dev/null +++ b/tools/distrib/python/grpcio_tools/grpc/tools/__init__.py @@ -0,0 +1,29 @@ +# 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. + diff --git a/tools/distrib/python/grpcio_tools/grpc/tools/main.cc b/tools/distrib/python/grpcio_tools/grpc/tools/main.cc new file mode 100644 index 0000000000000000000000000000000000000000..81675b4e6fce381b6d8c67d16c2dfae18a99f314 --- /dev/null +++ b/tools/distrib/python/grpcio_tools/grpc/tools/main.cc @@ -0,0 +1,54 @@ +// 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 <google/protobuf/compiler/command_line_interface.h> +#include <google/protobuf/compiler/python/python_generator.h> + +#include "src/compiler/python_generator.h" + +#include "grpc/tools/main.h" + +int protoc_main(int argc, char* argv[]) { + google::protobuf::compiler::CommandLineInterface cli; + cli.AllowPlugins("protoc-"); + + // Proto2 Python + google::protobuf::compiler::python::Generator py_generator; + cli.RegisterGenerator("--python_out", &py_generator, + "Generate Python source file."); + + // gRPC Python + grpc_python_generator::GeneratorConfiguration grpc_py_config; + grpc_py_config.beta_package_root = "grpc.beta"; + grpc_python_generator::PythonGrpcGenerator grpc_py_generator(grpc_py_config); + cli.RegisterGenerator("--grpc_python_out", &grpc_py_generator, + "Generate Python source file."); + + return cli.Run(argc, argv); +} diff --git a/tools/distrib/python/grpcio_tools/grpc/tools/main.h b/tools/distrib/python/grpcio_tools/grpc/tools/main.h new file mode 100644 index 0000000000000000000000000000000000000000..ea2860ff0205c57328b63cefde153c503e4ca4dd --- /dev/null +++ b/tools/distrib/python/grpcio_tools/grpc/tools/main.h @@ -0,0 +1,33 @@ +// 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. + + +// We declare `protoc_main` here since we want access to it from Cython as an +// extern but *without* triggering a dllimport declspec when on Windows. +int protoc_main(int argc, char *argv[]); diff --git a/tools/distrib/python/grpcio_tools/grpc/tools/protoc.py b/tools/distrib/python/grpcio_tools/grpc/tools/protoc.py new file mode 100644 index 0000000000000000000000000000000000000000..b4dd0ecae2e5bb5646e2e5e90421f665659e93dd --- /dev/null +++ b/tools/distrib/python/grpcio_tools/grpc/tools/protoc.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python + +# 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. + +import sys + +from grpc.tools import protoc_compiler + + +if __name__ == '__main__': + protoc_compiler.run_main(sys.argv) diff --git a/tools/distrib/python/grpcio_tools/grpc/tools/protoc_compiler.pyx b/tools/distrib/python/grpcio_tools/grpc/tools/protoc_compiler.pyx new file mode 100644 index 0000000000000000000000000000000000000000..a6530127c0474970c38d0bb35684a11375fd725d --- /dev/null +++ b/tools/distrib/python/grpcio_tools/grpc/tools/protoc_compiler.pyx @@ -0,0 +1,39 @@ +# 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. + +from libc cimport stdlib + +cdef extern from "grpc/tools/main.h": + int protoc_main(int argc, char *argv[]) + +def run_main(list args not None): + cdef char **argv = <char **>stdlib.malloc(len(args)*sizeof(char *)) + for i in range(len(args)): + argv[i] = args[i] + return protoc_main(len(args), argv) diff --git a/tools/distrib/python/grpcio_tools/grpc_version.py b/tools/distrib/python/grpcio_tools/grpc_version.py new file mode 100644 index 0000000000000000000000000000000000000000..1267d0e45dc784cede565b9231b89aa2c12de668 --- /dev/null +++ b/tools/distrib/python/grpcio_tools/grpc_version.py @@ -0,0 +1,32 @@ +# 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. + +# AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/distrib/python/grpcio_tools/grpc_version.py.template`!!! + +VERSION='0.15.0.dev0' diff --git a/tools/distrib/python/grpcio_tools/protoc_lib_deps.py b/tools/distrib/python/grpcio_tools/protoc_lib_deps.py new file mode 100644 index 0000000000000000000000000000000000000000..135ac5cbb3bfce3855c54a6ac831d1d0c721270f --- /dev/null +++ b/tools/distrib/python/grpcio_tools/protoc_lib_deps.py @@ -0,0 +1,32 @@ + +# 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. + +# AUTO-GENERATED BY make_grpcio_tools.py! +CC_FILES=['google/protobuf/compiler/zip_writer.cc', 'google/protobuf/compiler/subprocess.cc', 'google/protobuf/compiler/ruby/ruby_generator.cc', 'google/protobuf/compiler/python/python_generator.cc', 'google/protobuf/compiler/plugin.pb.cc', 'google/protobuf/compiler/plugin.cc', 'google/protobuf/compiler/objectivec/objectivec_primitive_field.cc', 'google/protobuf/compiler/objectivec/objectivec_oneof.cc', 'google/protobuf/compiler/objectivec/objectivec_message_field.cc', 'google/protobuf/compiler/objectivec/objectivec_message.cc', 'google/protobuf/compiler/objectivec/objectivec_map_field.cc', 'google/protobuf/compiler/objectivec/objectivec_helpers.cc', 'google/protobuf/compiler/objectivec/objectivec_generator.cc', 'google/protobuf/compiler/objectivec/objectivec_file.cc', 'google/protobuf/compiler/objectivec/objectivec_field.cc', 'google/protobuf/compiler/objectivec/objectivec_extension.cc', 'google/protobuf/compiler/objectivec/objectivec_enum_field.cc', 'google/protobuf/compiler/objectivec/objectivec_enum.cc', 'google/protobuf/compiler/js/js_generator.cc', 'google/protobuf/compiler/javanano/javanano_primitive_field.cc', 'google/protobuf/compiler/javanano/javanano_message_field.cc', 'google/protobuf/compiler/javanano/javanano_message.cc', 'google/protobuf/compiler/javanano/javanano_map_field.cc', 'google/protobuf/compiler/javanano/javanano_helpers.cc', 'google/protobuf/compiler/javanano/javanano_generator.cc', 'google/protobuf/compiler/javanano/javanano_file.cc', 'google/protobuf/compiler/javanano/javanano_field.cc', 'google/protobuf/compiler/javanano/javanano_extension.cc', 'google/protobuf/compiler/javanano/javanano_enum_field.cc', 'google/protobuf/compiler/javanano/javanano_enum.cc', 'google/protobuf/compiler/java/java_string_field_lite.cc', 'google/protobuf/compiler/java/java_string_field.cc', 'google/protobuf/compiler/java/java_shared_code_generator.cc', 'google/protobuf/compiler/java/java_service.cc', 'google/protobuf/compiler/java/java_primitive_field_lite.cc', 'google/protobuf/compiler/java/java_primitive_field.cc', 'google/protobuf/compiler/java/java_name_resolver.cc', 'google/protobuf/compiler/java/java_message_lite.cc', 'google/protobuf/compiler/java/java_message_field_lite.cc', 'google/protobuf/compiler/java/java_message_field.cc', 'google/protobuf/compiler/java/java_message_builder_lite.cc', 'google/protobuf/compiler/java/java_message_builder.cc', 'google/protobuf/compiler/java/java_message.cc', 'google/protobuf/compiler/java/java_map_field_lite.cc', 'google/protobuf/compiler/java/java_map_field.cc', 'google/protobuf/compiler/java/java_lazy_message_field_lite.cc', 'google/protobuf/compiler/java/java_lazy_message_field.cc', 'google/protobuf/compiler/java/java_helpers.cc', 'google/protobuf/compiler/java/java_generator_factory.cc', 'google/protobuf/compiler/java/java_generator.cc', 'google/protobuf/compiler/java/java_file.cc', 'google/protobuf/compiler/java/java_field.cc', 'google/protobuf/compiler/java/java_extension_lite.cc', 'google/protobuf/compiler/java/java_extension.cc', 'google/protobuf/compiler/java/java_enum_lite.cc', 'google/protobuf/compiler/java/java_enum_field_lite.cc', 'google/protobuf/compiler/java/java_enum_field.cc', 'google/protobuf/compiler/java/java_enum.cc', 'google/protobuf/compiler/java/java_doc_comment.cc', 'google/protobuf/compiler/java/java_context.cc', 'google/protobuf/compiler/csharp/csharp_wrapper_field.cc', 'google/protobuf/compiler/csharp/csharp_source_generator_base.cc', 'google/protobuf/compiler/csharp/csharp_repeated_primitive_field.cc', 'google/protobuf/compiler/csharp/csharp_repeated_message_field.cc', 'google/protobuf/compiler/csharp/csharp_repeated_enum_field.cc', 'google/protobuf/compiler/csharp/csharp_reflection_class.cc', 'google/protobuf/compiler/csharp/csharp_primitive_field.cc', 'google/protobuf/compiler/csharp/csharp_message_field.cc', 'google/protobuf/compiler/csharp/csharp_message.cc', 'google/protobuf/compiler/csharp/csharp_map_field.cc', 'google/protobuf/compiler/csharp/csharp_helpers.cc', 'google/protobuf/compiler/csharp/csharp_generator.cc', 'google/protobuf/compiler/csharp/csharp_field_base.cc', 'google/protobuf/compiler/csharp/csharp_enum_field.cc', 'google/protobuf/compiler/csharp/csharp_enum.cc', 'google/protobuf/compiler/csharp/csharp_doc_comment.cc', 'google/protobuf/compiler/cpp/cpp_string_field.cc', 'google/protobuf/compiler/cpp/cpp_service.cc', 'google/protobuf/compiler/cpp/cpp_primitive_field.cc', 'google/protobuf/compiler/cpp/cpp_message_field.cc', 'google/protobuf/compiler/cpp/cpp_message.cc', 'google/protobuf/compiler/cpp/cpp_map_field.cc', 'google/protobuf/compiler/cpp/cpp_helpers.cc', 'google/protobuf/compiler/cpp/cpp_generator.cc', 'google/protobuf/compiler/cpp/cpp_file.cc', 'google/protobuf/compiler/cpp/cpp_field.cc', 'google/protobuf/compiler/cpp/cpp_extension.cc', 'google/protobuf/compiler/cpp/cpp_enum_field.cc', 'google/protobuf/compiler/cpp/cpp_enum.cc', 'google/protobuf/compiler/command_line_interface.cc', 'google/protobuf/compiler/code_generator.cc', 'google/protobuf/wrappers.pb.cc', 'google/protobuf/wire_format.cc', 'google/protobuf/util/type_resolver_util.cc', 'google/protobuf/util/time_util.cc', 'google/protobuf/util/message_differencer.cc', 'google/protobuf/util/json_util.cc', 'google/protobuf/util/internal/utility.cc', 'google/protobuf/util/internal/type_info_test_helper.cc', 'google/protobuf/util/internal/type_info.cc', 'google/protobuf/util/internal/protostream_objectwriter.cc', 'google/protobuf/util/internal/protostream_objectsource.cc', 'google/protobuf/util/internal/proto_writer.cc', 'google/protobuf/util/internal/object_writer.cc', 'google/protobuf/util/internal/json_stream_parser.cc', 'google/protobuf/util/internal/json_objectwriter.cc', 'google/protobuf/util/internal/json_escaping.cc', 'google/protobuf/util/internal/field_mask_utility.cc', 'google/protobuf/util/internal/error_listener.cc', 'google/protobuf/util/internal/default_value_objectwriter.cc', 'google/protobuf/util/internal/datapiece.cc', 'google/protobuf/util/field_mask_util.cc', 'google/protobuf/util/field_comparator.cc', 'google/protobuf/unknown_field_set.cc', 'google/protobuf/type.pb.cc', 'google/protobuf/timestamp.pb.cc', 'google/protobuf/text_format.cc', 'google/protobuf/stubs/substitute.cc', 'google/protobuf/stubs/mathlimits.cc', 'google/protobuf/struct.pb.cc', 'google/protobuf/source_context.pb.cc', 'google/protobuf/service.cc', 'google/protobuf/reflection_ops.cc', 'google/protobuf/message.cc', 'google/protobuf/map_field.cc', 'google/protobuf/io/zero_copy_stream_impl.cc', 'google/protobuf/io/tokenizer.cc', 'google/protobuf/io/strtod.cc', 'google/protobuf/io/printer.cc', 'google/protobuf/io/gzip_stream.cc', 'google/protobuf/generated_message_reflection.cc', 'google/protobuf/field_mask.pb.cc', 'google/protobuf/extension_set_heavy.cc', 'google/protobuf/empty.pb.cc', 'google/protobuf/dynamic_message.cc', 'google/protobuf/duration.pb.cc', 'google/protobuf/descriptor_database.cc', 'google/protobuf/descriptor.pb.cc', 'google/protobuf/descriptor.cc', 'google/protobuf/compiler/parser.cc', 'google/protobuf/compiler/importer.cc', 'google/protobuf/api.pb.cc', 'google/protobuf/any.pb.cc', 'google/protobuf/any.cc', 'google/protobuf/wire_format_lite.cc', 'google/protobuf/stubs/time.cc', 'google/protobuf/stubs/strutil.cc', 'google/protobuf/stubs/structurally_valid.cc', 'google/protobuf/stubs/stringprintf.cc', 'google/protobuf/stubs/stringpiece.cc', 'google/protobuf/stubs/statusor.cc', 'google/protobuf/stubs/status.cc', 'google/protobuf/stubs/once.cc', 'google/protobuf/stubs/int128.cc', 'google/protobuf/stubs/common.cc', 'google/protobuf/stubs/bytestream.cc', 'google/protobuf/stubs/atomicops_internals_x86_msvc.cc', 'google/protobuf/stubs/atomicops_internals_x86_gcc.cc', 'google/protobuf/repeated_field.cc', 'google/protobuf/message_lite.cc', 'google/protobuf/io/zero_copy_stream_impl_lite.cc', 'google/protobuf/io/zero_copy_stream.cc', 'google/protobuf/io/coded_stream.cc', 'google/protobuf/generated_message_util.cc', 'google/protobuf/extension_set.cc', 'google/protobuf/arenastring.cc', 'google/protobuf/arena.cc'] diff --git a/tools/distrib/python/grpcio_tools/setup.py b/tools/distrib/python/grpcio_tools/setup.py new file mode 100644 index 0000000000000000000000000000000000000000..576f7ae32a549bd79c3c9046d082d4d09b556a82 --- /dev/null +++ b/tools/distrib/python/grpcio_tools/setup.py @@ -0,0 +1,96 @@ +# 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. + +from distutils import extension +import os +import os.path +import shlex +import sys + +import setuptools +from setuptools.command import build_ext + +# TODO(atash) add flag to disable Cython use + +os.chdir(os.path.dirname(os.path.abspath(__file__))) +sys.path.insert(0, os.path.abspath('.')) + +# There are some situations (like on Windows) where CC, CFLAGS, and LDFLAGS are +# entirely ignored/dropped/forgotten by distutils and its Cygwin/MinGW support. +# We use these environment variables to thus get around that without locking +# ourselves in w.r.t. the multitude of operating systems this ought to build on. +# By default we assume a GCC-like compiler. +EXTRA_COMPILE_ARGS = shlex.split(os.environ.get('GRPC_PYTHON_CFLAGS', + '-frtti -std=c++11')) +EXTRA_LINK_ARGS = shlex.split(os.environ.get('GRPC_PYTHON_LDFLAGS', + '-lpthread')) + +import protoc_lib_deps +import grpc_version + +def protoc_ext_module(): + plugin_sources = [ + 'grpc/tools/main.cc', + 'grpc_root/src/compiler/python_generator.cc'] + [ + os.path.join('third_party/protobuf/src', cc_file) + for cc_file in protoc_lib_deps.CC_FILES] + plugin_ext = extension.Extension( + name='grpc.tools.protoc_compiler', + sources=['grpc/tools/protoc_compiler.pyx'] + plugin_sources, + include_dirs=[ + '.', + 'grpc_root', + 'grpc_root/include', + 'third_party/protobuf/src', + ], + language='c++', + define_macros=[('HAVE_PTHREAD', 1)], + extra_compile_args=EXTRA_COMPILE_ARGS, + extra_link_args=EXTRA_LINK_ARGS, + ) + return plugin_ext + +def maybe_cythonize(exts): + from Cython import Build + return Build.cythonize(exts) + +setuptools.setup( + name='grpcio_tools', + version=grpc_version.VERSION, + license='3-clause BSD', + ext_modules=maybe_cythonize([ + protoc_ext_module(), + ]), + packages=setuptools.find_packages('.'), + # TODO(atash): Figure out why auditwheel doesn't like namespace packages. + #namespace_packages=['grpc'], + install_requires=[ + 'protobuf>=3.0.0a3', + ], +) diff --git a/tools/distrib/python/make_grpcio_tools.py b/tools/distrib/python/make_grpcio_tools.py new file mode 100755 index 0000000000000000000000000000000000000000..50fbdbb14c0a973f66050ea1f9a1617a99b6bf8b --- /dev/null +++ b/tools/distrib/python/make_grpcio_tools.py @@ -0,0 +1,140 @@ +#!/usr/bin/env python + +# 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. + +import os +import os.path +import shutil +import subprocess +import sys +import traceback + +DEPS_FILE_CONTENT=""" +# 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. + +# AUTO-GENERATED BY make_grpcio_tools.py! +CC_FILES={} +""" + +# Bazel query result prefix for expected source files in protobuf. +PROTOBUF_CC_PREFIX = '//:src/' + +GRPC_ROOT = os.path.abspath( + os.path.join(os.path.dirname(os.path.abspath(__file__)), + '..', '..', '..')) + +GRPC_PYTHON_ROOT = os.path.join(GRPC_ROOT, 'tools/distrib/python/grpcio_tools') + +GRPC_PROTOBUF = os.path.join(GRPC_ROOT, 'third_party/protobuf/src') +GRPC_PROTOC_PLUGINS = os.path.join(GRPC_ROOT, 'src/compiler') +GRPC_PYTHON_PROTOBUF = os.path.join(GRPC_PYTHON_ROOT, + 'third_party/protobuf/src') +GRPC_PYTHON_PROTOC_PLUGINS = os.path.join(GRPC_PYTHON_ROOT, + 'grpc_root/src/compiler') +GRPC_PYTHON_PROTOC_LIB_DEPS = os.path.join(GRPC_PYTHON_ROOT, + 'protoc_lib_deps.py') + +GRPC_INCLUDE = os.path.join(GRPC_ROOT, 'include') +GRPC_PYTHON_INCLUDE = os.path.join(GRPC_PYTHON_ROOT, 'grpc_root/include') + +BAZEL_DEPS = os.path.join(GRPC_ROOT, 'tools/distrib/python/bazel_deps.sh') +BAZEL_DEPS_PROTOC_LIB_QUERY = '//:protoc_lib' + + +def get_deps(query): + """Write the result of the bazel query `query` against protobuf to + `out_file`.""" + output = subprocess.check_output([BAZEL_DEPS, query]) + output = output.splitlines() + cc_files = [ + name for name in output + if name.endswith('.cc') and name.startswith(PROTOBUF_CC_PREFIX)] + cc_files = [cc_file[len(PROTOBUF_CC_PREFIX):] for cc_file in cc_files] + deps_file_content = DEPS_FILE_CONTENT.format(cc_files) + return deps_file_content + + +def main(): + os.chdir(GRPC_ROOT) + + for tree in [GRPC_PYTHON_PROTOBUF, + GRPC_PYTHON_PROTOC_PLUGINS, + GRPC_PYTHON_INCLUDE]: + try: + shutil.rmtree(tree) + except Exception as _: + pass + shutil.copytree(GRPC_PROTOBUF, GRPC_PYTHON_PROTOBUF) + shutil.copytree(GRPC_PROTOC_PLUGINS, GRPC_PYTHON_PROTOC_PLUGINS) + shutil.copytree(GRPC_INCLUDE, GRPC_PYTHON_INCLUDE) + + try: + protoc_lib_deps_content = get_deps(BAZEL_DEPS_PROTOC_LIB_QUERY) + except Exception as error: + # We allow this script to succeed even if we couldn't get the dependencies, + # as then we can assume that even without a successful bazel run the + # dependencies currently in source control are 'good enough'. + sys.stderr.write("Got non-fatal error:\n") + traceback.print_exc(file=sys.stderr) + return + # If we successfully got the dependencies, truncate and rewrite the deps file. + with open(GRPC_PYTHON_PROTOC_LIB_DEPS, 'w') as deps_file: + deps_file.write(protoc_lib_deps_content) + +if __name__ == '__main__': + main() + diff --git a/tools/dockerfile/bazel/Dockerfile b/tools/dockerfile/bazel/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..2a80a4d4d530bb413dcabac757e827ab5e777852 --- /dev/null +++ b/tools/dockerfile/bazel/Dockerfile @@ -0,0 +1,52 @@ +# 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. + +FROM ubuntu:wily +RUN apt-get update +RUN apt-get -y install software-properties-common python-software-properties +RUN add-apt-repository ppa:webupd8team/java +RUN apt-get update +RUN apt-get -y install \ + vim \ + wget \ + openjdk-8-jdk \ + pkg-config \ + zip \ + g++ \ + zlib1g-dev \ + unzip \ + git + +RUN git clone https://github.com/bazelbuild/bazel.git /bazel +RUN cd /bazel && ./compile.sh + +RUN ln -s /bazel/output/bazel /bin/ + +# ensure the installation has been extracted +RUN bazel diff --git a/tools/dockerfile/grpc_artifact_linux_x64/Dockerfile b/tools/dockerfile/grpc_artifact_linux_x64/Dockerfile index d048b725c85a249d18c25ca3323fab1713a47446..4ae4ebdb06dd573f8d158fea19b727e866892d4e 100644 --- a/tools/dockerfile/grpc_artifact_linux_x64/Dockerfile +++ b/tools/dockerfile/grpc_artifact_linux_x64/Dockerfile @@ -31,12 +31,15 @@ FROM debian:jessie +RUN apt-get update && apt-get install debian-keyring && apt-key update + # Install Git and basic packages. -RUN apt-get update && apt-get install -y \ +RUN apt-get update && apt-key update && apt-get install -y \ autoconf \ autotools-dev \ build-essential \ bzip2 \ + clang \ curl \ gcc \ gcc-multilib \ diff --git a/tools/dockerfile/grpc_artifact_linux_x86/Dockerfile b/tools/dockerfile/grpc_artifact_linux_x86/Dockerfile index 46bc9f8f5244ed9c2b43b55c4905b5ca4d2e0a07..9c2fd52eee1a4f87569408d16052cb3387c295d3 100644 --- a/tools/dockerfile/grpc_artifact_linux_x86/Dockerfile +++ b/tools/dockerfile/grpc_artifact_linux_x86/Dockerfile @@ -31,12 +31,15 @@ FROM 32bit/debian:jessie +RUN apt-get update && apt-get install debian-keyring && apt-key update + # Install Git and basic packages. -RUN apt-get update && apt-get install -y \ +RUN apt-get update && apt-key update && apt-get install -y \ autoconf \ autotools-dev \ build-essential \ bzip2 \ + clang \ curl \ gcc \ gcc-multilib \ diff --git a/tools/dockerfile/grpc_artifact_python_manylinux_x64/Dockerfile b/tools/dockerfile/grpc_artifact_python_manylinux_x64/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..3e31a2b623d3ff94d0c40494f01504bff59b4e19 --- /dev/null +++ b/tools/dockerfile/grpc_artifact_python_manylinux_x64/Dockerfile @@ -0,0 +1,43 @@ +# 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. + +# Docker file for building gRPC manylinux Python artifacts. + +FROM quay.io/pypa/manylinux1_x86_64 + +# Update the package manager +RUN yum update -y + +################################### +# Install Python build requirements +RUN /opt/python/cp27-cp27m/bin/pip install cython +RUN /opt/python/cp27-cp27mu/bin/pip install cython +RUN /opt/python/cp34-cp34m/bin/pip install cython +RUN /opt/python/cp35-cp35m/bin/pip install cython + diff --git a/tools/dockerfile/grpc_artifact_python_manylinux_x86/Dockerfile b/tools/dockerfile/grpc_artifact_python_manylinux_x86/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..5fe62c28b73d8c4c688537089b719fcdf45fcd16 --- /dev/null +++ b/tools/dockerfile/grpc_artifact_python_manylinux_x86/Dockerfile @@ -0,0 +1,43 @@ +# 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. + +# Docker file for building gRPC manylinux Python artifacts. + +FROM quay.io/pypa/manylinux1_i686 + +# Update the package manager +RUN yum update -y + +################################### +# Install Python build requirements +RUN /opt/python/cp27-cp27m/bin/pip install cython +RUN /opt/python/cp27-cp27mu/bin/pip install cython +RUN /opt/python/cp34-cp34m/bin/pip install cython +RUN /opt/python/cp35-cp35m/bin/pip install cython + diff --git a/tools/dockerfile/grpc_clang_format/Dockerfile b/tools/dockerfile/grpc_clang_format/Dockerfile index 41239e9c23b3ceb615504b229ab3d3e8804f5bf0..ab58017a02af8937b6b1c393e16032c6250618b6 100644 --- a/tools/dockerfile/grpc_clang_format/Dockerfile +++ b/tools/dockerfile/grpc_clang_format/Dockerfile @@ -30,8 +30,8 @@ FROM ubuntu:wily RUN apt-get update RUN apt-get -y install wget -RUN echo deb http://llvm.org/apt/wily/ llvm-toolchain-wily main >> /etc/apt/sources.list -RUN echo deb-src http://llvm.org/apt/wily/ llvm-toolchain-wily main >> /etc/apt/sources.list +RUN echo deb http://llvm.org/apt/wily/ llvm-toolchain-wily-3.8 main >> /etc/apt/sources.list +RUN echo deb-src http://llvm.org/apt/wily/ llvm-toolchain-wily-3.8 main >> /etc/apt/sources.list RUN wget -O - http://llvm.org/apt/llvm-snapshot.gpg.key| apt-key add - RUN apt-get update RUN apt-get -y install clang-format-3.8 diff --git a/tools/dockerfile/stress_test/grpc_interop_stress_python/Dockerfile b/tools/dockerfile/stress_test/grpc_interop_stress_python/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..606b7654576f93fef443c2893b743136614c3b4c --- /dev/null +++ b/tools/dockerfile/stress_test/grpc_interop_stress_python/Dockerfile @@ -0,0 +1,103 @@ +# 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. + +FROM debian:jessie + +# Install Git and basic packages. +RUN apt-get update && apt-get install -y \ + autoconf \ + autotools-dev \ + build-essential \ + bzip2 \ + ccache \ + curl \ + gcc \ + gcc-multilib \ + git \ + golang \ + gyp \ + lcov \ + libc6 \ + libc6-dbg \ + libc6-dev \ + libgtest-dev \ + libtool \ + make \ + perl \ + strace \ + python-dev \ + python-setuptools \ + python-yaml \ + telnet \ + unzip \ + wget \ + zip && apt-get clean + +#================ +# Build profiling +RUN apt-get update && apt-get install -y time && apt-get clean + +# Prepare ccache +RUN ln -s /usr/bin/ccache /usr/local/bin/gcc +RUN ln -s /usr/bin/ccache /usr/local/bin/g++ +RUN ln -s /usr/bin/ccache /usr/local/bin/cc +RUN ln -s /usr/bin/ccache /usr/local/bin/c++ +RUN ln -s /usr/bin/ccache /usr/local/bin/clang +RUN ln -s /usr/bin/ccache /usr/local/bin/clang++ + +#================= +# C++ dependencies +RUN apt-get update && apt-get -y install libgflags-dev libgtest-dev libc++-dev clang && apt-get clean + +# Google Cloud platform API libraries +RUN apt-get update && apt-get install -y python-pip && apt-get clean +RUN pip install --upgrade google-api-python-client + + +#==================== +# Python dependencies + +# Install dependencies + +RUN apt-get update && apt-get install -y \ + python-all-dev \ + python3-all-dev \ + python-pip + +# Install Python packages from PyPI +RUN pip install pip --upgrade +RUN pip install virtualenv +RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0a2 tox + + +RUN pip install coverage +RUN pip install oauth2client + +# Define the default command. +CMD ["bash"] diff --git a/tools/dockerfile/stress_test/grpc_interop_stress_python/build_interop_stress.sh b/tools/dockerfile/stress_test/grpc_interop_stress_python/build_interop_stress.sh new file mode 100755 index 0000000000000000000000000000000000000000..e65332f2f30f50c4898e15b268783eeebae2deef --- /dev/null +++ b/tools/dockerfile/stress_test/grpc_interop_stress_python/build_interop_stress.sh @@ -0,0 +1,46 @@ +#!/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. +# +# Builds Python interop server and client in a base image. +set -e + +mkdir -p /var/local/git +git clone --recursive /var/local/jenkins/grpc /var/local/git/grpc + +# copy service account keys if available +cp -r /var/local/jenkins/service_account $HOME || true + +cd /var/local/git/grpc + +tools/run_tests/run_tests.py -l python -c opt --build_only + +# Build c++ interop client +make metrics_client -j + diff --git a/tools/dockerfile/test/sanity/Dockerfile b/tools/dockerfile/test/sanity/Dockerfile index 3146a922b7ea8f667b2aaff37eb890c1104bf035..43b2a0c3d96544e0137dc2df75e47d37e556b3e7 100644 --- a/tools/dockerfile/test/sanity/Dockerfile +++ b/tools/dockerfile/test/sanity/Dockerfile @@ -75,6 +75,15 @@ RUN apt-get update && apt-get install -y \ python-lxml RUN pip install simplejson mako +#====================================== +# More sanity test dependencies (bazel) +RUN echo "deb http://httpredir.debian.org/debian jessie-backports main" > /etc/apt/sources.list.d/backports.list +RUN apt-get update +RUN apt-get -t jessie-backports install -y openjdk-8-jdk +RUN git clone https://github.com/bazelbuild/bazel.git /bazel +RUN cd /bazel && ./compile.sh +RUN ln -s /bazel/output/bazel /bin/ + #=================== # Docker "inception" # Note this is quite the ugly hack. diff --git a/tools/doxygen/Doxyfile.c++ b/tools/doxygen/Doxyfile.c++ index 7dc049604756646875e85a91e64c4b1979ef837d..798d68b0181e8488e903ec3e208e059219d5c131 100644 --- a/tools/doxygen/Doxyfile.c++ +++ b/tools/doxygen/Doxyfile.c++ @@ -40,7 +40,7 @@ PROJECT_NAME = "GRPC C++" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 0.14.0-dev +PROJECT_NUMBER = 0.15.0-dev # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a @@ -777,6 +777,8 @@ include/grpc++/impl/rpc_method.h \ include/grpc++/impl/rpc_service_method.h \ include/grpc++/impl/serialization_traits.h \ include/grpc++/impl/server_builder_option.h \ +include/grpc++/impl/server_builder_plugin.h \ +include/grpc++/impl/server_initializer.h \ include/grpc++/impl/service_type.h \ include/grpc++/impl/sync.h \ include/grpc++/impl/sync_cxx11.h \ @@ -833,6 +835,7 @@ include/grpc++/impl/codegen/sync_no_cxx11.h \ include/grpc++/impl/codegen/sync_stream.h \ include/grpc++/impl/codegen/time.h \ include/grpc/impl/codegen/byte_buffer.h \ +include/grpc/impl/codegen/byte_buffer_reader.h \ include/grpc/impl/codegen/compression_types.h \ include/grpc/impl/codegen/connectivity_state.h \ include/grpc/impl/codegen/grpc_types.h \ diff --git a/tools/doxygen/Doxyfile.c++.internal b/tools/doxygen/Doxyfile.c++.internal index 312fd17cb2235ea5fc2d320bda09bc20579b8f4d..ce1d6ac3c1b61922386279d1dff5242f56815272 100644 --- a/tools/doxygen/Doxyfile.c++.internal +++ b/tools/doxygen/Doxyfile.c++.internal @@ -40,7 +40,7 @@ PROJECT_NAME = "GRPC C++" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 0.14.0-dev +PROJECT_NUMBER = 0.15.0-dev # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a @@ -777,6 +777,8 @@ include/grpc++/impl/rpc_method.h \ include/grpc++/impl/rpc_service_method.h \ include/grpc++/impl/serialization_traits.h \ include/grpc++/impl/server_builder_option.h \ +include/grpc++/impl/server_builder_plugin.h \ +include/grpc++/impl/server_initializer.h \ include/grpc++/impl/service_type.h \ include/grpc++/impl/sync.h \ include/grpc++/impl/sync_cxx11.h \ @@ -833,6 +835,7 @@ include/grpc++/impl/codegen/sync_no_cxx11.h \ include/grpc++/impl/codegen/sync_stream.h \ include/grpc++/impl/codegen/time.h \ include/grpc/impl/codegen/byte_buffer.h \ +include/grpc/impl/codegen/byte_buffer_reader.h \ include/grpc/impl/codegen/compression_types.h \ include/grpc/impl/codegen/connectivity_state.h \ include/grpc/impl/codegen/grpc_types.h \ diff --git a/tools/doxygen/Doxyfile.core b/tools/doxygen/Doxyfile.core index 034d9c6e6f4af6ebe79e81a97aeac345649514da..aabca410dabb8818929fa53d454763212070997b 100644 --- a/tools/doxygen/Doxyfile.core +++ b/tools/doxygen/Doxyfile.core @@ -40,7 +40,7 @@ PROJECT_NAME = "GRPC Core" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 0.14.0-dev +PROJECT_NUMBER = 0.15.0-dev # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a @@ -766,6 +766,7 @@ include/grpc/compression.h \ include/grpc/grpc.h \ include/grpc/status.h \ include/grpc/impl/codegen/byte_buffer.h \ +include/grpc/impl/codegen/byte_buffer_reader.h \ include/grpc/impl/codegen/compression_types.h \ include/grpc/impl/codegen/connectivity_state.h \ include/grpc/impl/codegen/grpc_types.h \ @@ -785,6 +786,7 @@ include/grpc/impl/codegen/sync_generic.h \ include/grpc/impl/codegen/sync_posix.h \ include/grpc/impl/codegen/sync_win32.h \ include/grpc/impl/codegen/time.h \ +include/grpc/grpc_cronet.h \ include/grpc/grpc_security.h \ include/grpc/grpc_security_constants.h \ include/grpc/census.h \ diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal index b8341caa857503335886dea429a2460a8ab4b7f1..ef6de014adf67390ca4bf3d20dacd6a37d88b7d0 100644 --- a/tools/doxygen/Doxyfile.core.internal +++ b/tools/doxygen/Doxyfile.core.internal @@ -40,7 +40,7 @@ PROJECT_NAME = "GRPC Core" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 0.14.0-dev +PROJECT_NUMBER = 0.15.0-dev # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a @@ -766,6 +766,7 @@ include/grpc/compression.h \ include/grpc/grpc.h \ include/grpc/status.h \ include/grpc/impl/codegen/byte_buffer.h \ +include/grpc/impl/codegen/byte_buffer_reader.h \ include/grpc/impl/codegen/compression_types.h \ include/grpc/impl/codegen/connectivity_state.h \ include/grpc/impl/codegen/grpc_types.h \ @@ -785,6 +786,7 @@ include/grpc/impl/codegen/sync_generic.h \ include/grpc/impl/codegen/sync_posix.h \ include/grpc/impl/codegen/sync_win32.h \ include/grpc/impl/codegen/time.h \ +include/grpc/grpc_cronet.h \ include/grpc/grpc_security.h \ include/grpc/grpc_security_constants.h \ include/grpc/census.h \ @@ -806,6 +808,7 @@ src/core/lib/iomgr/closure.h \ src/core/lib/iomgr/endpoint.h \ src/core/lib/iomgr/endpoint_pair.h \ src/core/lib/iomgr/ev_poll_and_epoll_posix.h \ +src/core/lib/iomgr/ev_poll_posix.h \ src/core/lib/iomgr/ev_posix.h \ src/core/lib/iomgr/exec_ctx.h \ src/core/lib/iomgr/executor.h \ @@ -912,8 +915,9 @@ src/core/ext/client_config/subchannel.h \ src/core/ext/client_config/subchannel_call_holder.h \ src/core/ext/client_config/subchannel_index.h \ src/core/ext/client_config/uri_parser.h \ +third_party/objective_c/Cronet/cronet_c_for_grpc.h \ src/core/ext/lb_policy/grpclb/load_balancer_api.h \ -src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.h \ +src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h \ third_party/nanopb/pb.h \ third_party/nanopb/pb_common.h \ third_party/nanopb/pb_decode.h \ @@ -945,6 +949,7 @@ src/core/lib/iomgr/endpoint.c \ src/core/lib/iomgr/endpoint_pair_posix.c \ src/core/lib/iomgr/endpoint_pair_windows.c \ src/core/lib/iomgr/ev_poll_and_epoll_posix.c \ +src/core/lib/iomgr/ev_poll_posix.c \ src/core/lib/iomgr/ev_posix.c \ src/core/lib/iomgr/exec_ctx.c \ src/core/lib/iomgr/executor.c \ @@ -1072,8 +1077,11 @@ src/core/ext/client_config/subchannel_index.c \ src/core/ext/client_config/uri_parser.c \ src/core/ext/transport/chttp2/server/insecure/server_chttp2.c \ src/core/ext/transport/chttp2/client/insecure/channel_create.c \ +src/core/ext/transport/cronet/client/secure/cronet_channel_create.c \ +src/core/ext/transport/cronet/transport/cronet_api_dummy.c \ +src/core/ext/transport/cronet/transport/cronet_transport.c \ src/core/ext/lb_policy/grpclb/load_balancer_api.c \ -src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c \ +src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c \ third_party/nanopb/pb_common.c \ third_party/nanopb/pb_decode.c \ third_party/nanopb/pb_encode.c \ diff --git a/tools/gce/create_linux_performance_worker.sh b/tools/gce/create_linux_performance_worker.sh index 8c9cc46a75c4211bd9bdd42d2cab9794963b2426..c9a0ffa4e100f8b44fdfa931c92c956e4ea2ca27 100755 --- a/tools/gce/create_linux_performance_worker.sh +++ b/tools/gce/create_linux_performance_worker.sh @@ -42,14 +42,15 @@ CLOUD_PROJECT=grpc-testing ZONE=us-central1-b # this zone allows 32core machines INSTANCE_NAME="${1:-grpc-performance-server1}" -MACHINE_TYPE=n1-standard-32 +MACHINE_TYPE=n1-standard-8 gcloud compute instances create $INSTANCE_NAME \ --project="$CLOUD_PROJECT" \ --zone "$ZONE" \ --machine-type $MACHINE_TYPE \ --image ubuntu-15-10 \ - --boot-disk-size 300 + --boot-disk-size 300 \ + --scopes https://www.googleapis.com/auth/bigquery echo 'Created GCE instance, waiting 60 seconds for it to come online.' sleep 60 diff --git a/tools/gce/create_linux_worker.sh b/tools/gce/create_linux_worker.sh index dff0b1ce5f484c6434c09204b5dd8bab91d89be3..c41e4d299bff30a25d3f5522baaef7311e69bfb0 100755 --- a/tools/gce/create_linux_worker.sh +++ b/tools/gce/create_linux_worker.sh @@ -43,7 +43,7 @@ gcloud compute instances create $INSTANCE_NAME \ --project="$CLOUD_PROJECT" \ --zone "$ZONE" \ --machine-type n1-standard-8 \ - --image ubuntu-14-04 \ + --image ubuntu-15-10 \ --boot-disk-size 1000 echo 'Created GCE instance, waiting 60 seconds for it to come online.' diff --git a/tools/gce/linux_performance_worker_init.sh b/tools/gce/linux_performance_worker_init.sh index df29581e69a3abea9f13d9b4e4931c56c53692b3..dc4784262e7075306b80c4e23220c61ef9a56575 100755 --- a/tools/gce/linux_performance_worker_init.sh +++ b/tools/gce/linux_performance_worker_init.sh @@ -77,6 +77,9 @@ sudo apt-get install -y \ # perftools sudo apt-get install -y google-perftools libgoogle-perftools-dev +# netperf +sudo apt-get install -y netperf + # C++ dependencies sudo apt-get install -y libgflags-dev libgtest-dev libc++-dev clang @@ -94,6 +97,7 @@ sudo pip install tox # Node dependencies (nvm has to be installed under user jenkins) touch .profile curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.25.4/install.sh | bash +source ~/.nvm/nvm.sh nvm install 0.12 && npm config set cache /tmp/npm-cache nvm install 4 && npm config set cache /tmp/npm-cache nvm install 5 && npm config set cache /tmp/npm-cache @@ -115,3 +119,6 @@ source ~/.rvm/scripts/rvm gem install bundler # Java dependencies - nothing as we already have Java JDK 8 + +# Go dependencies +sudo apt-get install -y golang-go diff --git a/tools/gce/linux_worker_init.sh b/tools/gce/linux_worker_init.sh index ef6a5d175c95d0bd182d4e15e021c52c4bb53403..afcf7a52d920d842ea5528951d105f405345312e 100755 --- a/tools/gce/linux_worker_init.sh +++ b/tools/gce/linux_worker_init.sh @@ -37,7 +37,7 @@ set -ex sudo apt-get update # Install JRE -sudo apt-get install -y openjdk-7-jre +sudo apt-get install -y openjdk-8-jre sudo apt-get install -y unzip lsof # Install Docker diff --git a/tools/gcp/stress_test/run_client.py b/tools/gcp/stress_test/run_client.py index 2004bf6db4cc009690fd8e7a915963444891ad44..51ada6820da6bc91f93f5aa5aeb51da4cba02258 100755 --- a/tools/gcp/stress_test/run_client.py +++ b/tools/gcp/stress_test/run_client.py @@ -133,12 +133,15 @@ def run_client(): details = 'Logfile: %s' % logfile_name logfile = open(logfile_name, 'w') + metrics_cmd = metrics_client_cmd + [x + for x in metrics_client_args_str.split()] + stress_cmd = stress_client_cmd + [x for x in args_str.split()] + + details = '%s, Metrics command: %s, Stress client command: %s' % ( + details, str(metrics_cmd), str(stress_cmd)) # Update status that the test is starting (in the status table) bq_helper.insert_summary_row(EventType.STARTING, details) - metrics_cmd = metrics_client_cmd + [x for x in metrics_client_args_str.split()] - stress_cmd = stress_client_cmd + [x for x in args_str.split()] - print 'Launching process %s ...' % stress_cmd stress_p = subprocess.Popen(args=stress_cmd, stdout=logfile, @@ -147,6 +150,7 @@ def run_client(): qps_history = [1, 1, 1] # Maintain the last 3 qps readings qps_history_idx = 0 # Index into the qps_history list + is_running_status_written = False is_error = False while True: # Check if stress_client is still running. If so, collect metrics and upload @@ -165,6 +169,10 @@ def run_client(): print details break + if not is_running_status_written: + bq_helper.insert_summary_row(EventType.RUNNING, '') + is_running_status_written = True + # Stress client still running. Get metrics qps = _get_qps(metrics_cmd) qps_recorded_at = datetime.datetime.now().isoformat() diff --git a/tools/gcp/stress_test/run_server.py b/tools/gcp/stress_test/run_server.py index a666ae29001e9500bff2f02e32b17f39ee9fdcf3..8f47e42ef32dd0425cea419b80b41b7f04db45d6 100755 --- a/tools/gcp/stress_test/run_server.py +++ b/tools/gcp/stress_test/run_server.py @@ -106,16 +106,22 @@ def run_server(): logfile = open(logfile_name, 'w') details = 'Logfile: %s' % logfile_name + stress_cmd = stress_server_cmd + [x for x in args_str.split()] + + details = '%s, Stress server command: %s' % (details, str(stress_cmd)) # Update status that the test is starting (in the status table) bq_helper.insert_summary_row(EventType.STARTING, details) - stress_cmd = stress_server_cmd + [x for x in args_str.split()] - print 'Launching process %s ...' % stress_cmd stress_p = subprocess.Popen(args=stress_cmd, stdout=logfile, stderr=subprocess.STDOUT) + # Update the status to running if subprocess.Popen launched the server + if stress_p.poll() is None: + bq_helper.insert_summary_row(EventType.RUNNING, '') + + # Wait for the server process to terminate returncode = stress_p.wait() if will_run_forever == '1' or returncode != 0: diff --git a/tools/gcp/stress_test/stress_test_utils.py b/tools/gcp/stress_test/stress_test_utils.py index 19d59c0df10fe580f978e5198e40a25943e704fc..b821fc8fcc1d30f04580d69471d20e5207e430b3 100755 --- a/tools/gcp/stress_test/stress_test_utils.py +++ b/tools/gcp/stress_test/stress_test_utils.py @@ -46,6 +46,7 @@ import big_query_utils as bq_utils class EventType: STARTING = 'STARTING' + RUNNING = 'RUNNING' SUCCESS = 'SUCCESS' FAILURE = 'FAILURE' @@ -195,11 +196,11 @@ class BigQueryHelper: ('image_type', 'STRING', 'Client or Server?'), ('pod_name', 'STRING', 'GKE pod hosting this image'), ('event_date', 'STRING', 'The date of this event'), - ('event_type', 'STRING', 'STARTED/SUCCESS/FAILURE'), + ('event_type', 'STRING', 'STARTING/RUNNING/SUCCESS/FAILURE'), ('details', 'STRING', 'Any other relevant details') ] - desc = ('The table that contains START/SUCCESS/FAILURE events for ' - ' the stress test clients and servers') + desc = ('The table that contains STARTING/RUNNING/SUCCESS/FAILURE events ' + 'for the stress test clients and servers') return bq_utils.create_table(self.bq, self.project_id, self.dataset_id, self.summary_table_id, summary_table_schema, desc) diff --git a/tools/gource/create_auth_context.h b/tools/gource/create_auth_context.h new file mode 100644 index 0000000000000000000000000000000000000000..387407bfec5d8e4d106940e5642e46d976df2258 --- /dev/null +++ b/tools/gource/create_auth_context.h @@ -0,0 +1,42 @@ +/* + * + * 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 <memory> + +#include <grpc++/security/auth_context.h> +#include <grpc/grpc.h> + +namespace grpc { + +std::shared_ptr<const AuthContext> CreateAuthContext(grpc_call* call); + +} // namespace grpc diff --git a/tools/gource/gen-all-logs.sh b/tools/gource/gen-all-logs.sh new file mode 100755 index 0000000000000000000000000000000000000000..85352c514e92c8c6f6caef5bdc07c112fafb84c9 --- /dev/null +++ b/tools/gource/gen-all-logs.sh @@ -0,0 +1,47 @@ +#!/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. + +set -ex + +outdir=`pwd` + +tmpdir=`mktemp -d` +mkdir -p $tmpdir/logs +repos="grpc grpc-common grpc-go grpc-java grpc.github.io grpc-tools homebrew-grpc grpc-docker-library" +for repo in $repos +do + cd $tmpdir + git clone https://github.com/grpc/$repo.git + cd $repo + gource --output-custom-log $tmpdir/logs/$repo + sed -i .backup "s,\|/,\|/$repo/,g" $tmpdir/logs/$repo +done +rm $tmpdir/logs/*.backup +cat $tmpdir/logs/* | sort -n > $outdir/all-logs.txt diff --git a/tools/gource/gource.sh b/tools/gource/gource.sh index 0199609e9b2ce88ae4cef357d8cc54af3c078524..b3dad5d7c7a42e01b0bd45065e22a96c56d74351 100755 --- a/tools/gource/gource.sh +++ b/tools/gource/gource.sh @@ -28,5 +28,13 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -gource --multi-sampling -c 4 -s 0.1 --max-file-lag 0.05 --max-files 0 -e 0.05 --hide filenames,dirnames $* - +gource \ + --multi-sampling \ + -s 0.1 \ + --max-file-lag 0.05 \ + --max-files 0 \ + -e 0.01 \ + --hide filenames,dirnames \ + --disable-auto-rotate \ + --file-filter '/grpc/doc/ref' \ + $* diff --git a/tools/gource/make-video.sh b/tools/gource/make-video.sh new file mode 100755 index 0000000000000000000000000000000000000000..02d79df81bf66e777b9fb0456e7190224ce6b013 --- /dev/null +++ b/tools/gource/make-video.sh @@ -0,0 +1,47 @@ +#!/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. + +set -ex + +dst=$1 +shift +$(dirname $0)/gource.sh \ + --disable-progress \ + --stop-at-end \ + --output-ppm-stream - \ + $@ | \ +ffmpeg \ + -y \ + -r 60 \ + -f image2pipe \ + -vcodec ppm \ + -i - \ + -vcodec libx264 \ + $dst diff --git a/tools/jenkins/run_performance.sh b/tools/jenkins/run_performance.sh index 13a332751b22bd5b0f532282ee5213d9dbb50d44..99b920f6a095ba772a20eb2ac430170d25a26131 100755 --- a/tools/jenkins/run_performance.sh +++ b/tools/jenkins/run_performance.sh @@ -34,4 +34,4 @@ set -ex # Enter the gRPC repo root cd $(dirname $0)/../.. -tools/run_tests/run_performance_tests.py -l c++ node ruby csharp python +tools/run_tests/run_performance_tests.py -l c++ node ruby csharp python --netperf --category smoketest diff --git a/tools/run_tests/artifact_targets.py b/tools/run_tests/artifact_targets.py index 3e08c1d62b3d74996eacd1c436c87c39677c7579..bd1269ceb723542128db82d6c46d5b7fab608b52 100644 --- a/tools/run_tests/artifact_targets.py +++ b/tools/run_tests/artifact_targets.py @@ -84,12 +84,16 @@ python_version_arch_map = { class PythonArtifact: """Builds Python artifacts.""" - def __init__(self, platform, arch): - self.name = 'python_%s_%s' % (platform, arch) + def __init__(self, platform, arch, manylinux_build=None): + if manylinux_build: + self.name = 'python_%s_%s_%s' % (platform, arch, manylinux_build) + else: + self.name = 'python_%s_%s' % (platform, arch) self.platform = platform self.arch = arch self.labels = ['artifact', 'python', platform, arch] self.python_version = python_version_arch_map[arch] + self.manylinux_build = manylinux_build def pre_build_jobspecs(self): return [] @@ -99,14 +103,26 @@ class PythonArtifact: if self.platform == 'linux': if self.arch == 'x86': environ['SETARCH_CMD'] = 'linux32' + # Inside the manylinux container, the python installations are located in + # special places... + environ['PYTHON'] = '/opt/python/{}/bin/python'.format(self.manylinux_build) + environ['PIP'] = '/opt/python/{}/bin/pip'.format(self.manylinux_build) + # Our docker image has all the prerequisites pip-installed already. + environ['SKIP_PIP_INSTALL'] = '1' + # Platform autodetection for the manylinux1 image breaks so we set the + # defines ourselves. + # TODO(atash) get better platform-detection support in core so we don't + # need to do this manually... + environ['CFLAGS'] = '-DGPR_MANYLINUX1=1' return create_docker_jobspec(self.name, - 'tools/dockerfile/grpc_artifact_linux_%s' % self.arch, + 'tools/dockerfile/grpc_artifact_python_manylinux_%s' % self.arch, 'tools/run_tests/build_artifact_python.sh', environ=environ) elif self.platform == 'windows': return create_jobspec(self.name, ['tools\\run_tests\\build_artifact_python.bat', - self.python_version + self.python_version, + '32' if self.arch == 'x86' else '64' ], shell=True) else: @@ -307,8 +323,10 @@ def targets(): for Cls in (CSharpExtArtifact, NodeExtArtifact, ProtocArtifact) for platform in ('linux', 'macos', 'windows') for arch in ('x86', 'x64')] + - [PythonArtifact('linux', 'x86'), - PythonArtifact('linux', 'x64'), + [PythonArtifact('linux', 'x86', 'cp27-cp27m'), + PythonArtifact('linux', 'x86', 'cp27-cp27mu'), + PythonArtifact('linux', 'x64', 'cp27-cp27m'), + PythonArtifact('linux', 'x64', 'cp27-cp27mu'), PythonArtifact('macos', 'x64'), PythonArtifact('windows', 'x86'), PythonArtifact('windows', 'x64'), diff --git a/tools/run_tests/build_artifact_csharp.bat b/tools/run_tests/build_artifact_csharp.bat index 33dc8c25aeabd05facbdadc87b91a243f8b5d8c2..24c8d485f9f07f6e59771352f989a1e42089136d 100644 --- a/tools/run_tests/build_artifact_csharp.bat +++ b/tools/run_tests/build_artifact_csharp.bat @@ -1,3 +1,32 @@ +@rem Copyright 2016, Google Inc. +@rem All rights reserved. +@rem +@rem Redistribution and use in source and binary forms, with or without +@rem modification, are permitted provided that the following conditions are +@rem met: +@rem +@rem * Redistributions of source code must retain the above copyright +@rem notice, this list of conditions and the following disclaimer. +@rem * Redistributions in binary form must reproduce the above +@rem copyright notice, this list of conditions and the following disclaimer +@rem in the documentation and/or other materials provided with the +@rem distribution. +@rem * Neither the name of Google Inc. nor the names of its +@rem contributors may be used to endorse or promote products derived from +@rem this software without specific prior written permission. +@rem +@rem THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +@rem "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +@rem LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +@rem A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +@rem OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +@rem SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +@rem LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +@rem DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +@rem THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +@rem (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +@rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + @rem Builds C# artifacts on Windows @call vsprojects\build_vs2013.bat %* || goto :error diff --git a/tools/run_tests/build_artifact_node.bat b/tools/run_tests/build_artifact_node.bat index 84c63c28a2568cfafc02a73171008d0d13695a49..c5bd726db7ef2481518a6d091d2b68e7e2f52bc2 100644 --- a/tools/run_tests/build_artifact_node.bat +++ b/tools/run_tests/build_artifact_node.bat @@ -27,7 +27,7 @@ @rem (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE @rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -set node_versions=0.12.0 1.0.0 1.1.0 2.0.0 3.0.0 4.0.0 5.0.0 +set node_versions=0.12.0 1.0.0 1.1.0 2.0.0 3.0.0 4.0.0 5.0.0 6.0.0 set PATH=%PATH%;C:\Program Files\nodejs\;%APPDATA%\npm @@ -38,12 +38,12 @@ call npm update || goto :error mkdir artifacts for %%v in (%node_versions%) do ( - call node-pre-gyp configure build --target=%%v --target_arch=%1 + call .\node_modules\.bin\node-pre-gyp.cmd configure build --target=%%v --target_arch=%1 @rem Try again after removing openssl headers rmdir "%HOMEDRIVE%%HOMEPATH%\.node-gyp\%%v\include\node\openssl" /S /Q rmdir "%HOMEDRIVE%%HOMEPATH%\.node-gyp\iojs-%%v\include\node\openssl" /S /Q - call node-pre-gyp build package testpackage --target=%%v --target_arch=%1 || goto :error + call .\node_modules\.bin\node-pre-gyp.cmd build package testpackage --target=%%v --target_arch=%1 || goto :error xcopy /Y /I /S build\stage\* artifacts\ || goto :error ) diff --git a/tools/run_tests/build_artifact_node.sh b/tools/run_tests/build_artifact_node.sh index ef3476a03817b46a099a4547a4d5bb2a0020ffc2..9d06472aa4997f8117bb6991f96ac7c32cfbb146 100755 --- a/tools/run_tests/build_artifact_node.sh +++ b/tools/run_tests/build_artifact_node.sh @@ -42,7 +42,7 @@ mkdir -p artifacts npm update -node_versions=( 0.12.0 1.0.0 1.1.0 2.0.0 3.0.0 4.0.0 5.0.0 ) +node_versions=( 0.12.0 1.0.0 1.1.0 2.0.0 3.0.0 4.0.0 5.0.0 6.0.0 ) for version in ${node_versions[@]} do diff --git a/tools/run_tests/build_artifact_python.bat b/tools/run_tests/build_artifact_python.bat index 023d394549425f65f33811f09a1db6f336c90bc6..fea0275426fad12b93d4f54f2ff270161d549816 100644 --- a/tools/run_tests/build_artifact_python.bat +++ b/tools/run_tests/build_artifact_python.bat @@ -41,7 +41,7 @@ copy /Y vsprojects\Release\grpc_dll.dll src\python\grpcio\grpc\_cython\_windows\ copy /Y vsprojects\x64\Release\grpc_dll.dll src\python\grpcio\grpc\_cython\_windows\grpc_c.64.python || goto :error -set PATH=C:\%1;C:\%1\scripts;%PATH% +set PATH=C:\%1;C:\%1\scripts;C:\msys64\mingw%2\bin;%PATH% pip install --upgrade six pip install --upgrade setuptools @@ -50,10 +50,37 @@ pip install -rrequirements.txt set GRPC_PYTHON_USE_CUSTOM_BDIST=0 set GRPC_PYTHON_BUILD_WITH_CYTHON=1 +@rem TODO(atash): maybe we could avoid the grpc_c.(32|64).python shim above if +@rem this used the right python build? python setup.py bdist_wheel +@rem Build gRPC Python tools +@rem +@rem Because this is windows and *everything seems to hate Windows* we have to +@rem set all of these flags ourselves because Python won't help us (see the +@rem setup.py of the grpcio_tools project). +set GRPC_PYTHON_CFLAGS=-fno-wrapv -frtti -std=c++11 +@rem Further confusing things, MSYS2's mingw64 tries to dynamically link +@rem libgcc, libstdc++, and winpthreads. We have to override this or our +@rem extensions end up linking to MSYS2 DLLs, which the normal Python on +@rem Windows user won't have... and ON TOP OF THIS, there's MinGW's GCC default +@rem behavior of linking msvcrt.dll as the C runtime library, which we need to +@rem override so that Python's distutils doesn't link us against multiple C +@rem runtimes. +python -c "from distutils.cygwinccompiler import get_msvcr; print(get_msvcr()[0])" > temp.txt +set /p PYTHON_MSVCR=<temp.txt +set GRPC_PYTHON_LDFLAGS=-static-libgcc -static-libstdc++ -mcrtdll=%PYTHON_MSVCR% -static -lpthread +python tools\distrib\python\make_grpcio_tools.py +if %2 == 32 ( + python tools\distrib\python\grpcio_tools\setup.py build_ext -c mingw32 +) else ( + python tools\distrib\python\grpcio_tools\setup.py build_ext -c mingw32 -DMS_WIN64 +) +python tools\distrib\python\grpcio_tools\setup.py bdist_wheel + mkdir artifacts xcopy /Y /I /S dist\* artifacts\ || goto :error +xcopy /Y /I /S tools\distrib\python\grpcio_tools\dist\* artifacts\ || goto :error goto :EOF diff --git a/tools/run_tests/build_artifact_python.sh b/tools/run_tests/build_artifact_python.sh index 1f23f9fade880b11152dc5f0da526577fa040869..4320f978e30171ebdddcb2092b5762d40d1a0ae3 100755 --- a/tools/run_tests/build_artifact_python.sh +++ b/tools/run_tests/build_artifact_python.sh @@ -32,36 +32,52 @@ set -ex cd $(dirname $0)/../.. +export GRPC_PYTHON_USE_CUSTOM_BDIST=0 +export GRPC_PYTHON_BUILD_WITH_CYTHON=1 +export PYTHON=${PYTHON:-python} +export PIP=${PIP:-pip} +export AUDITWHEEL=${AUDITWHEEL:-auditwheel} + + if [ "$SKIP_PIP_INSTALL" == "" ] then - pip install --upgrade six + ${PIP} install --upgrade six # There's a bug in newer versions of setuptools (see # https://bitbucket.org/pypa/setuptools/issues/503/pkg_resources_vendorpackagingrequirementsi) - pip install --upgrade 'setuptools==18' - pip install -rrequirements.txt + ${PIP} pip install --upgrade 'setuptools==18' + ${PIP} install -rrequirements.txt fi -export GRPC_PYTHON_USE_CUSTOM_BDIST=0 -export GRPC_PYTHON_BUILD_WITH_CYTHON=1 - # Build the source distribution first because MANIFEST.in cannot override # exclusion of built shared objects among package resources (for some # inexplicable reason). -${SETARCH_CMD} python setup.py \ +${SETARCH_CMD} ${PYTHON} setup.py \ sdist -# The bdist_wheel_grpc_custom command is finicky about command output ordering -# and thus ought to be run in a shell command separate of others. Further, it -# trashes the actual bdist_wheel output, so it should be run first so that -# bdist_wheel may be run unmolested. -${SETARCH_CMD} python setup.py \ - build_tagged_ext - # Wheel has a bug where directories don't get excluded. # https://bitbucket.org/pypa/wheel/issues/99/cannot-exclude-directory -${SETARCH_CMD} python setup.py \ +${SETARCH_CMD} ${PYTHON} setup.py \ bdist_wheel +# Build gRPC tools package source distribution +${SETARCH_CMD} ${PYTHON} tools/distrib/python/grpcio_tools/setup.py \ + sdist + +# Build gRPC tools package binary distribution +${PYTHON} tools/distrib/python/make_grpcio_tools.py +CFLAGS="$CFLAGS -fno-wrapv" ${SETARCH_CMD} \ + ${PYTHON} tools/distrib/python/grpcio_tools/setup.py bdist_wheel + mkdir -p artifacts +if command -v ${AUDITWHEEL} +then + for wheel in dist/*.whl; do + ${AUDITWHEEL} repair $wheel -w artifacts/ + done + for wheel in tools/distrib/python/grpcio_tools/dist/*.whl; do + ${AUDITWHEEL} repair $wheel -w artifacts/ + done +fi cp -r dist/* artifacts +cp -r tools/distrib/python/grpcio_tools/dist/* artifacts diff --git a/tools/run_tests/build_package_node.sh b/tools/run_tests/build_package_node.sh index 6bc9466b6337c604727c131950ff47fc49cfb329..4646072a545aa59529078a47f9deb0e97176bc83 100755 --- a/tools/run_tests/build_package_node.sh +++ b/tools/run_tests/build_package_node.sh @@ -55,7 +55,7 @@ npm pack cp grpc-tools-*.tgz $artifacts/ tools_version=$(npm list | grep -oP '(?<=grpc-tools@)\S+') -output_dir=$artifacts/grpc-precompiled-binaries/node/grpc-tools/$tools_version +output_dir=$artifacts/grpc-precompiled-binaries/node/grpc-tools/v$tools_version mkdir -p $output_dir for arch in {x86,x64}; do diff --git a/tools/run_tests/build_python.sh b/tools/run_tests/build_python.sh index 594c20b14c3393cf952b9fc90074c07454fb5e2e..4cc6881ef5a9d5c91500e2c0af83f12750a33677 100755 --- a/tools/run_tests/build_python.sh +++ b/tools/run_tests/build_python.sh @@ -55,3 +55,7 @@ $ROOT/.tox/${TOX_PYTHON_ENV}/bin/python $ROOT/setup.py build $ROOT/.tox/${TOX_PYTHON_ENV}/bin/python $ROOT/setup.py build_py $ROOT/.tox/${TOX_PYTHON_ENV}/bin/python $ROOT/setup.py build_ext --inplace $ROOT/.tox/${TOX_PYTHON_ENV}/bin/python $ROOT/setup.py gather --test + +# Build the health checker +$ROOT/.tox/${TOX_PYTHON_ENV}/bin/python $ROOT/src/python/grpcio_health_checking/setup.py build +$ROOT/.tox/${TOX_PYTHON_ENV}/bin/python $ROOT/src/python/grpcio_health_checking/setup.py build_py diff --git a/tools/run_tests/configs.json b/tools/run_tests/configs.json index 325e9aa92957ce5463140776ac3281dbb19605f4..bcc4118d2f3a64c553c8414b8e6923b04b10af89 100644 --- a/tools/run_tests/configs.json +++ b/tools/run_tests/configs.json @@ -56,6 +56,9 @@ }, { "config": "ubsan", + "environ": { + "UBSAN_OPTIONS": "print_stacktrace=1" + }, "timeout_multiplier": 1.5 }, { diff --git a/tools/run_tests/dockerize/docker_run_tests.sh b/tools/run_tests/dockerize/docker_run_tests.sh index 2fc66c21f56d3ec2c65141c86849f8dbdd9ad92a..8c6143d24f97802dc2cf5b7596596b5497a5a922 100755 --- a/tools/run_tests/dockerize/docker_run_tests.sh +++ b/tools/run_tests/dockerize/docker_run_tests.sh @@ -35,6 +35,7 @@ set -e export CONFIG=$config export ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer +export PATH=$PATH:/usr/bin/llvm-symbolizer # Ensure that programs depending on current-user-ownership of cache directories # are satisfied (it's being mounted from outside the image). diff --git a/tools/run_tests/jobset.py b/tools/run_tests/jobset.py index e9675fb785bd5a71afe210193df63c3799f515c8..d3259e724dfedacbecf7c32a6e920c34daa64788 100755 --- a/tools/run_tests/jobset.py +++ b/tools/run_tests/jobset.py @@ -344,6 +344,7 @@ class Jobset(object): self._add_env = add_env self.resultset = {} self._remaining = None + self._start_time = time.time() def set_remaining(self, remaining): self._remaining = remaining @@ -413,6 +414,11 @@ class Jobset(object): if dead: return if (not self._travis): rstr = '' if self._remaining is None else '%d queued, ' % self._remaining + if self._remaining is not None and self._completed > 0: + now = time.time() + sofar = now - self._start_time + remaining = sofar / self._completed * (self._remaining + len(self._running)) + rstr = 'ETA %.1f sec; %s' % (remaining, rstr) message('WAITING', '%s%d jobs running, %d complete, %d failed' % ( rstr, len(self._running), self._completed, self._failures)) if platform_string() == 'windows': @@ -457,7 +463,7 @@ def tag_remaining(xs): staging = [] for x in xs: staging.append(x) - if len(staging) > 1000: + if len(staging) > 5000: yield (staging.pop(0), None) n = len(staging) for i, x in enumerate(staging): diff --git a/tools/run_tests/performance/bq_upload_result.py b/tools/run_tests/performance/bq_upload_result.py index ebd28f75918c480816a66f9e938aa3fb072b41f7..fbccf3bdcabd6410d07dc5455812d7c265a222dc 100755 --- a/tools/run_tests/performance/bq_upload_result.py +++ b/tools/run_tests/performance/bq_upload_result.py @@ -48,20 +48,47 @@ import big_query_utils _PROJECT_ID='grpc-testing' -def _upload_scenario_result_to_bigquery(dataset_id, table_id, result_file): +def _upload_netperf_latency_csv_to_bigquery(dataset_id, table_id, result_file): + with open(result_file, 'r') as f: + (col1, col2, col3) = f.read().split(',') + latency50 = float(col1.strip()) * 1000 + latency90 = float(col2.strip()) * 1000 + latency99 = float(col3.strip()) * 1000 + + scenario_result = { + 'scenario': { + 'name': 'netperf_tcp_rr' + }, + 'summary': { + 'latency50': latency50, + 'latency90': latency90, + 'latency99': latency99 + } + } + bq = big_query_utils.create_big_query() _create_results_table(bq, dataset_id, table_id) + if not _insert_result(bq, dataset_id, table_id, scenario_result, flatten=False): + print 'Error uploading result to bigquery.' + sys.exit(1) + + +def _upload_scenario_result_to_bigquery(dataset_id, table_id, result_file): with open(result_file, 'r') as f: scenario_result = json.loads(f.read()) + bq = big_query_utils.create_big_query() + _create_results_table(bq, dataset_id, table_id) + if not _insert_result(bq, dataset_id, table_id, scenario_result): print 'Error uploading result to bigquery.' sys.exit(1) -def _insert_result(bq, dataset_id, table_id, scenario_result): - _flatten_result_inplace(scenario_result) +def _insert_result(bq, dataset_id, table_id, scenario_result, flatten=True): + if flatten: + _flatten_result_inplace(scenario_result) _populate_metadata_inplace(scenario_result) row = big_query_utils.make_row(str(uuid.uuid4()), scenario_result) return big_query_utils.insert_rows(bq, @@ -127,9 +154,17 @@ argp.add_argument('--bq_result_table', required=True, default=None, type=str, help='Bigquery "dataset.table" to upload results to.') argp.add_argument('--file_to_upload', default='scenario_result.json', type=str, help='Report file to upload.') +argp.add_argument('--file_format', + choices=['scenario_result','netperf_latency_csv'], + default='scenario_result', + help='Format of the file to upload.') args = argp.parse_args() dataset_id, table_id = args.bq_result_table.split('.', 2) -_upload_scenario_result_to_bigquery(dataset_id, table_id, args.file_to_upload) + +if args.file_format == 'netperf_latency_csv': + _upload_netperf_latency_csv_to_bigquery(dataset_id, table_id, args.file_to_upload) +else: + _upload_scenario_result_to_bigquery(dataset_id, table_id, args.file_to_upload) print 'Successfully uploaded %s to BigQuery.\n' % args.file_to_upload diff --git a/tools/run_tests/performance/build_performance.sh b/tools/run_tests/performance/build_performance.sh index 8cfe1c48e99e0ee9f3edbbaf5c09192444c7f096..352c6797579c543faafef77dc784c4cb7a4a2893 100755 --- a/tools/run_tests/performance/build_performance.sh +++ b/tools/run_tests/performance/build_performance.sh @@ -33,8 +33,6 @@ set -ex cd $(dirname $0)/../../.. -#TODO(jtattermusch): add support for more languages - CONFIG=${CONFIG:-opt} # build C++ qps worker & driver always - we need at least the driver to @@ -53,6 +51,9 @@ do (cd ../grpc-java/ && ./gradlew -PskipCodegen=true :grpc-benchmarks:installDist) ;; + "go") + tools/run_tests/performance/build_performance_go.sh + ;; *) tools/run_tests/run_tests.py -l $language -c $CONFIG --build_only -j 8 ;; diff --git a/tools/run_tests/performance/build_performance_go.sh b/tools/run_tests/performance/build_performance_go.sh new file mode 100755 index 0000000000000000000000000000000000000000..3719cc5986dc9cb24b6b718232e5a79f67e496ec --- /dev/null +++ b/tools/run_tests/performance/build_performance_go.sh @@ -0,0 +1,44 @@ +#!/bin/bash +# 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. + +set -ex + +cd $(dirname $0)/../../.. + +export GOPATH=$(pwd)/../gopath + +# Get grpc-go and the dependencies but get rid of the upstream/master version +go get google.golang.org/grpc +rm -rf "${GOPATH}/src/google.golang.org/grpc" + +# Get the revision of grpc-go we want to test +git clone --recursive ../grpc-go ${GOPATH}/src/google.golang.org/grpc + +(cd ${GOPATH}/src/google.golang.org/grpc/benchmark/worker && go install) diff --git a/tools/run_tests/performance/kill_workers.sh b/tools/run_tests/performance/kill_workers.sh index 7a8763424dcf3dede31d277e8f8210bdc6af19c1..f306f0c991225e181c78dd3fb2aa008c1dff1bea 100755 --- a/tools/run_tests/performance/kill_workers.sh +++ b/tools/run_tests/performance/kill_workers.sh @@ -52,3 +52,6 @@ ps -C python -o pid=,cmd= | grep 'qps_worker.py' | awk '{print $1}' | xargs kill # Java jps | grep LoadWorker | awk '{print $1}' | xargs kill -9 + +# Go +killall -9 worker || true diff --git a/tools/run_tests/performance/remote_host_prepare.sh b/tools/run_tests/performance/remote_host_prepare.sh index d7f539a74e8e50d2483139f25e81e3607b48312c..f81102bbdc4facf2962cc62f161bd874cf589256 100755 --- a/tools/run_tests/performance/remote_host_prepare.sh +++ b/tools/run_tests/performance/remote_host_prepare.sh @@ -39,7 +39,7 @@ ssh "${USER_AT_HOST}" "rm -rf ~/performance_workspace && mkdir -p ~/performance_ # mess with the results, be rough and reboot the slave here # and wait for it to come back online. # could also kill jenkins. -ssh "${USER_AT_HOST}" "killall -9 qps_worker mono node ruby || true" +ssh "${USER_AT_HOST}" "killall -9 qps_worker mono node ruby worker || true" # push the current sources to the slave and unpack it. scp ../grpc.tar "${USER_AT_HOST}:~/performance_workspace" diff --git a/tools/run_tests/performance/run_netperf.sh b/tools/run_tests/performance/run_netperf.sh new file mode 100755 index 0000000000000000000000000000000000000000..298edbe0c3a33b04ace7e48af564b8ef12394fc2 --- /dev/null +++ b/tools/run_tests/performance/run_netperf.sh @@ -0,0 +1,45 @@ +#!/bin/bash +# 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. + +set -ex + +cd $(dirname $0)/../../.. + +netperf >netperf_latency.txt -P 0 -t TCP_RR -H "$NETPERF_SERVER_HOST" -- -r 1,1 -o P50_LATENCY,P90_LATENCY,P99_LATENCY + +cat netperf_latency.txt + +if [ "$BQ_RESULT_TABLE" != "" ] +then + tools/run_tests/performance/bq_upload_result.py \ + --file_to_upload=netperf_latency.txt \ + --file_format=netperf_latency_csv \ + --bq_result_table="$BQ_RESULT_TABLE" +fi diff --git a/tools/run_tests/performance/run_worker_go.sh b/tools/run_tests/performance/run_worker_go.sh new file mode 100755 index 0000000000000000000000000000000000000000..6b1242a41977bb419698df45d9371e4eb21884c0 --- /dev/null +++ b/tools/run_tests/performance/run_worker_go.sh @@ -0,0 +1,37 @@ +#!/bin/bash +# 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. + +set -ex + +cd $(dirname $0)/../../.. + +export GOPATH=$(pwd)/../gopath + +${GOPATH}/bin/worker $@ diff --git a/tools/run_tests/performance/scenario_config.py b/tools/run_tests/performance/scenario_config.py index ddbe2375691b01f21890b71891eb98d18825769a..77b158f27e14d0d41ba14eeac3129de47378e14f 100644 --- a/tools/run_tests/performance/scenario_config.py +++ b/tools/run_tests/performance/scenario_config.py @@ -29,11 +29,12 @@ # performance scenario configuration for various languages -SINGLE_MACHINE_CORES=8 WARMUP_SECONDS=5 JAVA_WARMUP_SECONDS=15 # Java needs more warmup time for JIT to kick in. BENCHMARK_SECONDS=30 +SMOKETEST='smoketest' + SECURE_SECARGS = {'use_test_ca': True, 'server_host_override': 'foo.test.google.fr'} @@ -68,6 +69,102 @@ DEEP=100 # wide is the number of client channels in multi-channel tests (1 otherwise) WIDE=64 +# For most synchronous clients, DEEP*WIDE threads will be created. +SYNC_DEEP=10 +SYNC_WIDE=8 + + +def _get_secargs(is_secure): + if is_secure: + return SECURE_SECARGS + else: + return None + + +def remove_nonproto_fields(scenario): + """Remove special-purpose that contains some extra info about the scenario + but don't belong to the ScenarioConfig protobuf message""" + scenario.pop('CATEGORIES', None) + scenario.pop('CLIENT_LANGUAGE', None) + scenario.pop('SERVER_LANGUAGE', None) + return scenario + + +def _ping_pong_scenario(name, rpc_type, + client_type, server_type, + secure=True, + use_generic_payload=False, + unconstrained_client=None, + client_language=None, + server_language=None, + server_core_limit=0, + async_server_threads=0, + warmup_seconds=WARMUP_SECONDS, + categories=[]): + """Creates a basic ping pong scenario.""" + scenario = { + 'name': name, + 'num_servers': 1, + 'num_clients': 1, + 'client_config': { + 'client_type': client_type, + 'security_params': _get_secargs(secure), + 'outstanding_rpcs_per_channel': 1, + 'client_channels': 1, + 'async_client_threads': 1, + 'rpc_type': rpc_type, + 'load_params': { + 'closed_loop': {} + }, + 'histogram_params': HISTOGRAM_PARAMS, + }, + 'server_config': { + 'server_type': server_type, + 'security_params': _get_secargs(secure), + 'core_limit': server_core_limit, + 'async_server_threads': async_server_threads, + }, + 'warmup_seconds': warmup_seconds, + 'benchmark_seconds': BENCHMARK_SECONDS + } + if use_generic_payload: + if server_type != 'ASYNC_GENERIC_SERVER': + raise Exception('Use ASYNC_GENERIC_SERVER for generic payload.') + scenario['client_config']['payload_config'] = EMPTY_GENERIC_PAYLOAD + scenario['server_config']['payload_config'] = EMPTY_GENERIC_PAYLOAD + else: + # For proto payload, only the client should get the config. + scenario['client_config']['payload_config'] = EMPTY_PROTO_PAYLOAD + + if unconstrained_client: + if unconstrained_client == 'async': + deep = DEEP + wide = WIDE + elif unconstrained_client == 'sync': + deep = SYNC_DEEP + wide = SYNC_WIDE + else: + raise Exception('Illegal value of unconstrained_client option.') + + scenario['num_clients'] = 0 # use as many client as available. + scenario['client_config']['outstanding_rpcs_per_channel'] = deep + scenario['client_config']['client_channels'] = wide + scenario['client_config']['async_client_threads'] = 0 + else: + scenario['client_config']['outstanding_rpcs_per_channel'] = 1 + scenario['client_config']['client_channels'] = 1 + scenario['client_config']['async_client_threads'] = 1 + + if client_language: + # the CLIENT_LANGUAGE field is recognized by run_performance_tests.py + scenario['CLIENT_LANGUAGE'] = client_language + if server_language: + # the SERVER_LANGUAGE field is recognized by run_performance_tests.py + scenario['SERVER_LANGUAGE'] = server_language + if categories: + scenario['CATEGORIES'] = categories + return scenario + class CXXLanguage: @@ -83,205 +180,61 @@ class CXXLanguage: def scenarios(self): # TODO(ctiller): add 70% load latency test for secure in [True, False]: - if secure: - secstr = 'secure' - secargs = SECURE_SECARGS - else: - secstr = 'insecure' - secargs = None - - yield { - 'name': 'cpp_generic_async_streaming_ping_pong_%s' - % secstr, - 'num_servers': 1, - 'num_clients': 1, - 'client_config': { - 'client_type': 'ASYNC_CLIENT', - 'security_params': secargs, - 'outstanding_rpcs_per_channel': 1, - 'client_channels': 1, - 'async_client_threads': 1, - 'rpc_type': 'STREAMING', - 'load_params': { - 'closed_loop': {} - }, - 'payload_config': EMPTY_GENERIC_PAYLOAD, - 'histogram_params': HISTOGRAM_PARAMS, - }, - 'server_config': { - 'server_type': 'ASYNC_GENERIC_SERVER', - 'security_params': secargs, - 'core_limit': 1, - 'async_server_threads': 1, - 'payload_config': EMPTY_GENERIC_PAYLOAD, - }, - 'warmup_seconds': WARMUP_SECONDS, - 'benchmark_seconds': BENCHMARK_SECONDS - } - yield { - 'name': 'cpp_generic_async_streaming_qps_unconstrained_%s' - % secstr, - 'num_servers': 1, - 'num_clients': 0, - 'client_config': { - 'client_type': 'ASYNC_CLIENT', - 'security_params': secargs, - 'outstanding_rpcs_per_channel': DEEP, - 'client_channels': WIDE, - 'async_client_threads': 0, - 'rpc_type': 'STREAMING', - 'load_params': { - 'closed_loop': {} - }, - 'payload_config': EMPTY_GENERIC_PAYLOAD, - 'histogram_params': HISTOGRAM_PARAMS, - }, - 'server_config': { - 'server_type': 'ASYNC_GENERIC_SERVER', - 'security_params': secargs, - 'core_limit': SINGLE_MACHINE_CORES/2, - 'async_server_threads': 0, - 'payload_config': EMPTY_GENERIC_PAYLOAD, - }, - 'warmup_seconds': WARMUP_SECONDS, - 'benchmark_seconds': BENCHMARK_SECONDS - } - yield { - 'name': 'cpp_generic_async_streaming_qps_one_server_core_%s' - % secstr, - 'num_servers': 1, - 'num_clients': 0, - 'client_config': { - 'client_type': 'ASYNC_CLIENT', - 'security_params': secargs, - 'outstanding_rpcs_per_channel': DEEP, - 'client_channels': WIDE, - 'async_client_threads': 0, - 'rpc_type': 'STREAMING', - 'load_params': { - 'closed_loop': {} - }, - 'payload_config': EMPTY_GENERIC_PAYLOAD, - 'histogram_params': HISTOGRAM_PARAMS, - }, - 'server_config': { - 'server_type': 'ASYNC_GENERIC_SERVER', - 'security_params': secargs, - 'core_limit': 1, - 'async_server_threads': 1, - 'payload_config': EMPTY_GENERIC_PAYLOAD, - }, - 'warmup_seconds': WARMUP_SECONDS, - 'benchmark_seconds': BENCHMARK_SECONDS - } - yield { - 'name': 'cpp_protobuf_async_streaming_qps_unconstrained_%s' - % secstr, - 'num_servers': 1, - 'num_clients': 0, - 'client_config': { - 'client_type': 'ASYNC_CLIENT', - 'security_params': secargs, - 'outstanding_rpcs_per_channel': DEEP, - 'client_channels': WIDE, - 'async_client_threads': 0, - 'rpc_type': 'STREAMING', - 'load_params': { - 'closed_loop': {} - }, - 'payload_config': EMPTY_PROTO_PAYLOAD, - 'histogram_params': HISTOGRAM_PARAMS, - }, - 'server_config': { - 'server_type': 'ASYNC_SERVER', - 'security_params': secargs, - 'core_limit': SINGLE_MACHINE_CORES/2, - 'async_server_threads': 0, - }, - 'warmup_seconds': WARMUP_SECONDS, - 'benchmark_seconds': BENCHMARK_SECONDS - } - yield { - 'name': 'cpp_protobuf_async_streaming_ping_pong_%s' - % secstr, - 'num_servers': 1, - 'num_clients': 1, - 'client_config': { - 'client_type': 'ASYNC_CLIENT', - 'security_params': secargs, - 'outstanding_rpcs_per_channel': 1, - 'client_channels': 1, - 'async_client_threads': 1, - 'rpc_type': 'STREAMING', - 'load_params': { - 'closed_loop': {} - }, - 'payload_config': EMPTY_PROTO_PAYLOAD, - 'histogram_params': HISTOGRAM_PARAMS, - }, - 'server_config': { - 'server_type': 'ASYNC_SERVER', - 'security_params': secargs, - 'core_limit': 1, - 'async_server_threads': 1, - }, - 'warmup_seconds': WARMUP_SECONDS, - 'benchmark_seconds': BENCHMARK_SECONDS - } - yield { - 'name': 'cpp_protobuf_sync_unary_ping_pong_%s' - % secstr, - 'num_servers': 1, - 'num_clients': 1, - 'client_config': { - 'client_type': 'SYNC_CLIENT', - 'security_params': secargs, - 'outstanding_rpcs_per_channel': 1, - 'client_channels': 1, - 'async_client_threads': 0, - 'rpc_type': 'UNARY', - 'load_params': { - 'closed_loop': {} - }, - 'payload_config': EMPTY_PROTO_PAYLOAD, - 'histogram_params': HISTOGRAM_PARAMS, - }, - 'server_config': { - 'server_type': 'SYNC_SERVER', - 'security_params': secargs, - 'core_limit': 1, - 'async_server_threads': 0, - }, - 'warmup_seconds': WARMUP_SECONDS, - 'benchmark_seconds': BENCHMARK_SECONDS - } - yield { - 'name': 'cpp_protobuf_async_unary_ping_pong_%s' - % secstr, - 'num_servers': 1, - 'num_clients': 1, - 'client_config': { - 'client_type': 'ASYNC_CLIENT', - 'security_params': secargs, - 'outstanding_rpcs_per_channel': 1, - 'client_channels': 1, - 'async_client_threads': 1, - 'rpc_type': 'UNARY', - 'load_params': { - 'closed_loop': {} - }, - 'payload_config': EMPTY_PROTO_PAYLOAD, - 'histogram_params': HISTOGRAM_PARAMS, - }, - 'server_config': { - 'server_type': 'ASYNC_SERVER', - 'security_params': secargs, - 'core_limit': 1, - 'async_server_threads': 1, - }, - 'warmup_seconds': WARMUP_SECONDS, - 'benchmark_seconds': BENCHMARK_SECONDS - } + secstr = 'secure' if secure else 'insecure' + smoketest_categories = [SMOKETEST] if secure else None + + yield _ping_pong_scenario( + 'cpp_generic_async_streaming_ping_pong_%s' % secstr, rpc_type='STREAMING', + client_type='ASYNC_CLIENT', server_type='ASYNC_GENERIC_SERVER', + use_generic_payload=True, server_core_limit=1, async_server_threads=1, + secure=secure, + categories=smoketest_categories) + + yield _ping_pong_scenario( + 'cpp_protobuf_async_streaming_ping_pong_%s' % secstr, rpc_type='STREAMING', + client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', + server_core_limit=1, async_server_threads=1, + secure=secure) + + yield _ping_pong_scenario( + 'cpp_protobuf_async_unary_ping_pong_%s' % secstr, rpc_type='UNARY', + client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', + server_core_limit=1, async_server_threads=1, + secure=secure, + categories=smoketest_categories) + + yield _ping_pong_scenario( + 'cpp_protobuf_sync_unary_ping_pong_%s' % secstr, rpc_type='UNARY', + client_type='SYNC_CLIENT', server_type='SYNC_SERVER', + server_core_limit=1, async_server_threads=1, + secure=secure) + + yield _ping_pong_scenario( + 'cpp_protobuf_async_unary_qps_unconstrained_%s' % secstr, rpc_type='UNARY', + client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', + unconstrained_client='async', + secure=secure, + categories=smoketest_categories) + + yield _ping_pong_scenario( + 'cpp_protobuf_async_streaming_qps_unconstrained_%s' % secstr, rpc_type='STREAMING', + client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', + unconstrained_client='async', + secure=secure) + + yield _ping_pong_scenario( + 'cpp_generic_async_streaming_qps_unconstrained_%s' % secstr, rpc_type='STREAMING', + client_type='ASYNC_CLIENT', server_type='ASYNC_GENERIC_SERVER', + unconstrained_client='async', use_generic_payload=True, + secure=secure, + categories=smoketest_categories) + + yield _ping_pong_scenario( + 'cpp_generic_async_streaming_qps_one_server_core_%s' % secstr, rpc_type='STREAMING', + client_type='ASYNC_CLIENT', server_type='ASYNC_GENERIC_SERVER', + unconstrained_client='async', use_generic_payload=True, + server_core_limit=1, async_server_threads=1, + secure=secure) def __str__(self): return 'c++' @@ -299,113 +252,62 @@ class CSharpLanguage: return 100 def scenarios(self): - secargs = SECURE_SECARGS - yield { - 'name': 'csharp_generic_async_streaming_ping_pong', - 'num_servers': 1, - 'num_clients': 1, - 'client_config': { - 'client_type': 'ASYNC_CLIENT', - 'security_params': secargs, - 'outstanding_rpcs_per_channel': 1, - 'client_channels': 1, - 'async_client_threads': 1, - 'rpc_type': 'STREAMING', - 'load_params': { - 'closed_loop': {} - }, - 'payload_config': EMPTY_GENERIC_PAYLOAD, - 'histogram_params': HISTOGRAM_PARAMS, - }, - 'server_config': { - 'server_type': 'ASYNC_GENERIC_SERVER', - 'security_params': secargs, - 'core_limit': 0, - 'async_server_threads': 0, - 'payload_config': EMPTY_GENERIC_PAYLOAD, - }, - 'warmup_seconds': WARMUP_SECONDS, - 'benchmark_seconds': BENCHMARK_SECONDS - } - yield { - 'name': 'csharp_protobuf_async_unary_ping_pong', - 'num_servers': 1, - 'num_clients': 1, - 'client_config': { - 'client_type': 'ASYNC_CLIENT', - 'security_params': secargs, - 'outstanding_rpcs_per_channel': 1, - 'client_channels': 1, - 'async_client_threads': 1, - 'rpc_type': 'UNARY', - 'load_params': { - 'closed_loop': {} - }, - 'payload_config': EMPTY_PROTO_PAYLOAD, - 'histogram_params': HISTOGRAM_PARAMS, - }, - 'server_config': { - 'server_type': 'ASYNC_SERVER', - 'security_params': secargs, - 'core_limit': 0, - 'async_server_threads': 0, - }, - 'warmup_seconds': WARMUP_SECONDS, - 'benchmark_seconds': BENCHMARK_SECONDS - } - yield { - 'name': 'csharp_protobuf_sync_to_async_unary_ping_pong', - 'num_servers': 1, - 'num_clients': 1, - 'client_config': { - 'client_type': 'SYNC_CLIENT', - 'security_params': secargs, - 'outstanding_rpcs_per_channel': 1, - 'client_channels': 1, - 'async_client_threads': 1, - 'rpc_type': 'UNARY', - 'load_params': { - 'closed_loop': {} - }, - 'payload_config': EMPTY_PROTO_PAYLOAD, - 'histogram_params': HISTOGRAM_PARAMS, - }, - 'server_config': { - 'server_type': 'ASYNC_SERVER', - 'security_params': secargs, - 'core_limit': 0, - 'async_server_threads': 0, - }, - 'warmup_seconds': WARMUP_SECONDS, - 'benchmark_seconds': BENCHMARK_SECONDS - } - yield { - 'name': 'csharp_to_cpp_protobuf_sync_unary_ping_pong', - 'num_servers': 1, - 'num_clients': 1, - 'client_config': { - 'client_type': 'SYNC_CLIENT', - 'security_params': secargs, - 'outstanding_rpcs_per_channel': 1, - 'client_channels': 1, - 'async_client_threads': 1, - 'rpc_type': 'UNARY', - 'load_params': { - 'closed_loop': {} - }, - 'payload_config': EMPTY_PROTO_PAYLOAD, - 'histogram_params': HISTOGRAM_PARAMS, - }, - 'server_config': { - 'server_type': 'SYNC_SERVER', - 'security_params': secargs, - 'core_limit': 1, - 'async_server_threads': 1, - }, - 'warmup_seconds': WARMUP_SECONDS, - 'benchmark_seconds': BENCHMARK_SECONDS, - 'SERVER_LANGUAGE': 'c++' # recognized by run_performance_tests.py - } + yield _ping_pong_scenario( + 'csharp_generic_async_streaming_ping_pong', rpc_type='STREAMING', + client_type='ASYNC_CLIENT', server_type='ASYNC_GENERIC_SERVER', + use_generic_payload=True, + categories=[SMOKETEST]) + + yield _ping_pong_scenario( + 'csharp_protobuf_async_streaming_ping_pong', rpc_type='STREAMING', + client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER') + + yield _ping_pong_scenario( + 'csharp_protobuf_async_unary_ping_pong', rpc_type='UNARY', + client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', + categories=[SMOKETEST]) + + yield _ping_pong_scenario( + 'csharp_protobuf_sync_to_async_unary_ping_pong', rpc_type='UNARY', + client_type='SYNC_CLIENT', server_type='ASYNC_SERVER') + + yield _ping_pong_scenario( + 'csharp_protobuf_async_unary_qps_unconstrained', rpc_type='UNARY', + client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', + unconstrained_client='async', + categories=[SMOKETEST]) + + yield _ping_pong_scenario( + 'csharp_protobuf_async_streaming_qps_unconstrained', rpc_type='STREAMING', + client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', + unconstrained_client='async') + + yield _ping_pong_scenario( + 'csharp_to_cpp_protobuf_sync_unary_ping_pong', rpc_type='UNARY', + client_type='SYNC_CLIENT', server_type='SYNC_SERVER', + server_language='c++', server_core_limit=1, async_server_threads=1, + categories=[SMOKETEST]) + + yield _ping_pong_scenario( + 'csharp_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) + + yield _ping_pong_scenario( + 'csharp_to_cpp_protobuf_async_unary_qps_unconstrained', rpc_type='UNARY', + client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', + unconstrained_client='async', server_language='c++') + + yield _ping_pong_scenario( + 'csharp_to_cpp_protobuf_sync_to_async_unary_qps_unconstrained', rpc_type='UNARY', + client_type='SYNC_CLIENT', server_type='ASYNC_SERVER', + unconstrained_client='sync', server_language='c++') + + yield _ping_pong_scenario( + 'cpp_to_csharp_protobuf_async_unary_qps_unconstrained', rpc_type='UNARY', + client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', + unconstrained_client='async', client_language='c++') + def __str__(self): return 'csharp' @@ -424,34 +326,45 @@ class NodeLanguage: return 200 def scenarios(self): - # TODO(jtattermusch): add more scenarios - secargs = SECURE_SECARGS - yield { - 'name': 'node_protobuf_unary_ping_pong', - 'num_servers': 1, - 'num_clients': 1, - 'client_config': { - 'client_type': 'ASYNC_CLIENT', - 'security_params': secargs, - 'outstanding_rpcs_per_channel': 1, - 'client_channels': 1, - 'async_client_threads': 1, - 'rpc_type': 'UNARY', - 'load_params': { - 'closed_loop': {} - }, - 'payload_config': EMPTY_PROTO_PAYLOAD, - 'histogram_params': HISTOGRAM_PARAMS, - }, - 'server_config': { - 'server_type': 'ASYNC_SERVER', - 'security_params': secargs, - 'core_limit': 0, - 'async_server_threads': 1, - }, - 'warmup_seconds': WARMUP_SECONDS, - 'benchmark_seconds': BENCHMARK_SECONDS - } + # 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_protobuf_unary_ping_pong', rpc_type='UNARY', + client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', + categories=[SMOKETEST]) + + yield _ping_pong_scenario( + 'node_protobuf_async_unary_qps_unconstrained', rpc_type='UNARY', + client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', + unconstrained_client='async', + categories=[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' @@ -468,114 +381,47 @@ class PythonLanguage: return 500 def scenarios(self): - yield { - 'name': 'python_to_cpp_protobuf_streaming_ping_pong', - 'num_servers': 1, - 'num_clients': 1, - 'client_config': { - 'client_type': 'ASYNC_CLIENT', - 'security_params': SECURE_SECARGS, - 'outstanding_rpcs_per_channel': 1, - 'client_channels': 1, - 'async_client_threads': 1, - 'rpc_type': 'STREAMING', - 'load_params': { - 'closed_loop': {} - }, - 'payload_config': EMPTY_PROTO_PAYLOAD, - 'histogram_params': HISTOGRAM_PARAMS, - }, - 'server_config': { - 'server_type': 'SYNC_SERVER', - 'security_params': SECURE_SECARGS, - 'core_limit': 0, - 'async_server_threads': 1, - }, - 'warmup_seconds': WARMUP_SECONDS, - 'benchmark_seconds': BENCHMARK_SECONDS, - 'SERVER_LANGUAGE': 'c++' - } - yield { - 'name': 'python_protobuf_sync_unary_ping_pong', - 'num_servers': 1, - 'num_clients': 1, - 'client_config': { - 'client_type': 'SYNC_CLIENT', - 'security_params': SECURE_SECARGS, - 'outstanding_rpcs_per_channel': 1, - 'client_channels': 1, - 'async_client_threads': 1, - 'rpc_type': 'UNARY', - 'load_params': { - 'closed_loop': {} - }, - 'payload_config': EMPTY_PROTO_PAYLOAD, - 'histogram_params': HISTOGRAM_PARAMS, - }, - 'server_config': { - 'server_type': 'SYNC_SERVER', - 'security_params': SECURE_SECARGS, - 'core_limit': 0, - 'async_server_threads': 1, - }, - 'warmup_seconds': WARMUP_SECONDS, - 'benchmark_seconds': BENCHMARK_SECONDS, - } - yield { - 'name': 'python_protobuf_async_unary_ping_pong', - 'num_servers': 1, - 'num_clients': 1, - 'client_config': { - 'client_type': 'ASYNC_CLIENT', - 'security_params': SECURE_SECARGS, - 'outstanding_rpcs_per_channel': 1, - 'client_channels': 1, - 'async_client_threads': 1, - 'rpc_type': 'UNARY', - 'load_params': { - 'closed_loop': {} - }, - 'payload_config': EMPTY_PROTO_PAYLOAD, - 'histogram_params': HISTOGRAM_PARAMS, - }, - 'server_config': { - 'server_type': 'SYNC_SERVER', - 'security_params': SECURE_SECARGS, - 'core_limit': 0, - 'async_server_threads': 1, - }, - 'warmup_seconds': WARMUP_SECONDS, - 'benchmark_seconds': BENCHMARK_SECONDS, - } - yield { - 'name': 'python_to_cpp_single_channel_throughput', - 'num_servers': 1, - 'num_clients': 1, - 'client_config': { - 'client_type': 'ASYNC_CLIENT', - 'security_params': SECURE_SECARGS, - 'outstanding_rpcs_per_channel': 1, - 'client_channels': 1, - 'async_client_threads': 1, - 'rpc_type': 'STREAMING', - 'load_params': { - 'closed_loop': {} - }, - 'payload_config': BIG_GENERIC_PAYLOAD, - 'histogram_params': HISTOGRAM_PARAMS, - }, - 'server_config': { - 'server_type': 'ASYNC_GENERIC_SERVER', - 'security_params': SECURE_SECARGS, - 'core_limit': SINGLE_MACHINE_CORES/2, - 'async_server_threads': 1, - 'payload_config': BIG_GENERIC_PAYLOAD, - }, - 'warmup_seconds': WARMUP_SECONDS, - 'benchmark_seconds': BENCHMARK_SECONDS, - 'SERVER_LANGUAGE': 'c++' - } - + # TODO(issue #6522): Empty streaming requests does not work for python + #yield _ping_pong_scenario( + # 'python_generic_async_streaming_ping_pong', rpc_type='STREAMING', + # client_type='ASYNC_CLIENT', server_type='ASYNC_GENERIC_SERVER', + # use_generic_payload=True, + # categories=[SMOKETEST]) + + yield _ping_pong_scenario( + 'python_protobuf_async_streaming_ping_pong', rpc_type='STREAMING', + client_type='ASYNC_CLIENT', server_type='SYNC_SERVER') + + yield _ping_pong_scenario( + 'python_protobuf_async_unary_ping_pong', rpc_type='UNARY', + client_type='ASYNC_CLIENT', server_type='SYNC_SERVER') + + yield _ping_pong_scenario( + 'python_protobuf_sync_unary_ping_pong', rpc_type='UNARY', + client_type='SYNC_CLIENT', server_type='SYNC_SERVER', + categories=[SMOKETEST]) + + yield _ping_pong_scenario( + 'python_protobuf_sync_unary_qps_unconstrained', rpc_type='UNARY', + client_type='SYNC_CLIENT', server_type='SYNC_SERVER', + unconstrained_client='sync') + + yield _ping_pong_scenario( + 'python_protobuf_async_streaming_qps_unconstrained', rpc_type='STREAMING', + client_type='ASYNC_CLIENT', server_type='SYNC_SERVER', + unconstrained_client='async') + + yield _ping_pong_scenario( + 'python_to_cpp_protobuf_sync_unary_ping_pong', rpc_type='UNARY', + client_type='SYNC_CLIENT', server_type='SYNC_SERVER', + server_language='c++', server_core_limit=1, async_server_threads=1, + categories=[SMOKETEST]) + + yield _ping_pong_scenario( + 'python_to_cpp_protobuf_sync_streaming_ping_pong', rpc_type='STREAMING', + client_type='SYNC_CLIENT', server_type='SYNC_SERVER', + server_language='c++', server_core_limit=1, async_server_threads=1) + def __str__(self): return 'python' @@ -592,34 +438,35 @@ class RubyLanguage: return 300 def scenarios(self): - # TODO(jtattermusch): add more scenarios - secargs = SECURE_SECARGS - yield { - 'name': 'ruby_protobuf_unary_ping_pong', - 'num_servers': 1, - 'num_clients': 1, - 'client_config': { - 'client_type': 'SYNC_CLIENT', - 'security_params': secargs, - 'outstanding_rpcs_per_channel': 1, - 'client_channels': 1, - 'async_client_threads': 1, - 'rpc_type': 'UNARY', - 'load_params': { - 'closed_loop': {} - }, - 'payload_config': EMPTY_PROTO_PAYLOAD, - 'histogram_params': HISTOGRAM_PARAMS, - }, - 'server_config': { - 'server_type': 'SYNC_SERVER', - 'security_params': secargs, - 'core_limit': 0, - 'async_server_threads': 1, - }, - 'warmup_seconds': WARMUP_SECONDS, - 'benchmark_seconds': BENCHMARK_SECONDS - } + yield _ping_pong_scenario( + 'ruby_protobuf_sync_streaming_ping_pong', rpc_type='STREAMING', + client_type='SYNC_CLIENT', server_type='SYNC_SERVER', + categories=[SMOKETEST]) + + yield _ping_pong_scenario( + 'ruby_protobuf_unary_ping_pong', rpc_type='UNARY', + client_type='SYNC_CLIENT', server_type='SYNC_SERVER', + categories=[SMOKETEST]) + + yield _ping_pong_scenario( + 'ruby_protobuf_sync_unary_qps_unconstrained', rpc_type='UNARY', + client_type='SYNC_CLIENT', server_type='SYNC_SERVER', + unconstrained_client='sync') + + yield _ping_pong_scenario( + 'ruby_protobuf_sync_streaming_qps_unconstrained', rpc_type='STREAMING', + client_type='SYNC_CLIENT', server_type='SYNC_SERVER', + unconstrained_client='sync') + + yield _ping_pong_scenario( + 'ruby_to_cpp_protobuf_sync_unary_ping_pong', rpc_type='UNARY', + client_type='SYNC_CLIENT', server_type='SYNC_SERVER', + server_language='c++', server_core_limit=1, async_server_threads=1) + + yield _ping_pong_scenario( + 'ruby_to_cpp_protobuf_sync_streaming_ping_pong', rpc_type='STREAMING', + client_type='SYNC_CLIENT', server_type='SYNC_SERVER', + server_language='c++', server_core_limit=1, async_server_threads=1) def __str__(self): return 'ruby' @@ -638,46 +485,137 @@ class JavaLanguage: return 400 def scenarios(self): - # TODO(jtattermusch): add more scenarios for secure in [True, False]: - if secure: - secstr = 'secure' - secargs = SECURE_SECARGS - else: - secstr = 'insecure' - secargs = None - - yield { - 'name': 'java_protobuf_unary_ping_pong_%s' % secstr, - 'num_servers': 1, - 'num_clients': 1, - 'client_config': { - 'client_type': 'SYNC_CLIENT', - 'security_params': secargs, - 'outstanding_rpcs_per_channel': 1, - 'client_channels': 1, - 'async_client_threads': 1, - 'rpc_type': 'UNARY', - 'load_params': { - 'closed_loop': {} - }, - 'payload_config': EMPTY_PROTO_PAYLOAD, - 'histogram_params': HISTOGRAM_PARAMS, - }, - 'server_config': { - 'server_type': 'SYNC_SERVER', - 'security_params': secargs, - 'core_limit': 0, - 'async_server_threads': 1, - }, - 'warmup_seconds': JAVA_WARMUP_SECONDS, - 'benchmark_seconds': BENCHMARK_SECONDS - } + secstr = 'secure' if secure else 'insecure' + smoketest_categories = [SMOKETEST] if secure else None + + yield _ping_pong_scenario( + 'java_generic_async_streaming_ping_pong_%s' % secstr, rpc_type='STREAMING', + client_type='ASYNC_CLIENT', server_type='ASYNC_GENERIC_SERVER', + use_generic_payload=True, async_server_threads=1, + secure=secure, warmup_seconds=JAVA_WARMUP_SECONDS, + categories=smoketest_categories) + + yield _ping_pong_scenario( + 'java_protobuf_async_streaming_ping_pong_%s' % secstr, rpc_type='STREAMING', + client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', + async_server_threads=1, + secure=secure, warmup_seconds=JAVA_WARMUP_SECONDS) + + yield _ping_pong_scenario( + 'java_protobuf_async_unary_ping_pong_%s' % secstr, rpc_type='UNARY', + client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', + async_server_threads=1, + secure=secure, warmup_seconds=JAVA_WARMUP_SECONDS, + categories=smoketest_categories) + + yield _ping_pong_scenario( + 'java_protobuf_unary_ping_pong_%s' % secstr, rpc_type='UNARY', + client_type='SYNC_CLIENT', server_type='SYNC_SERVER', + async_server_threads=1, + secure=secure, warmup_seconds=JAVA_WARMUP_SECONDS) + + yield _ping_pong_scenario( + 'java_protobuf_async_unary_qps_unconstrained_%s' % secstr, rpc_type='UNARY', + client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', + unconstrained_client='async', + secure=secure, warmup_seconds=JAVA_WARMUP_SECONDS, + categories=smoketest_categories) + + yield _ping_pong_scenario( + 'java_protobuf_async_streaming_qps_unconstrained_%s' % secstr, rpc_type='STREAMING', + client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', + unconstrained_client='async', + secure=secure, warmup_seconds=JAVA_WARMUP_SECONDS) + + yield _ping_pong_scenario( + 'java_generic_async_streaming_qps_unconstrained_%s' % secstr, rpc_type='STREAMING', + client_type='ASYNC_CLIENT', server_type='ASYNC_GENERIC_SERVER', + unconstrained_client='async', use_generic_payload=True, + secure=secure, warmup_seconds=JAVA_WARMUP_SECONDS) + + yield _ping_pong_scenario( + 'java_generic_async_streaming_qps_one_server_core_%s' % secstr, rpc_type='STREAMING', + client_type='ASYNC_CLIENT', server_type='ASYNC_GENERIC_SERVER', + unconstrained_client='async', use_generic_payload=True, + async_server_threads=1, + secure=secure, warmup_seconds=JAVA_WARMUP_SECONDS) + + # TODO(jtattermusch): add scenarios java vs C++ def __str__(self): return 'java' +class GoLanguage: + + def __init__(self): + pass + self.safename = str(self) + + def worker_cmdline(self): + return ['tools/run_tests/performance/run_worker_go.sh'] + + def worker_port_offset(self): + return 600 + + def scenarios(self): + for secure in [True, False]: + secstr = 'secure' if secure else 'insecure' + smoketest_categories = [SMOKETEST] if secure else None + + # ASYNC_GENERIC_SERVER for Go actually uses a sync streaming server, + # but that's mostly because of lack of better name of the enum value. + yield _ping_pong_scenario( + 'go_generic_sync_streaming_ping_pong_%s' % secstr, rpc_type='STREAMING', + client_type='SYNC_CLIENT', server_type='ASYNC_GENERIC_SERVER', + use_generic_payload=True, async_server_threads=1, + secure=secure, + categories=smoketest_categories) + + yield _ping_pong_scenario( + 'go_protobuf_sync_streaming_ping_pong_%s' % secstr, rpc_type='STREAMING', + client_type='SYNC_CLIENT', server_type='SYNC_SERVER', + async_server_threads=1, + secure=secure) + + yield _ping_pong_scenario( + 'go_protobuf_sync_unary_ping_pong_%s' % secstr, rpc_type='UNARY', + client_type='SYNC_CLIENT', server_type='SYNC_SERVER', + async_server_threads=1, + secure=secure, + categories=smoketest_categories) + + # unconstrained_client='async' is intended (client uses goroutines) + yield _ping_pong_scenario( + 'go_protobuf_sync_unary_qps_unconstrained_%s' % secstr, rpc_type='UNARY', + client_type='SYNC_CLIENT', server_type='SYNC_SERVER', + unconstrained_client='async', + secure=secure, + categories=smoketest_categories) + + # unconstrained_client='async' is intended (client uses goroutines) + yield _ping_pong_scenario( + 'go_protobuf_sync_streaming_qps_unconstrained_%s' % secstr, rpc_type='STREAMING', + client_type='SYNC_CLIENT', server_type='SYNC_SERVER', + unconstrained_client='async', + secure=secure) + + # unconstrained_client='async' is intended (client uses goroutines) + # ASYNC_GENERIC_SERVER for Go actually uses a sync streaming server, + # but that's mostly because of lack of better name of the enum value. + yield _ping_pong_scenario( + 'go_generic_sync_streaming_qps_unconstrained_%s' % secstr, rpc_type='STREAMING', + client_type='SYNC_CLIENT', server_type='ASYNC_GENERIC_SERVER', + unconstrained_client='async', use_generic_payload=True, + secure=secure) + + # TODO(jtattermusch): add scenarios go vs C++ + + def __str__(self): + return 'go' + + LANGUAGES = { 'c++' : CXXLanguage(), 'csharp' : CSharpLanguage(), @@ -685,4 +623,5 @@ LANGUAGES = { 'ruby' : RubyLanguage(), 'java' : JavaLanguage(), 'python' : PythonLanguage(), + 'go' : GoLanguage(), } diff --git a/tools/run_tests/post_tests_csharp.bat b/tools/run_tests/post_tests_csharp.bat index 7851b9137acc9540f9c63609370e30d318508525..0d49a00b2aa37bb2804edfa25d8230a94a26b283 100644 --- a/tools/run_tests/post_tests_csharp.bat +++ b/tools/run_tests/post_tests_csharp.bat @@ -1,3 +1,32 @@ +@rem Copyright 2016, Google Inc. +@rem All rights reserved. +@rem +@rem Redistribution and use in source and binary forms, with or without +@rem modification, are permitted provided that the following conditions are +@rem met: +@rem +@rem * Redistributions of source code must retain the above copyright +@rem notice, this list of conditions and the following disclaimer. +@rem * Redistributions in binary form must reproduce the above +@rem copyright notice, this list of conditions and the following disclaimer +@rem in the documentation and/or other materials provided with the +@rem distribution. +@rem * Neither the name of Google Inc. nor the names of its +@rem contributors may be used to endorse or promote products derived from +@rem this software without specific prior written permission. +@rem +@rem THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +@rem "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +@rem LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +@rem A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +@rem OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +@rem SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +@rem LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +@rem DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +@rem THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +@rem (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +@rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + @rem Runs C# tests for given assembly from command line. The Grpc.sln solution needs to be built before running the tests. setlocal diff --git a/tools/run_tests/pre_build_c.bat b/tools/run_tests/pre_build_c.bat index f0449f3c424af08e7a2c01ed2f215fc4033db451..e4ab69384c2a754bb4ff646be508e1a4a28c06c6 100644 --- a/tools/run_tests/pre_build_c.bat +++ b/tools/run_tests/pre_build_c.bat @@ -1,3 +1,32 @@ +@rem Copyright 2016, Google Inc. +@rem All rights reserved. +@rem +@rem Redistribution and use in source and binary forms, with or without +@rem modification, are permitted provided that the following conditions are +@rem met: +@rem +@rem * Redistributions of source code must retain the above copyright +@rem notice, this list of conditions and the following disclaimer. +@rem * Redistributions in binary form must reproduce the above +@rem copyright notice, this list of conditions and the following disclaimer +@rem in the documentation and/or other materials provided with the +@rem distribution. +@rem * Neither the name of Google Inc. nor the names of its +@rem contributors may be used to endorse or promote products derived from +@rem this software without specific prior written permission. +@rem +@rem THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +@rem "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +@rem LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +@rem A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +@rem OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +@rem SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +@rem LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +@rem DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +@rem THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +@rem (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +@rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + @rem Performs nuget restore step for C/C++. setlocal diff --git a/tools/run_tests/pre_build_csharp.bat b/tools/run_tests/pre_build_csharp.bat index 853a8f4325542c6529013912556c9ed22ae5d1bd..e7131d504c8cdb26a42a593860999e1ccfd1ee2e 100644 --- a/tools/run_tests/pre_build_csharp.bat +++ b/tools/run_tests/pre_build_csharp.bat @@ -1,3 +1,32 @@ +@rem Copyright 2016, Google Inc. +@rem All rights reserved. +@rem +@rem Redistribution and use in source and binary forms, with or without +@rem modification, are permitted provided that the following conditions are +@rem met: +@rem +@rem * Redistributions of source code must retain the above copyright +@rem notice, this list of conditions and the following disclaimer. +@rem * Redistributions in binary form must reproduce the above +@rem copyright notice, this list of conditions and the following disclaimer +@rem in the documentation and/or other materials provided with the +@rem distribution. +@rem * Neither the name of Google Inc. nor the names of its +@rem contributors may be used to endorse or promote products derived from +@rem this software without specific prior written permission. +@rem +@rem THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +@rem "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +@rem LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +@rem A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +@rem OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +@rem SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +@rem LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +@rem DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +@rem THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +@rem (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +@rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + @rem Performs nuget restore step for C#. setlocal diff --git a/tools/run_tests/run_interop_tests.py b/tools/run_tests/run_interop_tests.py index e813473421d529852b37479755dba2b263961840..edbdf05e2a24937b6a281fe0fe926ea0458a02d2 100755 --- a/tools/run_tests/run_interop_tests.py +++ b/tools/run_tests/run_interop_tests.py @@ -82,10 +82,10 @@ class CXXLanguage: return {} def unimplemented_test_cases(self): - return _SKIP_ADVANCED + _SKIP_COMPRESSION + return _SKIP_ADVANCED def unimplemented_test_cases_server(self): - return _SKIP_ADVANCED + _SKIP_COMPRESSION + return _SKIP_ADVANCED def __str__(self): return 'c++' diff --git a/tools/run_tests/run_performance_tests.py b/tools/run_tests/run_performance_tests.py index 5519666e847a8dbe7f8f37d4a4c93d7a1111888b..181d62bf4a32c5fc4b7833f02b318fd41f59af43 100755 --- a/tools/run_tests/run_performance_tests.py +++ b/tools/run_tests/run_performance_tests.py @@ -89,7 +89,7 @@ def create_qpsworker_job(language, shortname=None, jobspec = jobset.JobSpec( cmdline=cmdline, shortname=shortname, - timeout_seconds=30*60) + timeout_seconds=2*60*60) return QpsWorkerJob(jobspec, language, host_and_port) @@ -131,6 +131,36 @@ def create_quit_jobspec(workers, remote_host=None): verbose_success=True) +def create_netperf_jobspec(server_host='localhost', client_host=None, + bq_result_table=None): + """Runs netperf benchmark.""" + cmd = 'NETPERF_SERVER_HOST="%s" ' % server_host + if bq_result_table: + cmd += 'BQ_RESULT_TABLE="%s" ' % bq_result_table + if client_host: + # If netperf is running remotely, the env variables populated by Jenkins + # won't be available on the client, but we need them for uploading results + # to BigQuery. + jenkins_job_name = os.getenv('JOB_NAME') + if jenkins_job_name: + cmd += 'JOB_NAME="%s" ' % jenkins_job_name + jenkins_build_number = os.getenv('BUILD_NUMBER') + if jenkins_build_number: + cmd += 'BUILD_NUMBER="%s" ' % jenkins_build_number + + cmd += 'tools/run_tests/performance/run_netperf.sh' + if client_host: + user_at_host = '%s@%s' % (_REMOTE_HOST_USERNAME, client_host) + cmd = 'ssh %s "cd ~/performance_workspace/grpc/ && "%s' % (user_at_host, pipes.quote(cmd)) + + return jobset.JobSpec( + cmdline=[cmd], + shortname='netperf', + timeout_seconds=60, + shell=True, + verbose_success=True) + + def archive_repo(languages): """Archives local version of repo including submodules.""" cmdline=['tar', '-cf', '../grpc.tar', '../grpc/'] @@ -244,34 +274,65 @@ def start_qpsworkers(languages, worker_hosts): def create_scenarios(languages, workers_by_lang, remote_host=None, regex='.*', - bq_result_table=None): + category='all', bq_result_table=None, + netperf=False, netperf_hosts=[]): """Create jobspecs for scenarios to run.""" all_workers = [worker for workers in workers_by_lang.values() for worker in workers] scenarios = [] + + if netperf: + if not netperf_hosts: + netperf_server='localhost' + netperf_client=None + elif len(netperf_hosts) == 1: + netperf_server=netperf_hosts[0] + netperf_client=netperf_hosts[0] + else: + netperf_server=netperf_hosts[0] + netperf_client=netperf_hosts[1] + scenarios.append(create_netperf_jobspec(server_host=netperf_server, + client_host=netperf_client, + bq_result_table=bq_result_table)) + for language in languages: for scenario_json in language.scenarios(): if re.search(args.regex, scenario_json['name']): - workers = workers_by_lang[str(language)] - # 'SERVER_LANGUAGE' is an indicator for this script to pick - # a server in different language. It doesn't belong to the Scenario - # schema, so we also need to remove it. - custom_server_lang = scenario_json.pop('SERVER_LANGUAGE', None) - if custom_server_lang: - if not workers_by_lang.get(custom_server_lang, []): - print 'Warning: Skipping scenario %s as' % scenario_json['name'] - print('SERVER_LANGUAGE is set to %s yet the language has ' - 'not been selected with -l' % custom_server_lang) - continue - for idx in range(0, scenario_json['num_servers']): - # replace first X workers by workers of a different language - workers[idx] = workers_by_lang[custom_server_lang][idx] - scenario = create_scenario_jobspec(scenario_json, - workers, - remote_host=remote_host, - bq_result_table=bq_result_table) - scenarios.append(scenario) + if category in scenario_json.get('CATEGORIES', []) or category == 'all': + workers = workers_by_lang[str(language)] + # 'SERVER_LANGUAGE' is an indicator for this script to pick + # a server in different language. + custom_server_lang = scenario_json.get('SERVER_LANGUAGE', None) + custom_client_lang = scenario_json.get('CLIENT_LANGUAGE', None) + scenario_json = scenario_config.remove_nonproto_fields(scenario_json) + if custom_server_lang and custom_client_lang: + raise Exception('Cannot set both custom CLIENT_LANGUAGE and SERVER_LANGUAGE' + 'in the same scenario') + if custom_server_lang: + if not workers_by_lang.get(custom_server_lang, []): + print 'Warning: Skipping scenario %s as' % scenario_json['name'] + print('SERVER_LANGUAGE is set to %s yet the language has ' + 'not been selected with -l' % custom_server_lang) + continue + for idx in range(0, scenario_json['num_servers']): + # replace first X workers by workers of a different language + workers[idx] = workers_by_lang[custom_server_lang][idx] + if custom_client_lang: + if not workers_by_lang.get(custom_client_lang, []): + print 'Warning: Skipping scenario %s as' % scenario_json['name'] + print('CLIENT_LANGUAGE is set to %s yet the language has ' + 'not been selected with -l' % custom_client_lang) + continue + for idx in range(scenario_json['num_servers'], len(workers)): + # replace all client workers by workers of a different language, + # leave num_server workers as they are server workers. + workers[idx] = workers_by_lang[custom_client_lang][idx] + scenario = create_scenario_jobspec(scenario_json, + workers, + remote_host=remote_host, + bq_result_table=bq_result_table) + scenarios.append(scenario) # the very last scenario requests shutting down the workers. scenarios.append(create_quit_jobspec(all_workers, remote_host=remote_host)) @@ -298,7 +359,7 @@ argp = argparse.ArgumentParser(description='Run performance tests.') argp.add_argument('-l', '--language', choices=['all'] + sorted(scenario_config.LANGUAGES.keys()), nargs='+', - default=['all'], + required=True, help='Languages to benchmark.') argp.add_argument('--remote_driver_host', default=None, @@ -311,6 +372,15 @@ argp.add_argument('-r', '--regex', default='.*', type=str, help='Regex to select scenarios to run.') argp.add_argument('--bq_result_table', default=None, type=str, help='Bigquery "dataset.table" to upload results to.') +argp.add_argument('--category', + choices=['smoketest','all'], + default='all', + help='Select a category of tests to run.') +argp.add_argument('--netperf', + default=False, + action='store_const', + const=True, + help='Run netperf benchmark as one of the scenarios.') args = argp.parse_args() @@ -354,7 +424,11 @@ try: workers_by_lang=worker_addresses, remote_host=args.remote_driver_host, regex=args.regex, - bq_result_table=args.bq_result_table) + category=args.category, + bq_result_table=args.bq_result_table, + netperf=args.netperf, + netperf_hosts=args.remote_worker_host) + if not scenarios: raise Exception('No scenarios to run') diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py index 37291f4d3fbcfd804e9c5d0e443e01cdc7e1f627..65596dea7f8136dd38e28c82d0b2a3d0415c07e1 100755 --- a/tools/run_tests/run_tests.py +++ b/tools/run_tests/run_tests.py @@ -153,52 +153,64 @@ class CLanguage(object): def test_specs(self): out = [] binaries = get_c_tests(self.args.travis, self.test_lang) + POLLING_STRATEGIES = { + 'windows': ['all'], + 'mac': ['all'], + 'posix': ['all'], + 'linux': ['poll', 'legacy'] + } for target in binaries: - if self.config.build_config in target['exclude_configs']: - continue - if self.platform == 'windows': - binary = 'vsprojects/%s%s/%s.exe' % ( - 'x64/' if self.args.arch == 'x64' else '', - _MSBUILD_CONFIG[self.config.build_config], - target['name']) - else: - binary = 'bins/%s/%s' % (self.config.build_config, target['name']) - if os.path.isfile(binary): - if 'gtest' in target and target['gtest']: - # here we parse the output of --gtest_list_tests to build up a - # complete list of the tests contained in a binary - # for each test, we then add a job to run, filtering for just that - # test - with open(os.devnull, 'w') as fnull: - tests = subprocess.check_output([binary, '--gtest_list_tests'], - stderr=fnull) - base = None - for line in tests.split('\n'): - i = line.find('#') - if i >= 0: line = line[:i] - if not line: continue - if line[0] != ' ': - base = line.strip() - else: - assert base is not None - assert line[1] == ' ' - test = base + line.strip() - cmdline = [binary] + ['--gtest_filter=%s' % test] - out.append(self.config.job_spec(cmdline, [binary], - shortname='%s:%s' % (binary, test), - cpu_cost=target['cpu_cost'], - environ={'GRPC_DEFAULT_SSL_ROOTS_FILE_PATH': - _ROOT + '/src/core/lib/tsi/test_creds/ca.pem'})) + polling_strategies = (POLLING_STRATEGIES[self.platform] + if target.get('uses_polling', True) + else ['all']) + for polling_strategy in polling_strategies: + env={'GRPC_DEFAULT_SSL_ROOTS_FILE_PATH': + _ROOT + '/src/core/lib/tsi/test_creds/ca.pem', + 'GRPC_POLL_STRATEGY': polling_strategy} + shortname_ext = '' if polling_strategy=='all' else ' polling=%s' % polling_strategy + if self.config.build_config in target['exclude_configs']: + continue + if self.platform == 'windows': + binary = 'vsprojects/%s%s/%s.exe' % ( + 'x64/' if self.args.arch == 'x64' else '', + _MSBUILD_CONFIG[self.config.build_config], + target['name']) else: - cmdline = [binary] + target['args'] - out.append(self.config.job_spec(cmdline, [binary], - shortname=target.get('shortname', ' '.join(cmdline)), - cpu_cost=target['cpu_cost'], - flaky=target.get('flaky', False), - environ={'GRPC_DEFAULT_SSL_ROOTS_FILE_PATH': - _ROOT + '/src/core/lib/tsi/test_creds/ca.pem'})) - elif self.args.regex == '.*' or self.platform == 'windows': - print '\nWARNING: binary not found, skipping', binary + binary = 'bins/%s/%s' % (self.config.build_config, target['name']) + if os.path.isfile(binary): + if 'gtest' in target and target['gtest']: + # here we parse the output of --gtest_list_tests to build up a + # complete list of the tests contained in a binary + # for each test, we then add a job to run, filtering for just that + # test + with open(os.devnull, 'w') as fnull: + tests = subprocess.check_output([binary, '--gtest_list_tests'], + stderr=fnull) + base = None + for line in tests.split('\n'): + i = line.find('#') + if i >= 0: line = line[:i] + if not line: continue + if line[0] != ' ': + base = line.strip() + else: + assert base is not None + assert line[1] == ' ' + test = base + line.strip() + cmdline = [binary] + ['--gtest_filter=%s' % test] + out.append(self.config.job_spec(cmdline, [binary], + shortname='%s:%s %s' % (binary, test, shortname_ext), + cpu_cost=target['cpu_cost'], + environ=env)) + else: + cmdline = [binary] + target['args'] + out.append(self.config.job_spec(cmdline, [binary], + shortname=' '.join(cmdline) + shortname_ext, + cpu_cost=target['cpu_cost'], + flaky=target.get('flaky', False), + environ=env)) + elif self.args.regex == '.*' or self.platform == 'windows': + print '\nWARNING: binary not found, skipping', binary return sorted(out) def make_targets(self): @@ -371,7 +383,9 @@ class PythonLanguage(object): with open('src/python/grpcio/tests/tests.json') as tests_json_file: tests_json = json.load(tests_json_file) environment = dict(_FORCE_ENVIRON_FOR_WRAPPERS) - environment['PYTHONPATH'] = os.path.abspath('src/python/gens') + environment['PYTHONPATH'] = '{}:{}'.format( + os.path.abspath('src/python/gens'), + os.path.abspath('src/python/grpcio_health_checking')) if self.config.build_config != 'gcov': return [self.config.job_spec( ['tools/run_tests/run_python.sh', self._tox_env], diff --git a/tools/run_tests/sanity/check_submodules.sh b/tools/run_tests/sanity/check_submodules.sh index 3349d28cf9e71cf2b63f001062439d983c2e3b8f..6e858fa9c92d124055fccfc4e255972c34ec4de5 100755 --- a/tools/run_tests/sanity/check_submodules.sh +++ b/tools/run_tests/sanity/check_submodules.sh @@ -45,7 +45,7 @@ cat << EOF | awk '{ print $1 }' | sort > $want_submodules 05b155ff59114735ec8cd089f669c4c3d8f59029 third_party/gflags (v2.1.0-45-g05b155f) c99458533a9b4c743ed51537e25989ea55944908 third_party/googletest (release-1.7.0) f8ac463766281625ad710900479130c7fcb4d63b third_party/nanopb (nanopb-0.3.4-29-gf8ac463) - d5fb408ddc281ffcadeb08699e65bb694656d0bd third_party/protobuf (v3.0.0-beta-2) + 3470b6895aa659b7559ed678e029a5338e535f14 third_party/protobuf (v3.0.0-beta-2-441-g3470b68) 50893291621658f355bc5b4d450a8d06a563053d third_party/zlib (v1.2.8) EOF diff --git a/tools/run_tests/sanity/sanity_tests.yaml b/tools/run_tests/sanity/sanity_tests.yaml index efc21e6591bef981661a56d6f2ecb40ff104dbdc..c5945c602f43631f46927f5821bb96059f1c65e6 100644 --- a/tools/run_tests/sanity/sanity_tests.yaml +++ b/tools/run_tests/sanity/sanity_tests.yaml @@ -10,3 +10,4 @@ - script: tools/distrib/check_trailing_newlines.sh - script: tools/distrib/check_nanopb_output.sh - script: tools/distrib/check_include_guards.py +- script: tools/distrib/python/check_grpcio_tools.py diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json index 471a5fc95273a901f1d6d536a47ab3f1a5cf8ef1..a7b519da2fddd02bf437a6efb4f021839c0dab9f 100644 --- a/tools/run_tests/sources_and_headers.json +++ b/tools/run_tests/sources_and_headers.json @@ -2248,8 +2248,8 @@ "grpc_test_util" ], "headers": [ - "src/proto/grpc/lb/v0/load_balancer.grpc.pb.h", - "src/proto/grpc/lb/v0/load_balancer.pb.h" + "src/proto/grpc/lb/v1/load_balancer.grpc.pb.h", + "src/proto/grpc/lb/v1/load_balancer.pb.h" ], "language": "c++", "name": "grpclb_api_test", @@ -2588,6 +2588,24 @@ "third_party": false, "type": "target" }, + { + "deps": [ + "gpr", + "gpr_test_util", + "grpc", + "grpc++", + "grpc++_test_util", + "grpc_test_util" + ], + "headers": [], + "language": "c++", + "name": "server_builder_plugin_test", + "src": [ + "test/cpp/end2end/server_builder_plugin_test.cc" + ], + "third_party": false, + "type": "target" + }, { "deps": [ "gpr", @@ -3387,6 +3405,23 @@ "third_party": false, "type": "target" }, + { + "deps": [ + "bad_client_test", + "gpr", + "gpr_test_util", + "grpc_test_util_unsecure", + "grpc_unsecure" + ], + "headers": [], + "language": "c", + "name": "large_metadata_bad_client_test", + "src": [ + "test/core/bad_client/tests/large_metadata.c" + ], + "third_party": false, + "type": "target" + }, { "deps": [ "bad_client_test", @@ -4175,7 +4210,8 @@ "grpc_transport_chttp2_client_insecure", "grpc_transport_chttp2_client_secure", "grpc_transport_chttp2_server_insecure", - "grpc_transport_chttp2_server_secure" + "grpc_transport_chttp2_server_secure", + "grpc_transport_cronet_client_secure" ], "headers": [], "language": "c", @@ -5646,6 +5682,7 @@ "src/core/lib/iomgr/endpoint.h", "src/core/lib/iomgr/endpoint_pair.h", "src/core/lib/iomgr/ev_poll_and_epoll_posix.h", + "src/core/lib/iomgr/ev_poll_posix.h", "src/core/lib/iomgr/ev_posix.h", "src/core/lib/iomgr/exec_ctx.h", "src/core/lib/iomgr/executor.h", @@ -5746,6 +5783,8 @@ "src/core/lib/iomgr/endpoint_pair_windows.c", "src/core/lib/iomgr/ev_poll_and_epoll_posix.c", "src/core/lib/iomgr/ev_poll_and_epoll_posix.h", + "src/core/lib/iomgr/ev_poll_posix.c", + "src/core/lib/iomgr/ev_poll_posix.h", "src/core/lib/iomgr/ev_posix.c", "src/core/lib/iomgr/ev_posix.h", "src/core/lib/iomgr/exec_ctx.c", @@ -5939,6 +5978,7 @@ ], "headers": [ "include/grpc/impl/codegen/byte_buffer.h", + "include/grpc/impl/codegen/byte_buffer_reader.h", "include/grpc/impl/codegen/compression_types.h", "include/grpc/impl/codegen/connectivity_state.h", "include/grpc/impl/codegen/grpc_types.h", @@ -5949,6 +5989,7 @@ "name": "grpc_codegen", "src": [ "include/grpc/impl/codegen/byte_buffer.h", + "include/grpc/impl/codegen/byte_buffer_reader.h", "include/grpc/impl/codegen/compression_types.h", "include/grpc/impl/codegen/connectivity_state.h", "include/grpc/impl/codegen/grpc_types.h", @@ -5967,15 +6008,15 @@ ], "headers": [ "src/core/ext/lb_policy/grpclb/load_balancer_api.h", - "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.h" + "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h" ], "language": "c", "name": "grpc_lb_policy_grpclb", "src": [ "src/core/ext/lb_policy/grpclb/load_balancer_api.c", "src/core/ext/lb_policy/grpclb/load_balancer_api.h", - "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.c", - "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.h" + "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c", + "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h" ], "third_party": false, "type": "filegroup" @@ -6068,6 +6109,7 @@ "tsi" ], "headers": [ + "include/grpc/grpc_cronet.h", "include/grpc/grpc_security.h", "include/grpc/grpc_security_constants.h", "src/core/lib/security/auth_filters.h", @@ -6083,6 +6125,7 @@ "language": "c", "name": "grpc_secure", "src": [ + "include/grpc/grpc_cronet.h", "include/grpc/grpc_security.h", "include/grpc/grpc_security_constants.h", "src/core/lib/http/httpcli_security_connector.c", @@ -6318,6 +6361,24 @@ "third_party": false, "type": "filegroup" }, + { + "deps": [ + "grpc_base", + "grpc_transport_chttp2" + ], + "headers": [ + "third_party/objective_c/Cronet/cronet_c_for_grpc.h" + ], + "language": "c", + "name": "grpc_transport_cronet_client_secure", + "src": [ + "src/core/ext/transport/cronet/client/secure/cronet_channel_create.c", + "src/core/ext/transport/cronet/transport/cronet_api_dummy.c", + "src/core/ext/transport/cronet/transport/cronet_transport.c" + ], + "third_party": false, + "type": "filegroup" + }, { "deps": [], "headers": [ @@ -6382,6 +6443,8 @@ "include/grpc++/impl/rpc_service_method.h", "include/grpc++/impl/serialization_traits.h", "include/grpc++/impl/server_builder_option.h", + "include/grpc++/impl/server_builder_plugin.h", + "include/grpc++/impl/server_initializer.h", "include/grpc++/impl/service_type.h", "include/grpc++/impl/sync.h", "include/grpc++/impl/sync_cxx11.h", @@ -6432,6 +6495,8 @@ "include/grpc++/impl/rpc_service_method.h", "include/grpc++/impl/serialization_traits.h", "include/grpc++/impl/server_builder_option.h", + "include/grpc++/impl/server_builder_plugin.h", + "include/grpc++/impl/server_initializer.h", "include/grpc++/impl/service_type.h", "include/grpc++/impl/sync.h", "include/grpc++/impl/sync_cxx11.h", diff --git a/tools/run_tests/stress_test/configs/csharp.json b/tools/run_tests/stress_test/configs/csharp.json index 406949557dc0461a957d305c77f7a26d9296a344..c438e08964cca385d05a2204d96e5fa40ee0cb02 100644 --- a/tools/run_tests/stress_test/configs/csharp.json +++ b/tools/run_tests/stress_test/configs/csharp.json @@ -10,7 +10,7 @@ "baseTemplates": { "default": { "wrapperScriptPath": "/var/local/git/grpc/tools/gcp/stress_test/run_client.py", - "pollIntervalSecs": 60, + "pollIntervalSecs": 100, "clientArgs": { "num_channels_per_server":5, "num_stubs_per_channel":10, @@ -20,7 +20,8 @@ "metricsPort": 8081, "metricsArgs": { "metrics_server_address": "localhost:8081", - "total_only": "true" + "total_only": "true", + "deadline_secs": 60 } } }, @@ -78,9 +79,9 @@ "globalSettings": { "buildDockerImages": true, - "pollIntervalSecs": 60, + "pollIntervalSecs": 100, "testDurationSecs": 7200, - "kubernetesProxyPort": 8001, + "kubernetesProxyPort": 8009, "datasetIdNamePrefix": "stress_test_csharp", "summaryTableId": "summary", "qpsTableId": "qps", diff --git a/tools/run_tests/stress_test/configs/java.json b/tools/run_tests/stress_test/configs/java.json index 2ce6c00780402e65e7acd609405ce1e4e3d8cdc7..92af63c6b55189b9779ef2636445a022095c00c6 100644 --- a/tools/run_tests/stress_test/configs/java.json +++ b/tools/run_tests/stress_test/configs/java.json @@ -10,7 +10,7 @@ "baseTemplates": { "default": { "wrapperScriptPath": "/var/local/git/grpc/tools/gcp/stress_test/run_client.py", - "pollIntervalSecs": 60, + "pollIntervalSecs": 100, "clientArgs": { "num_channels_per_server":5, "num_stubs_per_channel":10, @@ -20,7 +20,11 @@ "metricsPort": 8081, "metricsArgs": { "metrics_server_address": "localhost:8081", - "total_only": "true" + "total_only": "true", + "deadline_secs": 60 + }, + "env": { + "STRESSTEST_CLIENT_OPTS":"-Xmx3g -Xms3g -XX:NewSize=1500m -XX:MaxNewSize=1500m -XX:+UseConcMarkSweepGC" } } }, @@ -44,7 +48,10 @@ "serverPort": 8080, "serverArgs": { "port": 8080, - "use_tls": "false" + "use_tls": "false" + }, + "env": { + "TEST_SERVER_OPTS":"-Xmx3g -Xms3g -XX:NewSize=1500m -XX:MaxNewSize=1500m -XX:+UseConcMarkSweepGC" } } }, @@ -79,7 +86,7 @@ "globalSettings": { "buildDockerImages": true, - "pollIntervalSecs": 60, + "pollIntervalSecs": 100, "testDurationSecs": 7200, "kubernetesProxyPort": 8008, "datasetIdNamePrefix": "stress_test_java", diff --git a/tools/run_tests/stress_test/configs/python.json b/tools/run_tests/stress_test/configs/python.json new file mode 100644 index 0000000000000000000000000000000000000000..4f85de1d5f6d40d493f98301dce2016d09e71010 --- /dev/null +++ b/tools/run_tests/stress_test/configs/python.json @@ -0,0 +1,98 @@ +{ + "dockerImages": { + "grpc_stress_python" : { + "buildScript": "tools/run_tests/dockerize/build_interop_stress_image.sh", + "dockerFileDir": "grpc_interop_stress_python" + } + }, + + "clientTemplates": { + "baseTemplates": { + "default": { + "wrapperScriptPath": "/var/local/git/grpc/tools/gcp/stress_test/run_client.py", + "pollIntervalSecs": 60, + "clientArgs": { + "num_channels_per_server":5, + "num_stubs_per_channel":10, + "test_cases": "empty_unary:1,large_unary:1,client_streaming:1,server_streaming:1,empty_stream:1", + "metrics_port": 8081 + }, + "metricsPort": 8081, + "metricsArgs": { + "metrics_server_address": "localhost:8081", + "total_only": "true" + }, + "env": { + "PYTHONPATH": "/var/local/git/grpc/src/python/gens:/var/local/git/grpc/src/python/grpcio", + "LD_LIBRARY_PATH":"/var/local/git/grpc/libs/opt" + } + } + }, + "templates": { + "python_client": { + "baseTemplate": "default", + "stressClientCmd": [ + "python", + "/var/local/git/grpc/src/python/grpcio/tests/stress/client.py" + ], + "metricsClientCmd": ["/var/local/git/grpc/bins/opt/metrics_client"] + } + } + }, + + "serverTemplates": { + "baseTemplates":{ + "default": { + "wrapperScriptPath": "/var/local/git/grpc/tools/gcp/stress_test/run_server.py", + "serverPort": 8080, + "serverArgs": { + "port": 8080 + }, + "env": { + "PYTHONPATH": "/var/local/git/grpc/src/python/gens:/var/local/git/grpc/src/python/grpcio", + "LD_LIBRARY_PATH":"/var/local/git/grpc/libs/opt" + } + } + }, + "templates": { + "python_server": { + "baseTemplate": "default", + "stressServerCmd": [ + "python", + "/var/local/git/grpc/src/python/grpcio/tests/interop/server.py" + ] + } + } + }, + + "testMatrix": { + "serverPodSpecs": { + "python-stress-server": { + "serverTemplate": "python_server", + "dockerImage": "grpc_stress_python", + "numInstances": 1 + } + }, + + "clientPodSpecs": { + "python-stress-client": { + "clientTemplate": "python_client", + "dockerImage": "grpc_stress_python", + "numInstances": 5, + "serverPodSpec": "python-stress-server" + } + } + }, + + "globalSettings": { + "buildDockerImages": true, + "pollIntervalSecs": 60, + "testDurationSecs": 7200, + "kubernetesProxyPort": 8011, + "datasetIdNamePrefix": "stress_test_python", + "summaryTableId": "summary", + "qpsTableId": "qps", + "podWarmupSecs": 60 + } +} + diff --git a/tools/run_tests/stress_test/print_summary.py b/tools/run_tests/stress_test/print_summary.py new file mode 100755 index 0000000000000000000000000000000000000000..cb1a33961e45a5cb05895c3c232ddefaba2faa56 --- /dev/null +++ b/tools/run_tests/stress_test/print_summary.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python2.7 +# 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. +import argparse +import os +import sys + +stress_test_utils_dir = os.path.abspath(os.path.join( + os.path.dirname(__file__), '../../gcp/stress_test')) +sys.path.append(stress_test_utils_dir) +from stress_test_utils import BigQueryHelper + +argp = argparse.ArgumentParser( + description='Print summary tables', + formatter_class=argparse.ArgumentDefaultsHelpFormatter) +argp.add_argument('--gcp_project_id', + required=True, + help='The Google Cloud Platform Project Id') +argp.add_argument('--dataset_id', type=str, required=True) +argp.add_argument('--run_id', type=str, required=True) +argp.add_argument('--summary_table_id', type=str, default='summary') +argp.add_argument('--qps_table_id', type=str, default='qps') +argp.add_argument('--summary_only', action='store_true', default=True) + +if __name__ == '__main__': + args = argp.parse_args() + bq_helper = BigQueryHelper(args.run_id, '', '', args.gcp_project_id, + args.dataset_id, args.summary_table_id, + args.qps_table_id) + bq_helper.initialize() + if not args.summary_only: + bq_helper.print_qps_records() + bq_helper.print_summary_records() diff --git a/tools/run_tests/stress_test/run_on_gke.py b/tools/run_tests/stress_test/run_on_gke.py index d4f1c4ad3dc5e0530cb0cbd2374c3a6af0eb12e0..583e58316f4080a0d2b3eb705c2b761940d2f8fc 100755 --- a/tools/run_tests/stress_test/run_on_gke.py +++ b/tools/run_tests/stress_test/run_on_gke.py @@ -69,7 +69,7 @@ class ClientTemplate: def __init__(self, name, stress_client_cmd, metrics_client_cmd, metrics_port, wrapper_script_path, poll_interval_secs, client_args_dict, - metrics_args_dict, will_run_forever): + metrics_args_dict, will_run_forever, env_dict): self.name = name self.stress_client_cmd = stress_client_cmd self.metrics_client_cmd = metrics_client_cmd @@ -79,19 +79,21 @@ class ClientTemplate: self.client_args_dict = client_args_dict self.metrics_args_dict = metrics_args_dict self.will_run_forever = will_run_forever + self.env_dict = env_dict class ServerTemplate: """ Contains all the common settings used by a stress server """ def __init__(self, name, server_cmd, wrapper_script_path, server_port, - server_args_dict, will_run_forever): + server_args_dict, will_run_forever, env_dict): self.name = name self.server_cmd = server_cmd self.wrapper_script_path = wrapper_script_path self.server_port = server_port self.server_args_dict = server_args_dict self.will_run_forever = will_run_forever + self.env_dict = env_dict class DockerImage: @@ -240,6 +242,7 @@ class Gke: # server_pod_spec.template.wrapper_script_path) are are injected into the # container via environment variables server_env = self.gke_env.copy() + server_env.update(server_pod_spec.template.env_dict) server_env.update({ 'STRESS_TEST_IMAGE_TYPE': 'SERVER', 'STRESS_TEST_CMD': server_pod_spec.template.server_cmd, @@ -283,6 +286,7 @@ class Gke: # client_pod_spec.template.wrapper_script_path) are are injected into the # container via environment variables client_env = self.gke_env.copy() + client_env.update(client_pod_spec.template.env_dict) client_env.update({ 'STRESS_TEST_IMAGE_TYPE': 'CLIENT', 'STRESS_TEST_CMD': client_pod_spec.template.stress_client_cmd, @@ -425,7 +429,8 @@ class Config: template_name, stress_client_cmd, metrics_client_cmd, temp_dict['metricsPort'], temp_dict['wrapperScriptPath'], temp_dict['pollIntervalSecs'], temp_dict['clientArgs'].copy(), - temp_dict['metricsArgs'].copy(), temp_dict.get('willRunForever', 1)) + temp_dict['metricsArgs'].copy(), temp_dict.get('willRunForever', 1), + temp_dict.get('env', {}).copy()) return client_templates_dict @@ -461,7 +466,7 @@ class Config: server_templates_dict[template_name] = ServerTemplate( template_name, stress_server_cmd, temp_dict['wrapperScriptPath'], temp_dict['serverPort'], temp_dict['serverArgs'].copy(), - temp_dict.get('willRunForever', 1)) + temp_dict.get('willRunForever', 1), temp_dict.get('env', {}).copy()) return server_templates_dict diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json index ff5c947c87274030bf3169df3ce1956fbc1ed1e4..527701525dfbe12b71ec2ef8177044fc6e627069 100644 --- a/tools/run_tests/tests.json +++ b/tools/run_tests/tests.json @@ -2448,6 +2448,27 @@ "posix" ] }, + { + "args": [], + "ci_platforms": [ + "linux", + "mac", + "posix", + "windows" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "gtest": true, + "language": "c++", + "name": "server_builder_plugin_test", + "platforms": [ + "linux", + "mac", + "posix", + "windows" + ] + }, { "args": [], "ci_platforms": [ @@ -2713,6 +2734,27 @@ "windows" ] }, + { + "args": [], + "ci_platforms": [ + "linux", + "mac", + "posix", + "windows" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "gtest": false, + "language": "c", + "name": "large_metadata_bad_client_test", + "platforms": [ + "linux", + "mac", + "posix", + "windows" + ] + }, { "args": [], "ci_platforms": [ @@ -23181,7 +23223,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -23202,7 +23246,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -23223,7 +23269,9 @@ "posix" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -23244,7 +23292,9 @@ "posix" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -23265,7 +23315,9 @@ "posix" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -23286,7 +23338,9 @@ "posix" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -23307,7 +23361,9 @@ "posix" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -23328,7 +23384,9 @@ "posix" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -23349,7 +23407,9 @@ "posix" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -23370,7 +23430,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -23391,7 +23453,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -23412,7 +23476,9 @@ "posix" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -23433,7 +23499,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -23454,7 +23522,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -23475,7 +23545,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -23496,7 +23568,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -23517,7 +23591,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -23538,7 +23614,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -23559,7 +23637,9 @@ "posix" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -23580,7 +23660,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -23601,7 +23683,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -23622,7 +23706,9 @@ "posix" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -23643,7 +23729,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -23664,7 +23752,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -23685,7 +23775,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -23706,7 +23798,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -23727,7 +23821,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -23748,7 +23844,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -23769,7 +23867,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -23790,7 +23890,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -23811,7 +23913,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -23832,7 +23936,9 @@ "posix" ], "cpu_cost": 1.0, - "exclude_configs": [], + "exclude_configs": [ + "msan" + ], "flaky": false, "language": "c", "name": "h2_sockpair_1byte_nosec_test", @@ -24592,7 +24698,137 @@ { "args": [ "--scenario_json", - "'{\"name\": \"cpp_generic_async_streaming_qps_unconstrained_secure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 4, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"bytebuf_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"server_type\": \"ASYNC_GENERIC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"bytebuf_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}'" + "'{\"name\": \"cpp_protobuf_async_streaming_ping_pong_secure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"core_limit\": 1, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"ASYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 1}'" + ], + "boringssl": true, + "ci_platforms": [ + "linux", + "mac", + "posix", + "windows" + ], + "cpu_cost": 1000.0, + "defaults": "boringssl", + "exclude_configs": [], + "flaky": false, + "language": "c++", + "name": "json_run_localhost", + "platforms": [ + "linux", + "mac", + "posix", + "windows" + ], + "shortname": "json_run_localhost:cpp_protobuf_async_streaming_ping_pong_secure" + }, + { + "args": [ + "--scenario_json", + "'{\"name\": \"cpp_protobuf_async_unary_ping_pong_secure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"core_limit\": 1, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"ASYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 1}'" + ], + "boringssl": true, + "ci_platforms": [ + "linux", + "mac", + "posix", + "windows" + ], + "cpu_cost": 1000.0, + "defaults": "boringssl", + "exclude_configs": [], + "flaky": false, + "language": "c++", + "name": "json_run_localhost", + "platforms": [ + "linux", + "mac", + "posix", + "windows" + ], + "shortname": "json_run_localhost:cpp_protobuf_async_unary_ping_pong_secure" + }, + { + "args": [ + "--scenario_json", + "'{\"name\": \"cpp_protobuf_sync_unary_ping_pong_secure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"core_limit\": 1, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"SYNC_SERVER\"}, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 1}'" + ], + "boringssl": true, + "ci_platforms": [ + "linux", + "mac", + "posix", + "windows" + ], + "cpu_cost": 1000.0, + "defaults": "boringssl", + "exclude_configs": [], + "flaky": false, + "language": "c++", + "name": "json_run_localhost", + "platforms": [ + "linux", + "mac", + "posix", + "windows" + ], + "shortname": "json_run_localhost:cpp_protobuf_sync_unary_ping_pong_secure" + }, + { + "args": [ + "--scenario_json", + "'{\"name\": \"cpp_protobuf_async_unary_qps_unconstrained_secure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"ASYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}'" + ], + "boringssl": true, + "ci_platforms": [ + "linux", + "mac", + "posix", + "windows" + ], + "cpu_cost": 1000.0, + "defaults": "boringssl", + "exclude_configs": [], + "flaky": false, + "language": "c++", + "name": "json_run_localhost", + "platforms": [ + "linux", + "mac", + "posix", + "windows" + ], + "shortname": "json_run_localhost:cpp_protobuf_async_unary_qps_unconstrained_secure" + }, + { + "args": [ + "--scenario_json", + "'{\"name\": \"cpp_protobuf_async_streaming_qps_unconstrained_secure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"ASYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}'" + ], + "boringssl": true, + "ci_platforms": [ + "linux", + "mac", + "posix", + "windows" + ], + "cpu_cost": 1000.0, + "defaults": "boringssl", + "exclude_configs": [], + "flaky": false, + "language": "c++", + "name": "json_run_localhost", + "platforms": [ + "linux", + "mac", + "posix", + "windows" + ], + "shortname": "json_run_localhost:cpp_protobuf_async_streaming_qps_unconstrained_secure" + }, + { + "args": [ + "--scenario_json", + "'{\"name\": \"cpp_generic_async_streaming_qps_unconstrained_secure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"bytebuf_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"server_type\": \"ASYNC_GENERIC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"bytebuf_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}'" ], "boringssl": true, "ci_platforms": [ @@ -24644,7 +24880,7 @@ { "args": [ "--scenario_json", - "'{\"name\": \"cpp_protobuf_async_streaming_qps_unconstrained_secure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 4, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"ASYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}'" + "'{\"name\": \"cpp_generic_async_streaming_ping_pong_insecure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"core_limit\": 1, \"security_params\": null, \"payload_config\": {\"bytebuf_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"server_type\": \"ASYNC_GENERIC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"bytebuf_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 1}'" ], "boringssl": true, "ci_platforms": [ @@ -24665,12 +24901,12 @@ "posix", "windows" ], - "shortname": "json_run_localhost:cpp_protobuf_async_streaming_qps_unconstrained_secure" + "shortname": "json_run_localhost:cpp_generic_async_streaming_ping_pong_insecure" }, { "args": [ "--scenario_json", - "'{\"name\": \"cpp_protobuf_async_streaming_ping_pong_secure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"core_limit\": 1, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"ASYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 1}'" + "'{\"name\": \"cpp_protobuf_async_streaming_ping_pong_insecure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"core_limit\": 1, \"security_params\": null, \"server_type\": \"ASYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 1}'" ], "boringssl": true, "ci_platforms": [ @@ -24691,12 +24927,12 @@ "posix", "windows" ], - "shortname": "json_run_localhost:cpp_protobuf_async_streaming_ping_pong_secure" + "shortname": "json_run_localhost:cpp_protobuf_async_streaming_ping_pong_insecure" }, { "args": [ "--scenario_json", - "'{\"name\": \"cpp_protobuf_sync_unary_ping_pong_secure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 1, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"SYNC_SERVER\"}, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 1}'" + "'{\"name\": \"cpp_protobuf_async_unary_ping_pong_insecure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"core_limit\": 1, \"security_params\": null, \"server_type\": \"ASYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 1}'" ], "boringssl": true, "ci_platforms": [ @@ -24717,12 +24953,12 @@ "posix", "windows" ], - "shortname": "json_run_localhost:cpp_protobuf_sync_unary_ping_pong_secure" + "shortname": "json_run_localhost:cpp_protobuf_async_unary_ping_pong_insecure" }, { "args": [ "--scenario_json", - "'{\"name\": \"cpp_protobuf_async_unary_ping_pong_secure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"core_limit\": 1, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"ASYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 1}'" + "'{\"name\": \"cpp_protobuf_sync_unary_ping_pong_insecure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"core_limit\": 1, \"security_params\": null, \"server_type\": \"SYNC_SERVER\"}, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 1}'" ], "boringssl": true, "ci_platforms": [ @@ -24743,12 +24979,12 @@ "posix", "windows" ], - "shortname": "json_run_localhost:cpp_protobuf_async_unary_ping_pong_secure" + "shortname": "json_run_localhost:cpp_protobuf_sync_unary_ping_pong_insecure" }, { "args": [ "--scenario_json", - "'{\"name\": \"cpp_generic_async_streaming_ping_pong_insecure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"core_limit\": 1, \"security_params\": null, \"payload_config\": {\"bytebuf_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"server_type\": \"ASYNC_GENERIC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"bytebuf_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 1}'" + "'{\"name\": \"cpp_protobuf_async_unary_qps_unconstrained_insecure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": null, \"server_type\": \"ASYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}'" ], "boringssl": true, "ci_platforms": [ @@ -24769,12 +25005,12 @@ "posix", "windows" ], - "shortname": "json_run_localhost:cpp_generic_async_streaming_ping_pong_insecure" + "shortname": "json_run_localhost:cpp_protobuf_async_unary_qps_unconstrained_insecure" }, { "args": [ "--scenario_json", - "'{\"name\": \"cpp_generic_async_streaming_qps_unconstrained_insecure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 4, \"security_params\": null, \"payload_config\": {\"bytebuf_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"server_type\": \"ASYNC_GENERIC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"bytebuf_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}'" + "'{\"name\": \"cpp_protobuf_async_streaming_qps_unconstrained_insecure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": null, \"server_type\": \"ASYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}'" ], "boringssl": true, "ci_platforms": [ @@ -24795,12 +25031,12 @@ "posix", "windows" ], - "shortname": "json_run_localhost:cpp_generic_async_streaming_qps_unconstrained_insecure" + "shortname": "json_run_localhost:cpp_protobuf_async_streaming_qps_unconstrained_insecure" }, { "args": [ "--scenario_json", - "'{\"name\": \"cpp_generic_async_streaming_qps_one_server_core_insecure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"core_limit\": 1, \"security_params\": null, \"payload_config\": {\"bytebuf_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"server_type\": \"ASYNC_GENERIC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"bytebuf_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}'" + "'{\"name\": \"cpp_generic_async_streaming_qps_unconstrained_insecure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": null, \"payload_config\": {\"bytebuf_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"server_type\": \"ASYNC_GENERIC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"bytebuf_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}'" ], "boringssl": true, "ci_platforms": [ @@ -24821,12 +25057,12 @@ "posix", "windows" ], - "shortname": "json_run_localhost:cpp_generic_async_streaming_qps_one_server_core_insecure" + "shortname": "json_run_localhost:cpp_generic_async_streaming_qps_unconstrained_insecure" }, { "args": [ "--scenario_json", - "'{\"name\": \"cpp_protobuf_async_streaming_qps_unconstrained_insecure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 4, \"security_params\": null, \"server_type\": \"ASYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}'" + "'{\"name\": \"cpp_generic_async_streaming_qps_one_server_core_insecure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"core_limit\": 1, \"security_params\": null, \"payload_config\": {\"bytebuf_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"server_type\": \"ASYNC_GENERIC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"bytebuf_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}'" ], "boringssl": true, "ci_platforms": [ @@ -24847,89 +25083,62 @@ "posix", "windows" ], - "shortname": "json_run_localhost:cpp_protobuf_async_streaming_qps_unconstrained_insecure" + "shortname": "json_run_localhost:cpp_generic_async_streaming_qps_one_server_core_insecure" }, { "args": [ - "--scenario_json", - "'{\"name\": \"cpp_protobuf_async_streaming_ping_pong_insecure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"core_limit\": 1, \"security_params\": null, \"server_type\": \"ASYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 1}'" + "test/core/end2end/fuzzers/api_fuzzer_corpus/00.bin" ], - "boringssl": true, "ci_platforms": [ - "linux", - "mac", - "posix", - "windows" + "linux" ], - "cpu_cost": 1000.0, - "defaults": "boringssl", + "cpu_cost": 0.1, "exclude_configs": [], "flaky": false, - "language": "c++", - "name": "json_run_localhost", + "language": "c", + "name": "api_fuzzer_one_entry", "platforms": [ - "linux", - "mac", - "posix", - "windows" + "linux" ], - "shortname": "json_run_localhost:cpp_protobuf_async_streaming_ping_pong_insecure" + "uses_polling": false }, { "args": [ - "--scenario_json", - "'{\"name\": \"cpp_protobuf_sync_unary_ping_pong_insecure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 1, \"security_params\": null, \"server_type\": \"SYNC_SERVER\"}, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 1}'" + "test/core/end2end/fuzzers/api_fuzzer_corpus/001ea98069c10f808c281da9bbdd84cc05c3bad1" ], - "boringssl": true, "ci_platforms": [ - "linux", - "mac", - "posix", - "windows" + "linux" ], - "cpu_cost": 1000.0, - "defaults": "boringssl", + "cpu_cost": 0.1, "exclude_configs": [], "flaky": false, - "language": "c++", - "name": "json_run_localhost", + "language": "c", + "name": "api_fuzzer_one_entry", "platforms": [ - "linux", - "mac", - "posix", - "windows" + "linux" ], - "shortname": "json_run_localhost:cpp_protobuf_sync_unary_ping_pong_insecure" + "uses_polling": false }, { "args": [ - "--scenario_json", - "'{\"name\": \"cpp_protobuf_async_unary_ping_pong_insecure\", \"warmup_seconds\": 5, \"benchmark_seconds\": 30, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"core_limit\": 1, \"security_params\": null, \"server_type\": \"ASYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 1}'" + "test/core/end2end/fuzzers/api_fuzzer_corpus/01.bin" ], - "boringssl": true, "ci_platforms": [ - "linux", - "mac", - "posix", - "windows" + "linux" ], - "cpu_cost": 1000.0, - "defaults": "boringssl", + "cpu_cost": 0.1, "exclude_configs": [], "flaky": false, - "language": "c++", - "name": "json_run_localhost", + "language": "c", + "name": "api_fuzzer_one_entry", "platforms": [ - "linux", - "mac", - "posix", - "windows" + "linux" ], - "shortname": "json_run_localhost:cpp_protobuf_async_unary_ping_pong_insecure" + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/00.bin" + "test/core/end2end/fuzzers/api_fuzzer_corpus/0159f564d91869bc07239f5551a493c2845a4524" ], "ci_platforms": [ "linux" @@ -24941,11 +25150,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/01.bin" + "test/core/end2end/fuzzers/api_fuzzer_corpus/01f52e31dfffdab89d83acd39925c3dd81baa76f" ], "ci_platforms": [ "linux" @@ -24957,11 +25167,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/0159f564d91869bc07239f5551a493c2845a4524" + "test/core/end2end/fuzzers/api_fuzzer_corpus/02.bin" ], "ci_platforms": [ "linux" @@ -24973,11 +25184,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/02.bin" + "test/core/end2end/fuzzers/api_fuzzer_corpus/0211f960c2da343c3cde6406e650d73278e01e47" ], "ci_platforms": [ "linux" @@ -24989,11 +25201,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/0211f960c2da343c3cde6406e650d73278e01e47" + "test/core/end2end/fuzzers/api_fuzzer_corpus/0236f28708dcc2e044d67ecf93539ce6c33a727a" ], "ci_platforms": [ "linux" @@ -25005,11 +25218,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/0236f28708dcc2e044d67ecf93539ce6c33a727a" + "test/core/end2end/fuzzers/api_fuzzer_corpus/02434dcdaca96b9eacee76eb351e99f015eaa05e" ], "ci_platforms": [ "linux" @@ -25021,11 +25235,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/02434dcdaca96b9eacee76eb351e99f015eaa05e" + "test/core/end2end/fuzzers/api_fuzzer_corpus/02c3cf8d52fbc43f89b5f516a17cea23b68fc8d5" ], "ci_platforms": [ "linux" @@ -25037,7 +25252,8 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -25053,7 +25269,8 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -25069,7 +25286,42 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/032744b59cafd3320cc932ad39926a9bc92f589e" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/0385c7b41263419e25a4342fbfc44fbd65eb2ed5" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -25085,7 +25337,8 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -25101,7 +25354,8 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -25117,7 +25371,8 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -25133,7 +25388,8 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -25149,7 +25405,25 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/04d93c9df413717f71abd091592b5238afb799e8" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -25165,7 +25439,8 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -25181,7 +25456,8 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -25197,7 +25473,8 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -25213,7 +25490,8 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -25229,7 +25507,8 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -25245,7 +25524,8 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -25261,7 +25541,8 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -25277,7 +25558,42 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/064d50aee4416ccf32f4e4fe7b770b7802265ffe" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/066e7fcb68e83b432c414f63f6de73e5f5099e49" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -25293,7 +25609,25 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/06c714e289673cf982ce2ac0670707a15f2ac5ea" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -25309,7 +25643,8 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -25325,7 +25660,25 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/071247b8fddda8aa520d9142c89039fbf8bf6cee" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -25341,7 +25694,8 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -25357,7 +25711,8 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -25373,7 +25728,25 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/07cb3b9baca1bbcce2e199e551073ba2fdd4e05c" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -25389,7 +25762,25 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/07fa2b6ed650d436f423adcccfcbe63ce6253de0" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -25405,7 +25796,25 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/081e3248dfca2b32837c4738daee3a4698caaf15" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -25421,7 +25830,25 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/088bf259e854abd9508d91b23983737f8e9e242c" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -25437,7 +25864,8 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -25453,7 +25881,25 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/0976de1461fb037c6987d77d088416440b524dde" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -25469,7 +25915,8 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -25485,7 +25932,8 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -25501,7 +25949,8 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -25517,7 +25966,42 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/0adaf5f559e1fb9cd8cd5b29911e13bca315c606" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/0af5adf68560b3a7036ad23af62e4f9749eca690" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -25533,7 +26017,8 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -25549,11 +26034,8733 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/0bbd89b21cfd192174c25803c7f1afeec88e6524" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/0becc6ede499ddc452fd4e6c3c0413a1107a8373" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/0c.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/0c531e03e56a5cf48bdd531a8c11a19e4a3b0aeb" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/0c65733bc09e8527347e20f5c876c5b64570d423" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/0c7b763d22885462527123656fa17af7520fc55d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/0d.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/0d16d6c2c128ac4ee7b596b763822b4194968533" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/0d604693a9d3e76f54d28a26142abd729b0a9acd" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/0d8bd296d63a5aca5f80d7a7d00387048babda36" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/0d993b34021ec088f1aa3e5acdd98089b4104b07" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/0d9d8241c5568fea586d21f91ae1891dac31ba24" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/0def53b5575cc6ab2fbbd17e2bc6a24de9656f84" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/0e.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/0e2a9ad3aacba320563095a874768a9e546a3db2" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/0e2ddbe92c08eb9ad3cbee1d0db2264baaca12df" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/0ea509d249ae28faba8980aacb972c7ea28d3fd5" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/0f.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/0f16eeeecdebcb59022bda5a0972d1b3429648fd" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/0f2831e0f73521a0991e11115c16847afca16bb3" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/0f81830560dbb9c6d3889b5d581b918c6cade65f" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/0fa216ec645b3973b5e6d28baedd5acc1542e69e" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/10302aa7598eb36d0ac22d0478eb0f2a6b010ea6" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/105d9784648fe2d6c22fbefa69c9a26fff1c6481" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1109cb814fd134862a3f5ef5c9b2244585882b8f" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/11153bfeee3cdede86a52151dbb939c3ffee48ed" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/113c1d1bac15d550124f1ffb9012c32755adf27f" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/11759723c597e6806f8873e5062d31516cdb97ea" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/119410315423e5f37919886ced7f03235e5792aa" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/12083209096187575021a775826b08b70b39ed4c" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1254c9256157e6362003c97c8c93d8cd67a28772" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/12a97827d0f817e3ffd8d9cf1bdba0f945b6fda4" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/12abf5dcf2aba770f7b94ce5d96d7a8565a9aa19" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/12b904b97ed234fa45073b4e346ebe3211558528" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/12c00ed8945bdae03f03142cb964a47ea0c5786e" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/12ef45f6beba92677a2a7508fc5e1bfef30ded66" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/12f977ee18a7499d18a503a47e71b4f241052640" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/130c41e2dd87c36b4079c8e5bd380dbe3e0a2b38" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/13c409dcf7752c25b2b51ac5fad9201b505d7059" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/143789594154049441d565b65ce725fc4f8c12bc" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/145acf7c03a0bc6c4a40d710ba5813b9f28efe2a" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/149044286608a7945721c61f12196bebd5adb2ee" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/14ccbe1d9d7302d642e51ede3d4d846e85310fc2" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/157586c7c0ba8fd0dc9bfc2426229a7da934cec2" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1586adc8c21b5796ba52203379faeb5f251f5c1d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/15c37fe5be9f23c0f0e59e12ee7666007acdb3c5" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1608a688768bdecdb205a455401ce5d9a1424a22" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/162b4ec7cf39df091898e01057b2fa39605b34bb" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1661d0799cbf2015fd64e9f648ebb49281d41c6d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1671cf01e5baf796c5572b7b0e15d226a5c93f23" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/16858f1f9db0e248a15ce09d9848612de1f4bba6" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/16a9beb811f836a444172a5da9290b47d77c32ef" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/16d52016278caebf92ba455f7ac8a8c7482c3563" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/16e681f1867a1ac5612e1a88fddaed0bcb4521e7" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/16ebac3f7cea2b46f660ec6a5ef3401c3e17a2e9" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/173ebf4139ee6d7a574b6767059d82375674bbf4" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/17cfb281eaa8a17d77e08c3648bb93f3b5aa5297" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/17ec0503991dc248d2b188edfa3d28573a1c2154" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/17fb35db0b73c331a66120dbc491300b2d1665e0" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/183c878064b6a0ddf6a22dc4a2aa0d33a2d802d0" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1887558eb48d6a4341610fd0395cef8e87744044" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/18c856af1e2ebb934401e523043eaf80aecc8363" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/18f2d7626b6ad4859e735e448b00b6916f1d3e2e" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/190c4ca0cf29c99bc987d2792c7f62e1007c0245" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1949f4a75f7d501d5279a01f58a444640379bd78" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1972f535ae202777efdd15a09138efc37e07ac01" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/198e691a9dabd23ed5c156f3a6e2c06a4379c15b" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/19dcc3082c76b85177ce6a56d195473aaa285268" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1a16a4b32cb0cb3a759ec20edf332cdfc5d1717e" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1a6b907bfa02ceebeb80aab47b3c3c51161eb868" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1af0744fe0ccad11d6df023803ab699e1464c8da" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1b699132724acab3d42fb5210c07b74343449873" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1b6d8326532cea974655dc86657d8e3b9ba021de" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1b78d906803b539ea9f135e41b58257365948855" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1ba0190ef2cde93332f850753a05b89ae5f39f1f" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1c0417c96e6408d2902ef8fe4b8cd05f1ce4a50f" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1c24396c21f2c6aa2ad9b9a14877b7edf0ce61d2" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1c6e5ad8dbff133707cc85b05a0057abf55d08ad" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1c73564518349ebc87c4023b9d9a3cbc4fbc6cdd" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1c86c4f2d173059e5cfe67b446fdfa285743f61f" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1c98433d827ea4aae2ba8a68c4d11bc2527cb15d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1cbbae18babaa20229b42b4633ef812bd3b40ad4" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1ccd81836f26b7ececde2b02a22b19ab2a498631" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1d259d9c908db8a0a7012c054bfde7f86474dab7" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1d55650c5bc30ea68168a9287820e25d2d53ab4c" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1d795268725d3a08883b05b021a437654aaed908" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1d7bd5961f6963c65054fb9a24d913601f37bf3d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1d8b40b4798e652184df3bcffe1b1d7e32648f79" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1e4a2a6998218ea8f475aa2ee27869207b33b612" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1e55e5f47b550bab133099e5a98d7c751a0a2d7b" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1e7d2d8f6109f4c02815ce8582c799134f2ff5dc" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1eefda69c1787cc55a8bd43774ca13563e0972bc" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1f4d0adab39a988792cca201626c28293e247226" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1f7847ed44c5acbc52c5d16b0222b44067076478" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1fda93a85f7b5b7a0c2d68a03123e58a6d20f124" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/200521ca3891bfed841ca8c22691196a1a03ccd3" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/20322515ebf6df572cb2f596d8a20d3d8893193d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/205dd562c7202d4231b232a6804889e77eba5292" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/207c5a0f80f052ac7b48f6dd45cd33987be27f32" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2099db589f606dd8932a950280f5d2b23751af9f" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2193a1e20caee37676d08c88154a462acf120fb0" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/21da45db854aeae9bef8576d6cb5859c0cf7a34c" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/21f3be485826850e4f4670bb81982e2827815426" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/226b0315f87b08521c9a2d3e2b50c01ec421be14" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/22c9ed2979d9963bce6500997f1e0433988e7e37" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/240afe42d3e2834c46a79d9df0dd6ca018831398" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/247d0d09deeeb76422cd1d06305a63378a498656" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/24a87af0954c808fbd3f2c55185d4b1fa9459f4e" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/24df70902c288fcac060365c2e6f61269a3606b4" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/24fbdfa73f26686633871ddad9698d7059db488f" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2500fc12d5d1b5ed99fc3fe518c28849d1c8d6e8" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2501c7c3f78829725e6bf556277785588318106b" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2507810915aecd3adf1287edf8c9f54b23a8ebd5" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2535940afe69b3106b7696a486a2617d0d9a7150" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/253b8946a7cf403dd466f1685df2f741d4660a34" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/25aa74daea95f9fc46a78239bd2e78ccf0fb3ffc" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/26865cd90c1461694d94d96232436372df2a91fb" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/26930c35fbe83e4d165b8b7f218ac8ea231c87dd" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/26dfa46c2bb2e6af6f52bac6f03a9e4406c6e700" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2743ee5a764fb0c4e04cdf84c9b3810ac8093998" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2748d28f2e03d740a89f7a50ea52450d0c5523f1" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/27a8643ba6047e12de1b2a4f7d0994a2c095a6d5" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/27f5e317e8a3a1098e786b96175c15d0855c4855" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2837baed2fbf1612f88224e91ddc46241dd9d972" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/285b0b9b11fe506527c880d3a866ba94f8038cdf" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/28851da472cd09123465241e0d59697f563f53a8" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/28c56acb0f9b47ead49f34c0d92a661fa04952c2" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/28f8c7af6aab3bbabe028f780e174b27b924a146" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2923d9c864597016358f37ce4014c61648b7290a" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2942908b7973da7113098a0ea25487e3372db173" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/296c3f5b9880fe7ccff4d2a67f489b38b5b6fd6e" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/29a6d7ab3e7ea8d331358df45e5b0926e768e227" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2a410e3d783bc93e63206e28f92b6a40e1db09cf" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2a600cae342e8e9e23406bb1e76133f48d936766" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2ab009994e603404e194ebe0120840d388fb765e" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2ad5ed48b598bd9e2d486a21eed5314736e5b56a" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2aee21e4d1175963fa719d376406bb10d4818bdd" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2af392765963966f2d1ddd5d5af4fcadd93c3b06" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2af4e625522d128d03252f35b5fa5094cbcebc9f" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2b80854b52267dd70b622670e401280387f15dd2" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2b931953e9bd02c3310a05234e91550bcd8ddf62" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2b933a0ede25a06e32c7d9cc5a3eda78086f3060" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2bbe5b2c12a964b53a5e6f78cdd5f595d95082a9" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2bc326b3ecf6d069595bc27cc1bca76b374c8e85" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2c917a39d34aad10d611a1647a6df6502b4d4d59" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2d5613b7bc0f5060eb1fa0449face6a9c503b589" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2d61ec2cff75eadbc47e0932998b8a797e0cd96c" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2d7f42d3df4a206d09a9fa3126333a61f5e678ec" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2d82b2376d689485814ade91df8f65ee08395a02" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2d9440daa210b9298f34982dcf7adc3564ad965c" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2d974f9fd1c57bce55cb9f1bbc25eb1e7a10454b" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2db3a358c43c179a728f0650a00be295e88f8060" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2df65610f1c24ad1cf9a5b22614434c96ffc12fb" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2e21a2f9bff2514667aaec75629c82daa067ff57" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2e48a9c8d204975060e81f37c7a46ab501750067" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2e7441eacf8fcc7043f24b3beba4fcbe3c0c5ea0" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2e82bfb7e8eede401ce75f6afe8c15ffd06130db" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2ef149e8fd68e06fcb7ba2fb43a17cc1dcfd989b" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2f0a8f0f96402ba1681ab3a9095a3dea47cdc53f" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2f120ceed5250084f62010df9bf8fe8e8f3f643b" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2f35914500b09477fe245bc130f86bbd15112ce7" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2f44fd38efef5818750f9adc9b133e40f9cdec71" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2f57224df35ff1583d14436a477330db23d70b0a" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2fa6a874e625ca4d71941408d94698f898be4ea1" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2fece42b158854855dd42eac3fc7b8f1eb61fb04" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/3017e9f66dacf5a01f8c7d65b8a72d4f68aa6a28" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/301c057536319f49dcec68ab96677714e3dbf793" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/30694ac08ff5a6a10cc781b9042c89f4019cfe0a" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/307a91e344b94923837e01a1657ff277f44db07d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/30948ba77c2e56903a9ad5190cc74e59d42f67fe" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/30d6ca02d96fe1d1b91b7fa5180789a6cc9d0d45" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/30fbe0ac4c74e2be3edd4f21b72bcae02e6c623f" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/30fc581d975cd8384b86be0ae59792a605ca68c6" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/313001e1cc15ef9887b43e0c6de398eea2f20e00" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/31429d04a34cc6643eebed7eeb8a807a83b57b1f" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/3152365a4d8540623c9fb3a93712d096bf6b34e6" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/3230d9876d770657d86dfb768b80494cda52abc8" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/324b9341bfc56b24a60f0687a52981fcdeaa8733" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/32594aaa716c1a04b0f927ef964f1593735cb289" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/32a6ea045d1288418617e5e0c52ae02c1f6598aa" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/32b9de8461fd32b1236abb86abc91c82652d6e2c" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/32c108ead009572fbe9a216b372e5c0b3843238e" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/3356fa1721a0dec9fedacba8d86e6100a49d5316" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/3399ac8bb9e0d3a2cbf22a95d1e20c70e2415e41" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/33af00c8deb0f0fdfc113f21c3cb5769aa474587" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/33b7cb7d4dcd380b207f1137722fe394de2a0f8e" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/33ff864434b4f0c0e08c00ec2442cb521e9f79ed" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/342d148e59fb500ad76d583cf828c16cd3d3ed2e" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/3465fb573ac3c59a0804aadeba2f205870abcc3d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/34aca5e37920615e8c141ed1fe4e419ae2e4df65" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/35ba1a4df4d362ea98e9386269bfbb95c5ed4874" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/364f77bffd55805e2be9d2b3a071012e8fc3a083" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/3662f5312562bbe4503018a820692962e7dd66c8" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/368d2b5d4c6776afbed8e5e76cc3a4ccdde1df42" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/37309bbfb4f0d78e6138b13a4e5da5944c95b97d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/37bc0646132afe8c79cda5e76de150a473fc0680" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/383043f6c05edc5a18f5c8e7b9d0314db63eab5e" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/3850b085a0a33fa2a08630dddb03e0f1adb1bee9" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/385626d51cd29e1b32befeaecde5df7248270754" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/38a55e83e685617cdf72e95f1303857b627ae346" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/38c609f72f5a2cf977788afef9c34652f754add0" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/39160bc99597105d50cf7a15698090399a2482ea" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/391ef74273ae5e1cd8a2342c5370fde5df1a7140" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/39525bbff413519199d1cf2c564d62b9c3c7736e" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/39b6daa9ae088667c5080709ca829cf51e66212d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/3a287590e2d38d5dbc0b85d29ae2497d27aa0305" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/3a4fa4e81b78cae093b2d53b0a6f272a398a7cda" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/3a90fbc998ad7219e447db6155e6174e0117dd49" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/3aee5ced2869452b8ed65313d01b9b9c87144cd4" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/3af9522626ddfeb1ef461e3ba0f397ea4b2d99fb" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/3b002ab57ff8080fbb1e72d985ca6f59f96a171e" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/3b60e6663ac7ceaa40f91d3a68fcb9c35e3e99b8" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/3bdfaad171c20468a866329355621cd579eff21c" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/3c18f7c2d8fef6f119fe5bdbb5d191a92c627cb3" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/3c84d21c46b89e7573750dd4517ea2eb58e37e27" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/3c8e6352f6c2a07bd5ef2b9a93c103935c8eaf0d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/3c933aea09501c81d7e065c671cdc3bd55f8caf9" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/3cac139b58decec7c0d1f1318e8f1f28f9650c19" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/3cd19f8138a81f242cb92212df2b4812cde8385a" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/3d7d13b272c46ccceca36729e9893e5142961fd3" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/3d8c66be71e0ae0dfb0c2c7b84e4d8336f92b7ab" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/3d9534f373e79edd704cc9529600efd62451fb78" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/3dedcaf501bc9718e5d372862b081fc9fdfb3959" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/3df06a68edfc53fa88634c657a50cc6820354165" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/3e4c1755d1ad78103f10c2af7c7d2f86326f02f6" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/3e8bef87bb89525914b5e7964969a66eabc78eee" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/3f36ae935255c4bbd2bd8d4a85bfa92bba02225c" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/3f47ad9ab401599f42d3c4f37ab9f702e3ff0fc9" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/3fada97db682f675597cb58c5d43a72e283ab960" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/40b4b92460c4e76a39af9042fb3d86d491a98e16" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/40fb9f1d9086ace2de0ad59648d196ba0705ae00" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/41921ba00dfc038778074b1af81104555ca74927" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/41de80653b78b98f5caa7f6d00a96d72bc245068" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/4212d95c0bfdf34b9c7fbd05bc732fa1bbb226ce" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/42324d3d9e013cd43d4feeed1b48fbe1ea18a732" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/4236180c7d6f2edba5355b79bbe1a5c16266dd95" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/428b5b04a92ad6c28fc38451236c85338b9f8ce0" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/42a8e7c267f66a0747f30b4053ec79325074dc97" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/42a92ac224829067ee7dbadafb777bd38f076c6f" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/42c2e90f2e228d6bec0d81e55f08647a2d651bbe" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/42c3c4a4e7d21e79d1e36494d5324f10a5ecbb04" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/42c50f9543819ff7f440a7ac660cea374355c455" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/42c5f1965243b4bdf0212123d3430010bdacefaa" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/4305b19e8a214d2cf47436d964d52d10e430575f" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/43646936116c18140ff0f01306d16280943eedac" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/43676969fb81dcc1699b6a17eb465ef3cd4c2ab8" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/43874e2bb721b485a93d80b7f1c3e3630f746b02" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/439d4e4ed3ab9fe77e2bbda5b2be3d123beefa00" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/43ed8f46ad700ddd4c2a7a15f0cd209954f0a774" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/43f79e748c5da73a13555b00cf5050af68f07829" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/43ff758aba2eca1e355f0062ca8fa2dcc8edc69c" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/441c94c010d19206c337d3c850cc449523ab480d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/4427b547b6693c39f08ba67c5d2ad012d5088f83" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/442bb0df4955b8dc95cc69af79a522a04c23dfe1" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/44378830a865936e205bb757a69bdf8d788bf26e" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/4449ec3eda232c394fad83e34b002e9bb46862e1" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/4471ee009359844e7600175546a3b36a21329666" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/449ece0109a8543f26311f3ddc23525a2f288b64" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/44bf16b9eb7302a6b02a600ac92dadf916c4e629" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/44e1fdcc46db56bf61a6702fd10766b56d35bc74" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/454fb5eab23aacdba559ed9a9a36941732eb3276" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/45657516294c5426c490e6aa522a79077c972856" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/461949a48f4f2234cce6bfc1476bc9fd96552c0e" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/462ae7e1d7eb4a4d8b4d5daaa1422b7cf835e127" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/46325fcd7a3a718f2188f49e28ad9d0c9dcd06a9" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/465b299ab3509b61016406e0d1d93f7774c03c8c" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/4667156173c437c62fdea99a199f3aed0b504fe0" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/46efabc911aab09a5e7a34a19ef97ce710594a77" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/46f88af92fbd99c386bd24d8a045a9a9c2469d53" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/472adcbc2a1970f2392e596c28bd44087b8f3431" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/4799a2aacdba08bd3e418c5659060829a997d715" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/47e402f3386843e0055431750f30b710e10295dd" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/47ecf4079ea23d4de5fd9282f733eb5429f7ab05" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/47f2ead1b9cd99a8603dc5fd583afe3d4287deab" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/484ab9d070fffe7e3d1a1704c9fa2ce01e192450" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/485410954a625f5749bce6ae923a620371542ed8" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/48f56289592da153b3c50bcc26ad6d4d3a7e443b" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/4905b3fb0f7d2196a5612e8e432abda666e4317d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/490f5aa97dc05ef1ce089fa9d4fd377bacafcf18" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/49d816ae44b329820f47979c5790eebc8eadafd7" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/4a2ee017facf4df1929e7db4b34b12018b64461c" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/4a3eae69f4c5dc768b166620af348316c9fac3e6" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/4a6c8938a8a30567a481599eddfc137fa5454b21" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/4a97016bb83b0db1c51fbb4d4f9c909dd85bdb41" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/4b011706723e645407b871241c2c11004103d628" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/4bedfc6d01a2d6bc0911d48123d6b8b30a46732e" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/4c03f9d60bfc5a2ab41c1703672a339838890ef3" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/4c34bbb26218f40a8ea1bafc8c50cd814a781cd2" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/4c3dcb9cb14f89b3616fc7cca78f2ebc502907eb" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/4c6258b5299bd03560e292fcf3008efc60bc6cd1" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/4c686a41d4d2226b3cc76b8154d8df090d075f00" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/4d472e5a8e8ee92be6f23a101babbc601dd2512c" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/4d4aa6ddd6404300e5278682e560f25292e9804e" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/4d7b5b98536de248387605efd813ba23b8b613dd" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/4d800cf62e39478c1bc1db8222a8d810fff6ad85" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/4d81efc0d5945caada326e2f6e55167120f0d3ce" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/4e36813fde9b5de1b62de95f498f2e0a48b5c5f7" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/4ea18756816848daf5e799ce1d75ecf52353eb08" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/4ef22ea5b0aa8b80a180a9654f5aef121c5aad83" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/4f320381bfd3927493db8037238bdce1766c68ee" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/4f53cc7b3ed0c77c3b5e4478f54caa40e0bf64b6" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5000fa3e29de15e7533b0e04b37eb1985ae69891" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/50841095cafd9f9de6684fb3d89cd5fe148494ef" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/50a96367b6a52c58a36364f4b1ec0583c7f315a5" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/50bfe6100bf11339372ba29fe0c9b38c3ec2ebf0" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5151ad7147bbb75b1b377ce03f4ef5ef0f4f1c82" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/51d7466ac65468db7094bdedc60d1604231acc05" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/51ed796a5f8d8fccebe013ccccdc1ed5d8b8b4c0" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5220909c423d2b321e8459355c965fb330288565" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/528cc09294d2288fc91a4bab7cf6ec621c6621b0" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5298ce28a7eab28c99964c0d838b017355607c92" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/52b5c86f262d46624b2211151a38cbd69c705734" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/52dba1b997f903c5fa3d7da71421b36d96d9f55c" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5394ae134e9023432ac137789815e2b24d1bab3b" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/53e68cd362f3c8d64941efbb0b527c52da5e8424" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/53e9f9a4b0347651b3833c3e153e743a1194e0fa" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/543ea879faab347874ad5e297684a62a1555e1ab" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/546fe2e2b1e2756c3f121d0545866798c85c9b8b" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/548190b9eb539e0841bcdd6e2c095cbef6ebd119" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/54a0a2c37ce1830f241f6e2828adc8057cfa385f" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/54d5ac6cc4bd944e60b7464e36c5d1b144c17da4" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5515fa05b890973031b0e2cc8c2925f3974e2821" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/55ed466781b547db5957233bd8db0ce1f189183f" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/560fe3fe0bb266ccb8c59ce19302bce23835097d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5677b3500e9353856c8d87fbe1476a22df4231f8" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/56ac47e07bf3f42310773a4c66ee9d3afc27a8a3" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/56f3ca8174d263240113de88e7547e7b1c5cb2cf" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/570215c70de40add2ad62bed9ce47f8b6b231de6" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/572ab3983e406a82325f02edfdd7981d040cfbdb" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/573665d817a96a324fb8ba40a06425f572327b78" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/57798cc4375de344391221fd07d591f5c64d646d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/57bc1a4501ceb31b4ead1c2428798be073eb9db3" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/57da1745490c2f21ecb86370f1f72f77752bc739" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/57dea4528141649208fa2af10c18e98e80c1758b" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/588f9166c839baf3102185d38f77f9a750e62c7f" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/58c57e0ef4c2a630150f53ccdc2bfa798d5b9eae" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5939ec5fd8f4e02ff0720cfa3ef685876bb3549d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/594d676c8c05d75ba8587d9e900850dff5e21ff8" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/595603f4ed37e3716cbe53b3ef180e5cdf8005f0" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/59de0a42d012ca3dd8b7fa2f1b1c6642cb86fad4" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5a1d370abacb9f46fa966c8e58992897606a7900" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5a34e7fd2ff3f8e32ce85138931a387dc5f15db0" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5a3c9d98651a315b5bde737482ff54f6b90361e0" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5a3d25f74f7629c675be11faaea35921229b8757" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5a6491ab9c23fae58967d4a4b5d5cfb23f620001" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5a85c9bd6a6d7a2f753dd315e4747fc0249c8799" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5a8ca84c7d4d9b055f05c55b1f707f223979d387" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5ae4d5439ec6910a5fcd9c41f20ae843942853c6" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5b3f6f20f348cc4e5fb07cdb6e8614ca24f2cf13" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5be956066b72ea1799e333a7bd17fb0b8fc2b91c" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5c117dbd5d3146fd94c667f15f4c006fea88d14d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5c388b60e622e14c9abfb5b46c65207a319e09e4" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5c43f3a5de9c581693432dbb2ad604550c3948f5" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5cce719931cf1f07536401134de4325b942be87d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5cd55495dee689728feee959bcb09e2ab13d013d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5cf8b4c70476c124711e731cd2e00f67906bd457" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5d0137a19ae57cfdf5172a8b51e8ea0a0a893690" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5d2f29b31d78b47077b15779d620747034d18c05" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5d5ce71ab1258e014e06e6a2edb94a47a4ae1b35" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5d765c856a9a8650e1b17813340b9b6ba0989b58" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5d76fdb98fb38243a1f1c5f96d31ece34c5a91b7" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5da437d4fd58607deeed34bcb21accece71a056b" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5ddcbde7afa43e7fe4e44ef1470fc0c282873cae" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5e1391f44f904fa54e66ec174e4c8879921e842a" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5e880db498f9baae544cdbc23476873d8766ac58" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5ea01efbec747fc55ae29eb2b779f00889ca6922" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5eae70ef8ab19fead6a9275e3e40df6b201159b1" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5ed431181bedd9a496aa3bb2330957c621f1443d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5ed8998cfc22cce008e3988b3591b1c9ddbfaa75" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5f07e5246d765494ee26c689072ab3ced452f30e" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5f52309deaa1b641fe199889d18f921d6909fc14" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5f7eee027cbd6ae8e989150d9bd8a4fd39654c01" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/600096fe00d5f67726674fb9b0d2a6621a25e79c" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/60e8618c075ec5fd47a1699271c6da1b5befd579" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6123f6116f3cacb4aabdbe26aed24ed0981d6c1c" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/617a2a3f6b6d5d53993db606a8818235ae8d9b96" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/617ef08330c0e852f9aae6c63ddc5893b8b2c722" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6184ea16753b0827f728285f18dad4b3bde00024" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6186bfc21ff7df3982e5d9757e5c7160da0f493a" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/618e64836dc7f374745be963b7b3c62cc02ae2ca" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/61ce843c87f7bda1fabcb6ae3f41e85e6e2332ac" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/61f410c711bc5d53be9e932217ebd035f2716417" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6230cce2862a18c4c92dc6fb4e034a1d15e1ff18" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/629eac0e7443a273b5c351757c03fe15a0b87c1c" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/62c995646f15be1819bd13e32a60af46297d73b4" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/62fbfe90a1b9ac471bc2644c896f64515f6b3c7e" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/634d809c430738b89f0e677eec36506e537e86b3" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/638c36cfe098b98008e594eddf90fdacfc078fae" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/63b91deaac58a7b64fb5999628ff3ff5d32b719d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/63babc04d35adbe48add6e93386dfc838b0bbd25" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6421db654fff309bc191aba0330fbcd1347655e3" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/645b8377f905399af625a01c76ff088745fe1640" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/646c501021c79bf6eb1a39a9bcc82e018f31bca2" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/649cf0ee983cb5792042687181ce7e4d81f090a5" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/64c572e594c2d491a902e8fdff7b617ac0c6881b" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/64d55e872c2148eefb0d7c3df101fd955b709f24" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/64eb970cc80162a4b80d49364f4227db3429e156" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6531f1c311678c9247ad6820519bc7e73f56cb81" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/655b880459e6e00100727af9df52b64f6d77a653" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/655f952ec49cbc6176ad1bcfa45a87bd6c3542f0" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/660c071578cbdccb503317ecbf2fd331bc4ac82d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6639deedbf04eceba6017f712b287235540b5528" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/665d7b4f8082be87864e6ad3a6a3faa1d52ad6e5" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/66ac31199d08e7a3b066059cd409457a850847b2" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/66ef59d5da68fdb5e55b60fc8a8a764afb021b4b" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/66f0ed73b2d4ca3edbd23d5b669e75e4d0ffd292" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6722929b4924f4d50ccfb999460e9a31ca104b4c" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/682cb8ad9fe4641e7a140ae3d3ee27c841ba397f" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6868e669f4b9a77ae5227767ec455fe6f82e55a1" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6887af467b343d6e1a8125ef10eb0a630f2dc06d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/68c65dc60f887050eb8cd7f946bf37aea2ade9f2" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/68f9d39b83bbc7cb4f743c8814800e6692988897" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6914f5f380c83ff9e3e90fc60d5048e47e5e77d9" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/696ea30e2e1490f2f31b153641b2c29152ded5c2" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/69d0f8b4a9452d11620c7d3c1fa532a618d65858" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6a10118289fe7179c4e9bb6a1b466ba34c582bfb" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6a1d877fe1eed1199511b8f28889d8f17665708e" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6ac88da4119df5e1592a05bac7ecb92af59dc1d1" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6b1e10a936df3b42720ebc9179fb74aa147f8b14" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6bd27df0dc9a3f73108de7bad443433aa5ee1175" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6bfbea131237606756a12f275e736045c0956536" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6c1c2177f3483086607c717d0c6c35a81d79e18e" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6c5707e8b1aa9a70ec87014cd660df4a7b910ee3" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6c91623f5a30f65110a4083897bad2882f032c51" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6c9b144f4e6dae6944b524a077dde07ac79e58d5" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6ca83e5d3f4544a14da513dc798f02464febdcd8" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6ce9895c780428861d12440946508c6641352544" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6ded157ecd3fce79fa69c51ee9ecb4639013e6ba" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6df1c575d7f8fdf5593f1f60d9dc540d018fc58c" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6e1cf196e7c8ad4226d89f3ca2c6f7949598bec2" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6e97f4e782ca976d4890199d48fcfd64173e24f9" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6ef96bc0c5b6ab5f8a4453b9cf5784fd55e3b59f" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6f0bbfce7c5027932fb0f809494413e12a4ad3c1" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6f39da8f5bbae89a13dd36755f7b3c4a30c25833" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6f88ae246aa4af9c74732d87a758ba5ca0f40caf" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6f8ffc96f9ebe390929165e32bdc187afb7a40ce" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6fa93aadbb6ecdc32c9111be7692ec28ec11be72" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6fb7b01c1b363390eb9188bcac05f8f11e20c01d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6fbbaf9f6f49fabad4a0e47cea9e4048d8f130ed" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6fe041f1468b495d3186da906f9a5091e5761387" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6fff95a8d3566b2721fa46e9828b47635f13d9ef" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/700f56e26286daf472d371effb9bca13fffa3d77" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/705c87b99197c87eb2ed148f8b3fdc60f8616f15" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/70bd921a3d4700d49ad6b99e0cfee42c36a13b3a" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/710f61e5765c91bcf9cf2e07264771cf2feae48d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/718d23058d5c805a2984c087cd89f9cb6af065b4" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/71c01818823d5c5fd8a3d1cb4c5db4aca51efdb2" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/71e2b03b503dbbdc0d2e724c562b9f1c77f972fa" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/7217d93c1da3ae8ed085a5e6988227dcf430cd89" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/724063b7a5ee36246d72923e776331487434b81a" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/7240f3408714c2dcdcb448f234efef4f08e6b2fb" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/727f43500183aec9c0d9be7d2363fa1761cda5d5" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/72a3729a9bb74378156dcd42171e39ec348c71d7" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/72a79517b8f9b57f62dc1203a6b5eefadf27c088" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/72c363848fe754c23e1f9f2acc2f025666417d2d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/72f71befa8ebb4b2c1842aec78d840b2a4abdb85" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/73889340124f1f88859aab4e6ce36c0019a44218" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/73a6e07089ee011746c1ec3146b8a1b4b82c835e" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/7421d8acd877abd9d437ad447dfae29893cd2f37" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/7462e4d1834938e8a5fb975da6865cc7d6b225f3" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/746d9837f0fc3c989b7fe0585b8365478f1c21fc" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/746ecd23f1c41206dd4180a7afb032411f315d73" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/7487f56a435277d9bd7ef38d361e8ad7cdf62375" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/74b69a49c2df95009ff18d820bbe7fe6ae797aae" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/74cc62178f9c631dc49cf09b0ff5884322d33969" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/74eef5817db3984a020b2868f3c9979d0220c829" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/75755ae5cb0ae4f711dd15925f9f681d23408bb8" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/758ce3af56f75edb8faa20ef78ffda5511dffb3a" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/761f683f6486e3efb606bf08fa527a4c1a51f302" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/76487a234f6f7276d8eba4edabef7623a592fdf6" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/767c4f399ccca740ea3032eeade86851f12e7f9a" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/767d136ac4b3e33d9aa5320d941693e09648e59b" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/768b6302130ac824947f956e062184afaafcdbab" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/774a64c60765d78b3b980ff9a6538219d6908a3d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/77d4480781e1e1a9d5d5c02ff53fba10127f8b6a" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/77e8407dfe09892312213f7d6b2ad8a961b6b88e" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/783b1f17ae90eba0ff7728e767b56ea6885e0b28" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/78499fa2980dce2fde92b74421f486bf544cfb8f" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/788f18727a0aeb5e200527bca7c889c9954be343" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/78c3bbeaeb266aac1df0d4abe78bbca68fb085a8" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/792276ed826b9078ecfbd51e0136962f5e10ed6e" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/7957953ca449974ec39c6a137c0acdedb71c3b02" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/798fd96821ee3d91952373024f35cdceb10ccbed" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/79ac297c667d2ae77c05d2af275b05138439ee5b" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/7a0b2f8659484409af6a76d1df273b8dc66e3439" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/7abe8c414aa1418157c2d7ae5e70a84ffb61c027" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/7b4b493ac5a36d3b3fed0b66bc504206548a3537" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/7bb25e1821f1ff6ea4c85259444f7f40b430aa1f" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/7bd75ddceb75724e5e9205cf7fadec03d8e1aca2" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/7bdc25dc79ca942673e515126e22474fd89ce55e" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/7be89fb64b3d931387e8a5b1ef51bf9cda18006a" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/7bf8d2b77d85e4042e47d0dbe6da9441c6d9530b" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/7c026422a34cb34de673a1d6702cbde67d112d27" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/7c193442a422da21cdeb14f681b0d4179aaeaf5f" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/7c58daa09675ba2b11e69636bb78dc0d1343bb51" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/7c6a381eac8fbc8fccada2b2069c3f773a9c6961" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/7c70dd584df7a4fda61d08ab8ef85ec70c85b7f5" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/7c9b4e2ea03542254235893edd042a822145e504" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/7cc958be492e942df2b784fcc08a63d57c7fef92" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/7cdff0948ef64e551ad02f857acd5956d91530c9" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/7d33039255c9611d0e9e0cc7e230f87ad55c007f" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/7d6713afac17551fc2628c0f9f18c41a1aa9c2f1" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/7d88455cc77259c8bf17c1cdc0b24edf5667c79c" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/7d8eeb8778051e621abf74daf43dd4010117d9f9" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/7de73ddcb20d0940b937323599a5094bfb26ae6c" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/7e29172a1d27c4f8a0b138306db1043373b2d0ba" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/7e8f7517bb0bb95011b48f1f4f4a631d4d756a5f" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/7ec62c16916c2c30847b578d2148893924287bfe" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/7eea6a4b31c4f10281f31a7461f35af7331becf2" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/7efac665d3dabc2162f4407e3bedbd65b3007335" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/7fe7a6ab57422c40c7e0e2333c3bbb6ae6a0d9a3" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/80a249d17248e0dc7dcc9fb64d8ac2dd0320a544" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/80a56bd23287d856a653f22f57f7d1442235b713" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/0bbd89b21cfd192174c25803c7f1afeec88e6524" + "test/core/end2end/fuzzers/api_fuzzer_corpus/80b6a3cf5bb7cdeffcb6cbaaa10889168542a25a" ], "ci_platforms": [ "linux" @@ -25565,11 +34772,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/0c.bin" + "test/core/end2end/fuzzers/api_fuzzer_corpus/80ecd5087801e974eae7db730a496d2aca110648" ], "ci_platforms": [ "linux" @@ -25581,11 +34789,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/0d.bin" + "test/core/end2end/fuzzers/api_fuzzer_corpus/811533455c494627bb5b5802f4ed7a386f57cb1e" ], "ci_platforms": [ "linux" @@ -25597,11 +34806,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/0d16d6c2c128ac4ee7b596b763822b4194968533" + "test/core/end2end/fuzzers/api_fuzzer_corpus/8123e9dc4d43115412f07fcf9946c99d9a1a55c3" ], "ci_platforms": [ "linux" @@ -25613,11 +34823,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/0d8bd296d63a5aca5f80d7a7d00387048babda36" + "test/core/end2end/fuzzers/api_fuzzer_corpus/81489a0c6a71c48e9f343cb5ff8e8b5693d5df19" ], "ci_platforms": [ "linux" @@ -25629,11 +34840,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/0d9d8241c5568fea586d21f91ae1891dac31ba24" + "test/core/end2end/fuzzers/api_fuzzer_corpus/819cac3befd0d7b12ffd734c26df1cdf43c376a2" ], "ci_platforms": [ "linux" @@ -25645,11 +34857,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/0e.bin" + "test/core/end2end/fuzzers/api_fuzzer_corpus/81e64ec00272538edef6336423738277647b5ed0" ], "ci_platforms": [ "linux" @@ -25661,11 +34874,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/0e2a9ad3aacba320563095a874768a9e546a3db2" + "test/core/end2end/fuzzers/api_fuzzer_corpus/820d5ba2e9d91563dae39a1b02833fbef1e6d8f1" ], "ci_platforms": [ "linux" @@ -25677,11 +34891,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/0f.bin" + "test/core/end2end/fuzzers/api_fuzzer_corpus/82182d7a9c73a70f5eec58c03b1db511d7feb95d" ], "ci_platforms": [ "linux" @@ -25693,11 +34908,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/0f2831e0f73521a0991e11115c16847afca16bb3" + "test/core/end2end/fuzzers/api_fuzzer_corpus/839b0cad1196be563cec8e8a55184fc001b8401a" ], "ci_platforms": [ "linux" @@ -25709,11 +34925,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/0fa216ec645b3973b5e6d28baedd5acc1542e69e" + "test/core/end2end/fuzzers/api_fuzzer_corpus/83c29132911949c65d508753420708e9a0ffd6ab" ], "ci_platforms": [ "linux" @@ -25725,11 +34942,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/10302aa7598eb36d0ac22d0478eb0f2a6b010ea6" + "test/core/end2end/fuzzers/api_fuzzer_corpus/840928fe62714fdb003b3f0a40c2c4897f9d7938" ], "ci_platforms": [ "linux" @@ -25741,11 +34959,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/1109cb814fd134862a3f5ef5c9b2244585882b8f" + "test/core/end2end/fuzzers/api_fuzzer_corpus/84650393df0dca7ca3244faa7ac036873d3dcce1" ], "ci_platforms": [ "linux" @@ -25757,11 +34976,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/119410315423e5f37919886ced7f03235e5792aa" + "test/core/end2end/fuzzers/api_fuzzer_corpus/8492f54a92f9a2a05af1a078489a3a68145d8985" ], "ci_platforms": [ "linux" @@ -25773,11 +34993,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/12083209096187575021a775826b08b70b39ed4c" + "test/core/end2end/fuzzers/api_fuzzer_corpus/84c995b299f8d6fa0733d11f0b1a0b4414a7e232" ], "ci_platforms": [ "linux" @@ -25789,11 +35010,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/1254c9256157e6362003c97c8c93d8cd67a28772" + "test/core/end2end/fuzzers/api_fuzzer_corpus/85220ed0c63891f376bee53c785b407fd9548f8b" ], "ci_platforms": [ "linux" @@ -25805,11 +35027,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/12a97827d0f817e3ffd8d9cf1bdba0f945b6fda4" + "test/core/end2end/fuzzers/api_fuzzer_corpus/8554d0f8fc68c84fbd8515165a3d98aad0dfab3e" ], "ci_platforms": [ "linux" @@ -25821,11 +35044,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/12ef45f6beba92677a2a7508fc5e1bfef30ded66" + "test/core/end2end/fuzzers/api_fuzzer_corpus/856fb7cd57f36cfcc8a2cad0cf61f9fff9696776" ], "ci_platforms": [ "linux" @@ -25837,11 +35061,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/130c41e2dd87c36b4079c8e5bd380dbe3e0a2b38" + "test/core/end2end/fuzzers/api_fuzzer_corpus/85bd45792a3cf2116fab5e99e2d824ee804af843" ], "ci_platforms": [ "linux" @@ -25853,11 +35078,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/13c409dcf7752c25b2b51ac5fad9201b505d7059" + "test/core/end2end/fuzzers/api_fuzzer_corpus/8711e2f477871e3ca68642bbb388e7f473f25394" ], "ci_platforms": [ "linux" @@ -25869,11 +35095,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/143789594154049441d565b65ce725fc4f8c12bc" + "test/core/end2end/fuzzers/api_fuzzer_corpus/8713d28e8cf45d3670ad40829a83b1fc7cd41a75" ], "ci_platforms": [ "linux" @@ -25885,11 +35112,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/149044286608a7945721c61f12196bebd5adb2ee" + "test/core/end2end/fuzzers/api_fuzzer_corpus/875280c0c54d1662b07150e728f9ac0c1af7bf66" ], "ci_platforms": [ "linux" @@ -25901,11 +35129,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/157586c7c0ba8fd0dc9bfc2426229a7da934cec2" + "test/core/end2end/fuzzers/api_fuzzer_corpus/8778868ac7a23d552d93772aa8566cf427a0c1f1" ], "ci_platforms": [ "linux" @@ -25917,11 +35146,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/15c37fe5be9f23c0f0e59e12ee7666007acdb3c5" + "test/core/end2end/fuzzers/api_fuzzer_corpus/8791b58ad0dbfdf9c37d48bc60940f86c6c7e3b4" ], "ci_platforms": [ "linux" @@ -25933,11 +35163,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/1661d0799cbf2015fd64e9f648ebb49281d41c6d" + "test/core/end2end/fuzzers/api_fuzzer_corpus/87add83a18a25fe585df8adc124eae6d70733f74" ], "ci_platforms": [ "linux" @@ -25949,11 +35180,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/1671cf01e5baf796c5572b7b0e15d226a5c93f23" + "test/core/end2end/fuzzers/api_fuzzer_corpus/87e510c4dd906ec4de0066e93b2475480fc0768b" ], "ci_platforms": [ "linux" @@ -25965,11 +35197,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/16a9beb811f836a444172a5da9290b47d77c32ef" + "test/core/end2end/fuzzers/api_fuzzer_corpus/880070b48f04fd1c8ffafd750e1c4d37ff404c6c" ], "ci_platforms": [ "linux" @@ -25981,11 +35214,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/16d52016278caebf92ba455f7ac8a8c7482c3563" + "test/core/end2end/fuzzers/api_fuzzer_corpus/88139a0d01f144556ef861af4450f466081443f5" ], "ci_platforms": [ "linux" @@ -25997,11 +35231,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/173ebf4139ee6d7a574b6767059d82375674bbf4" + "test/core/end2end/fuzzers/api_fuzzer_corpus/885267691bb42bc807b6e578571430a81513eee0" ], "ci_platforms": [ "linux" @@ -26013,11 +35248,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/17cfb281eaa8a17d77e08c3648bb93f3b5aa5297" + "test/core/end2end/fuzzers/api_fuzzer_corpus/8854a331f3c5ddc4ace70e0505901e53aa48e386" ], "ci_platforms": [ "linux" @@ -26029,11 +35265,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/183c878064b6a0ddf6a22dc4a2aa0d33a2d802d0" + "test/core/end2end/fuzzers/api_fuzzer_corpus/88600f27cb602db290f07eb0e8b6f10488c0760f" ], "ci_platforms": [ "linux" @@ -26045,11 +35282,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/1887558eb48d6a4341610fd0395cef8e87744044" + "test/core/end2end/fuzzers/api_fuzzer_corpus/88be31c841a66f523045f7bd1708ce64272e4276" ], "ci_platforms": [ "linux" @@ -26061,11 +35299,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/18c856af1e2ebb934401e523043eaf80aecc8363" + "test/core/end2end/fuzzers/api_fuzzer_corpus/893ea11ec0c4425940d18a32acf23d5967d98dd9" ], "ci_platforms": [ "linux" @@ -26077,11 +35316,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/18f2d7626b6ad4859e735e448b00b6916f1d3e2e" + "test/core/end2end/fuzzers/api_fuzzer_corpus/8949e5c946cf6ec7d1981d553972d4f3a6026987" ], "ci_platforms": [ "linux" @@ -26093,11 +35333,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/19dcc3082c76b85177ce6a56d195473aaa285268" + "test/core/end2end/fuzzers/api_fuzzer_corpus/8979c4017b72b970dc33095be26788f52f37a959" ], "ci_platforms": [ "linux" @@ -26109,11 +35350,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/1a6b907bfa02ceebeb80aab47b3c3c51161eb868" + "test/core/end2end/fuzzers/api_fuzzer_corpus/8a034b07b9baf1b441c0fb0322652772973f20ff" ], "ci_platforms": [ "linux" @@ -26125,11 +35367,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/1b699132724acab3d42fb5210c07b74343449873" + "test/core/end2end/fuzzers/api_fuzzer_corpus/8a4183e6bb75036228a42039d678fca0ea6751b7" ], "ci_platforms": [ "linux" @@ -26141,11 +35384,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/1c0417c96e6408d2902ef8fe4b8cd05f1ce4a50f" + "test/core/end2end/fuzzers/api_fuzzer_corpus/8a912877743b165b233303efaf502f5092b3c5b0" ], "ci_platforms": [ "linux" @@ -26157,11 +35401,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/1c6e5ad8dbff133707cc85b05a0057abf55d08ad" + "test/core/end2end/fuzzers/api_fuzzer_corpus/8a9f7329b30a562837353767313df7fa9a1f31f7" ], "ci_platforms": [ "linux" @@ -26173,11 +35418,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/1c73564518349ebc87c4023b9d9a3cbc4fbc6cdd" + "test/core/end2end/fuzzers/api_fuzzer_corpus/8aaa277cf855a972c6dec9fc49b171ce3232a26a" ], "ci_platforms": [ "linux" @@ -26189,11 +35435,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/1c98433d827ea4aae2ba8a68c4d11bc2527cb15d" + "test/core/end2end/fuzzers/api_fuzzer_corpus/8ab19633328ea9e493dee313e135e7d851aa7911" ], "ci_platforms": [ "linux" @@ -26205,11 +35452,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/1ccd81836f26b7ececde2b02a22b19ab2a498631" + "test/core/end2end/fuzzers/api_fuzzer_corpus/8b253ba946d6768c147f5d52552e150b703437e0" ], "ci_platforms": [ "linux" @@ -26221,11 +35469,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/1d8b40b4798e652184df3bcffe1b1d7e32648f79" + "test/core/end2end/fuzzers/api_fuzzer_corpus/8b30c1f058ac421b6c51c4591ef9e4adc2886b44" ], "ci_platforms": [ "linux" @@ -26237,11 +35486,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/1e4a2a6998218ea8f475aa2ee27869207b33b612" + "test/core/end2end/fuzzers/api_fuzzer_corpus/8b37ce939cb8d42c459f5e286de980c7b62f14be" ], "ci_platforms": [ "linux" @@ -26253,11 +35503,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/1e55e5f47b550bab133099e5a98d7c751a0a2d7b" + "test/core/end2end/fuzzers/api_fuzzer_corpus/8b53f252f8558726dc0daaee84e2b4d2f0835f44" ], "ci_platforms": [ "linux" @@ -26269,11 +35520,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/1e7d2d8f6109f4c02815ce8582c799134f2ff5dc" + "test/core/end2end/fuzzers/api_fuzzer_corpus/8b7ebe7fb16e63e2584595ee77afb19359356eda" ], "ci_platforms": [ "linux" @@ -26285,11 +35537,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/1fda93a85f7b5b7a0c2d68a03123e58a6d20f124" + "test/core/end2end/fuzzers/api_fuzzer_corpus/8ba87aeecf944e0eb387f8f2d9e30964c9f860de" ], "ci_platforms": [ "linux" @@ -26301,11 +35554,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/20322515ebf6df572cb2f596d8a20d3d8893193d" + "test/core/end2end/fuzzers/api_fuzzer_corpus/8bd94413e2d60effc2806dd7153216a1b6487162" ], "ci_platforms": [ "linux" @@ -26317,11 +35571,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/207c5a0f80f052ac7b48f6dd45cd33987be27f32" + "test/core/end2end/fuzzers/api_fuzzer_corpus/8c395b9251d60823ef14014f6ad58b29968a1681" ], "ci_platforms": [ "linux" @@ -26333,11 +35588,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/2099db589f606dd8932a950280f5d2b23751af9f" + "test/core/end2end/fuzzers/api_fuzzer_corpus/8c501e1c87c42c4b7765ab027bd537ef72656605" ], "ci_platforms": [ "linux" @@ -26349,11 +35605,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/21f3be485826850e4f4670bb81982e2827815426" + "test/core/end2end/fuzzers/api_fuzzer_corpus/8c540353717db453eeb865e5b9b7f2efe6c5d5b7" ], "ci_platforms": [ "linux" @@ -26365,11 +35622,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/240afe42d3e2834c46a79d9df0dd6ca018831398" + "test/core/end2end/fuzzers/api_fuzzer_corpus/8c5bbcc6935d43c94a0c4ce4a5da01c04fd223d8" ], "ci_platforms": [ "linux" @@ -26381,11 +35639,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/24a87af0954c808fbd3f2c55185d4b1fa9459f4e" + "test/core/end2end/fuzzers/api_fuzzer_corpus/8d386a409662ef68370c0c552742bd0ea6d527d5" ], "ci_platforms": [ "linux" @@ -26397,11 +35656,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/24df70902c288fcac060365c2e6f61269a3606b4" + "test/core/end2end/fuzzers/api_fuzzer_corpus/8d7bb385d6b13b0e689a1e81e29113746218ba99" ], "ci_platforms": [ "linux" @@ -26413,11 +35673,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/2500fc12d5d1b5ed99fc3fe518c28849d1c8d6e8" + "test/core/end2end/fuzzers/api_fuzzer_corpus/8d91dd322c7972a13cb98461b0eb284116905887" ], "ci_platforms": [ "linux" @@ -26429,11 +35690,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/2501c7c3f78829725e6bf556277785588318106b" + "test/core/end2end/fuzzers/api_fuzzer_corpus/8d951b7ab0231fb1dc573433b354eac58c699c36" ], "ci_platforms": [ "linux" @@ -26445,11 +35707,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/2507810915aecd3adf1287edf8c9f54b23a8ebd5" + "test/core/end2end/fuzzers/api_fuzzer_corpus/8dab1d2d4f470c669688103f52718a7783113cf1" ], "ci_platforms": [ "linux" @@ -26461,11 +35724,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/253b8946a7cf403dd466f1685df2f741d4660a34" + "test/core/end2end/fuzzers/api_fuzzer_corpus/8dcb4dd3d2fa04ffc83f7fd7f9306ae4105ef7ef" ], "ci_platforms": [ "linux" @@ -26477,11 +35741,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/26865cd90c1461694d94d96232436372df2a91fb" + "test/core/end2end/fuzzers/api_fuzzer_corpus/8e94dd64fdbf453f06b351d6a8f77a43cc34e4bc" ], "ci_platforms": [ "linux" @@ -26493,11 +35758,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/2743ee5a764fb0c4e04cdf84c9b3810ac8093998" + "test/core/end2end/fuzzers/api_fuzzer_corpus/8ea86819b4ac803bb12fd6b63e6496238aa329c1" ], "ci_platforms": [ "linux" @@ -26509,11 +35775,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/2748d28f2e03d740a89f7a50ea52450d0c5523f1" + "test/core/end2end/fuzzers/api_fuzzer_corpus/8ebddbd256887fb5fe1be69a46023b34f815d2e8" ], "ci_platforms": [ "linux" @@ -26525,11 +35792,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/2837baed2fbf1612f88224e91ddc46241dd9d972" + "test/core/end2end/fuzzers/api_fuzzer_corpus/8edad87970b31dad2b23184d864fe5ad9efb05e5" ], "ci_platforms": [ "linux" @@ -26541,11 +35809,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/28f8c7af6aab3bbabe028f780e174b27b924a146" + "test/core/end2end/fuzzers/api_fuzzer_corpus/8f4187ea7f2efbcd933fdb2b0652b71ecaff7822" ], "ci_platforms": [ "linux" @@ -26557,11 +35826,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/2942908b7973da7113098a0ea25487e3372db173" + "test/core/end2end/fuzzers/api_fuzzer_corpus/8f43b11f10961dcce8eaa8340c96d10bdbc937ad" ], "ci_platforms": [ "linux" @@ -26573,11 +35843,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/296c3f5b9880fe7ccff4d2a67f489b38b5b6fd6e" + "test/core/end2end/fuzzers/api_fuzzer_corpus/8f8b66436bade06813ec9ed4fce6774914b73db3" ], "ci_platforms": [ "linux" @@ -26589,11 +35860,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/2a600cae342e8e9e23406bb1e76133f48d936766" + "test/core/end2end/fuzzers/api_fuzzer_corpus/8ff5277cdbe1417da64bfdb342747a23f5e4f956" ], "ci_platforms": [ "linux" @@ -26605,11 +35877,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/2ab009994e603404e194ebe0120840d388fb765e" + "test/core/end2end/fuzzers/api_fuzzer_corpus/901c9a33205897999e7e78063ccdc5d363267568" ], "ci_platforms": [ "linux" @@ -26621,11 +35894,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/2ad5ed48b598bd9e2d486a21eed5314736e5b56a" + "test/core/end2end/fuzzers/api_fuzzer_corpus/90230730fae07c8eeb6b5bd571a119b486a21473" ], "ci_platforms": [ "linux" @@ -26637,11 +35911,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/2aee21e4d1175963fa719d376406bb10d4818bdd" + "test/core/end2end/fuzzers/api_fuzzer_corpus/9080684608701e015c764f643dc45fa939d86ed3" ], "ci_platforms": [ "linux" @@ -26653,11 +35928,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/2af392765963966f2d1ddd5d5af4fcadd93c3b06" + "test/core/end2end/fuzzers/api_fuzzer_corpus/90cd72030567bddbce06152fa0af1a024d542fa7" ], "ci_platforms": [ "linux" @@ -26669,11 +35945,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/2af4e625522d128d03252f35b5fa5094cbcebc9f" + "test/core/end2end/fuzzers/api_fuzzer_corpus/91e2f574e7ceb7f69a93011aac68903cd014a6c7" ], "ci_platforms": [ "linux" @@ -26685,11 +35962,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/2b931953e9bd02c3310a05234e91550bcd8ddf62" + "test/core/end2end/fuzzers/api_fuzzer_corpus/92273cf09f18534ae700c1f35dfab49faa091c54" ], "ci_platforms": [ "linux" @@ -26701,11 +35979,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/2b933a0ede25a06e32c7d9cc5a3eda78086f3060" + "test/core/end2end/fuzzers/api_fuzzer_corpus/929980ce480ca47855bdebb8f6ebef7fa447fd5b" ], "ci_platforms": [ "linux" @@ -26717,11 +35996,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/2bbe5b2c12a964b53a5e6f78cdd5f595d95082a9" + "test/core/end2end/fuzzers/api_fuzzer_corpus/92d44998655e82d89a614c7b6a2f08c5fc7f8805" ], "ci_platforms": [ "linux" @@ -26733,11 +36013,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/2bc326b3ecf6d069595bc27cc1bca76b374c8e85" + "test/core/end2end/fuzzers/api_fuzzer_corpus/92ec3b6722dde442121b3d1ed3ef23976c72cba8" ], "ci_platforms": [ "linux" @@ -26749,11 +36030,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/2c917a39d34aad10d611a1647a6df6502b4d4d59" + "test/core/end2end/fuzzers/api_fuzzer_corpus/9379dd6ade6947a59a1786435a2d55a705161ae5" ], "ci_platforms": [ "linux" @@ -26765,11 +36047,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/2d61ec2cff75eadbc47e0932998b8a797e0cd96c" + "test/core/end2end/fuzzers/api_fuzzer_corpus/940a622e8995529f6b0455906d8a035902682d2d" ], "ci_platforms": [ "linux" @@ -26781,11 +36064,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/2d9440daa210b9298f34982dcf7adc3564ad965c" + "test/core/end2end/fuzzers/api_fuzzer_corpus/940e35bed3ff2b52a29e5b15acf9fe39772eb5de" ], "ci_platforms": [ "linux" @@ -26797,11 +36081,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/2d974f9fd1c57bce55cb9f1bbc25eb1e7a10454b" + "test/core/end2end/fuzzers/api_fuzzer_corpus/94571a4b13c435117ef9bd914443ce9a07da8e3f" ], "ci_platforms": [ "linux" @@ -26813,11 +36098,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/2db3a358c43c179a728f0650a00be295e88f8060" + "test/core/end2end/fuzzers/api_fuzzer_corpus/950511efda7aea60b3bfae95e31683210a88792c" ], "ci_platforms": [ "linux" @@ -26829,11 +36115,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/2e21a2f9bff2514667aaec75629c82daa067ff57" + "test/core/end2end/fuzzers/api_fuzzer_corpus/9538327ef9f0a8d380a473bd25114b6859acf9b7" ], "ci_platforms": [ "linux" @@ -26845,11 +36132,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/2e82bfb7e8eede401ce75f6afe8c15ffd06130db" + "test/core/end2end/fuzzers/api_fuzzer_corpus/95940316e7104e9c2d5123b31e36b2dfd12fcea2" ], "ci_platforms": [ "linux" @@ -26861,11 +36149,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/2f0a8f0f96402ba1681ab3a9095a3dea47cdc53f" + "test/core/end2end/fuzzers/api_fuzzer_corpus/95dd85860bde08e1d0ecef805ad55f66008923af" ], "ci_platforms": [ "linux" @@ -26877,11 +36166,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/2f120ceed5250084f62010df9bf8fe8e8f3f643b" + "test/core/end2end/fuzzers/api_fuzzer_corpus/95f223f8964d294aafc2a6041a83cfa7761c31ab" ], "ci_platforms": [ "linux" @@ -26893,11 +36183,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/2f44fd38efef5818750f9adc9b133e40f9cdec71" + "test/core/end2end/fuzzers/api_fuzzer_corpus/9629c00d91e6146b29f7559a944e6bf8dce7d0f1" ], "ci_platforms": [ "linux" @@ -26909,11 +36200,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/2f57224df35ff1583d14436a477330db23d70b0a" + "test/core/end2end/fuzzers/api_fuzzer_corpus/9629c9a0c98f15eec2b7fd114fa5ff9ff5c61a19" ], "ci_platforms": [ "linux" @@ -26925,11 +36217,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/2fa6a874e625ca4d71941408d94698f898be4ea1" + "test/core/end2end/fuzzers/api_fuzzer_corpus/96a6293d4fc97c75f037bdb0f73dc5b62bbfa2e6" ], "ci_platforms": [ "linux" @@ -26941,11 +36234,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/301c057536319f49dcec68ab96677714e3dbf793" + "test/core/end2end/fuzzers/api_fuzzer_corpus/96a80511d8ef3ffdd370a3cc9467713a538259bb" ], "ci_platforms": [ "linux" @@ -26957,11 +36251,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/30694ac08ff5a6a10cc781b9042c89f4019cfe0a" + "test/core/end2end/fuzzers/api_fuzzer_corpus/97011f865fcf9c57560d5ed3cb05883ff298ee35" ], "ci_platforms": [ "linux" @@ -26973,11 +36268,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/307a91e344b94923837e01a1657ff277f44db07d" + "test/core/end2end/fuzzers/api_fuzzer_corpus/97440beca022cd5799f76654d8bec51f62c0bbaf" ], "ci_platforms": [ "linux" @@ -26989,11 +36285,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/30fbe0ac4c74e2be3edd4f21b72bcae02e6c623f" + "test/core/end2end/fuzzers/api_fuzzer_corpus/976613cb09127a752d628c4a3cf73b8e3168e0af" ], "ci_platforms": [ "linux" @@ -27005,11 +36302,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/313001e1cc15ef9887b43e0c6de398eea2f20e00" + "test/core/end2end/fuzzers/api_fuzzer_corpus/97817475213736527fdc3b2a28cd45f52fe4ce1a" ], "ci_platforms": [ "linux" @@ -27021,11 +36319,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/31429d04a34cc6643eebed7eeb8a807a83b57b1f" + "test/core/end2end/fuzzers/api_fuzzer_corpus/97efcb1f37032ebf01b4b1065a9df66590b7051f" ], "ci_platforms": [ "linux" @@ -27037,11 +36336,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/3230d9876d770657d86dfb768b80494cda52abc8" + "test/core/end2end/fuzzers/api_fuzzer_corpus/980f0198dc66e867b1a5d04cf24bc02fbdf3b839" ], "ci_platforms": [ "linux" @@ -27053,11 +36353,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/32594aaa716c1a04b0f927ef964f1593735cb289" + "test/core/end2end/fuzzers/api_fuzzer_corpus/984b6ee241b92be62923c6dc5bacaadb36183b89" ], "ci_platforms": [ "linux" @@ -27069,11 +36370,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/32b9de8461fd32b1236abb86abc91c82652d6e2c" + "test/core/end2end/fuzzers/api_fuzzer_corpus/98569dc166bfcfef45a66db4de1c0f34340c269c" ], "ci_platforms": [ "linux" @@ -27085,11 +36387,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/32c108ead009572fbe9a216b372e5c0b3843238e" + "test/core/end2end/fuzzers/api_fuzzer_corpus/988bd333d5dabe1561cf4429e7481ff110be0da4" ], "ci_platforms": [ "linux" @@ -27101,11 +36404,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/3399ac8bb9e0d3a2cbf22a95d1e20c70e2415e41" + "test/core/end2end/fuzzers/api_fuzzer_corpus/98b88c0751f1d9e5dc3d4751d2cb52ed8f0b008d" ], "ci_platforms": [ "linux" @@ -27117,11 +36421,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/342d148e59fb500ad76d583cf828c16cd3d3ed2e" + "test/core/end2end/fuzzers/api_fuzzer_corpus/98cdb5ba5725c6b2ed39fc514401fe987fc2d9af" ], "ci_platforms": [ "linux" @@ -27133,11 +36438,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/3465fb573ac3c59a0804aadeba2f205870abcc3d" + "test/core/end2end/fuzzers/api_fuzzer_corpus/9989534524a212092e9d7fede16106b586c434f4" ], "ci_platforms": [ "linux" @@ -27149,11 +36455,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/364f77bffd55805e2be9d2b3a071012e8fc3a083" + "test/core/end2end/fuzzers/api_fuzzer_corpus/999737edf1e9740df084c4326ec983137ccd7111" ], "ci_platforms": [ "linux" @@ -27165,11 +36472,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/368d2b5d4c6776afbed8e5e76cc3a4ccdde1df42" + "test/core/end2end/fuzzers/api_fuzzer_corpus/99e8f2ea80ed1d5a78fd5236e89d404bb0c03940" ], "ci_platforms": [ "linux" @@ -27181,11 +36489,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/383043f6c05edc5a18f5c8e7b9d0314db63eab5e" + "test/core/end2end/fuzzers/api_fuzzer_corpus/9a0de0d63d44e00fc88e6cb88f4b8665db3b4b5e" ], "ci_platforms": [ "linux" @@ -27197,11 +36506,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/3850b085a0a33fa2a08630dddb03e0f1adb1bee9" + "test/core/end2end/fuzzers/api_fuzzer_corpus/9a0f0818ff9fbfd81e0d0eadeef7b85ca2d4fd46" ], "ci_platforms": [ "linux" @@ -27213,11 +36523,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/38a55e83e685617cdf72e95f1303857b627ae346" + "test/core/end2end/fuzzers/api_fuzzer_corpus/9a24710002a240ad32b7adb5310f4970c09cc8ca" ], "ci_platforms": [ "linux" @@ -27229,11 +36540,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/38c609f72f5a2cf977788afef9c34652f754add0" + "test/core/end2end/fuzzers/api_fuzzer_corpus/9a425eda58b05407e671f6b86a6664eb728843cb" ], "ci_platforms": [ "linux" @@ -27245,11 +36557,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/3a287590e2d38d5dbc0b85d29ae2497d27aa0305" + "test/core/end2end/fuzzers/api_fuzzer_corpus/9a9af9f266737f95cfedbf5c8fcea22660c3f085" ], "ci_platforms": [ "linux" @@ -27261,11 +36574,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/3a4fa4e81b78cae093b2d53b0a6f272a398a7cda" + "test/core/end2end/fuzzers/api_fuzzer_corpus/9ab3be55bd49749439f7aa1bfe2d178ad663b003" ], "ci_platforms": [ "linux" @@ -27277,11 +36591,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/3aee5ced2869452b8ed65313d01b9b9c87144cd4" + "test/core/end2end/fuzzers/api_fuzzer_corpus/9addda4c7a9940fbbda2218ec58560c10e1df9f7" ], "ci_platforms": [ "linux" @@ -27293,11 +36608,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/3b002ab57ff8080fbb1e72d985ca6f59f96a171e" + "test/core/end2end/fuzzers/api_fuzzer_corpus/9b5b436057dfcf4299e52ad49c74e45ef04be7a2" ], "ci_platforms": [ "linux" @@ -27309,11 +36625,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/3c84d21c46b89e7573750dd4517ea2eb58e37e27" + "test/core/end2end/fuzzers/api_fuzzer_corpus/9b6f00dd2752afbd223aad960168e4e535330d30" ], "ci_platforms": [ "linux" @@ -27325,11 +36642,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/3c8e6352f6c2a07bd5ef2b9a93c103935c8eaf0d" + "test/core/end2end/fuzzers/api_fuzzer_corpus/9bc5b4a9a81905cbc7ee4a25482068dcab93898d" ], "ci_platforms": [ "linux" @@ -27341,11 +36659,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/3d8c66be71e0ae0dfb0c2c7b84e4d8336f92b7ab" + "test/core/end2end/fuzzers/api_fuzzer_corpus/9bfd723bfa4162bb5801a6050af0a8b2db10d4ab" ], "ci_platforms": [ "linux" @@ -27357,11 +36676,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/3dedcaf501bc9718e5d372862b081fc9fdfb3959" + "test/core/end2end/fuzzers/api_fuzzer_corpus/9c0911c1a4b91f842670082c14af67d1f4b7bb6f" ], "ci_platforms": [ "linux" @@ -27373,11 +36693,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/3df06a68edfc53fa88634c657a50cc6820354165" + "test/core/end2end/fuzzers/api_fuzzer_corpus/9c5538a5492013e6bdbcce2a373be19fc97c4f20" ], "ci_platforms": [ "linux" @@ -27389,11 +36710,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/3f36ae935255c4bbd2bd8d4a85bfa92bba02225c" + "test/core/end2end/fuzzers/api_fuzzer_corpus/9c837f4e6cb572b3431b3a5065b889273712810e" ], "ci_platforms": [ "linux" @@ -27405,11 +36727,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/3f47ad9ab401599f42d3c4f37ab9f702e3ff0fc9" + "test/core/end2end/fuzzers/api_fuzzer_corpus/9cb91ce75745cc30995b8985a35ea31db766e54c" ], "ci_platforms": [ "linux" @@ -27421,11 +36744,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/40b4b92460c4e76a39af9042fb3d86d491a98e16" + "test/core/end2end/fuzzers/api_fuzzer_corpus/9d004fd9a35647ba7ec169e6fedbf9dce5f9623f" ], "ci_platforms": [ "linux" @@ -27437,11 +36761,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/42324d3d9e013cd43d4feeed1b48fbe1ea18a732" + "test/core/end2end/fuzzers/api_fuzzer_corpus/9d69b6fb15c861c294878da8aaf16a531dfb1b70" ], "ci_platforms": [ "linux" @@ -27453,11 +36778,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/42a8e7c267f66a0747f30b4053ec79325074dc97" + "test/core/end2end/fuzzers/api_fuzzer_corpus/9d74922516d210da71d40395f17a3cef4161894d" ], "ci_platforms": [ "linux" @@ -27469,11 +36795,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/42c3c4a4e7d21e79d1e36494d5324f10a5ecbb04" + "test/core/end2end/fuzzers/api_fuzzer_corpus/9d91fac343dd8a7848746ca5472fb1452052bfb7" ], "ci_platforms": [ "linux" @@ -27485,11 +36812,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/43676969fb81dcc1699b6a17eb465ef3cd4c2ab8" + "test/core/end2end/fuzzers/api_fuzzer_corpus/9dd25a6857d92ef52169ec95a0cdfbc8570b6d99" ], "ci_platforms": [ "linux" @@ -27501,11 +36829,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/439d4e4ed3ab9fe77e2bbda5b2be3d123beefa00" + "test/core/end2end/fuzzers/api_fuzzer_corpus/9e48b3aa2c25dbbab21148bdac91b5169ce088bf" ], "ci_platforms": [ "linux" @@ -27517,11 +36846,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/441c94c010d19206c337d3c850cc449523ab480d" + "test/core/end2end/fuzzers/api_fuzzer_corpus/9ebd34b96faba2fea70a50533df78a8c1dc35247" ], "ci_platforms": [ "linux" @@ -27533,11 +36863,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/4449ec3eda232c394fad83e34b002e9bb46862e1" + "test/core/end2end/fuzzers/api_fuzzer_corpus/9f00c8665f3918e666d424ee67a2556f2651d64f" ], "ci_platforms": [ "linux" @@ -27549,11 +36880,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/449ece0109a8543f26311f3ddc23525a2f288b64" + "test/core/end2end/fuzzers/api_fuzzer_corpus/9f1db4144e46f913ca02e0abe2ccd5c7481e2a92" ], "ci_platforms": [ "linux" @@ -27565,11 +36897,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/44bf16b9eb7302a6b02a600ac92dadf916c4e629" + "test/core/end2end/fuzzers/api_fuzzer_corpus/9f43969c0777a021539b59eafdac9dd2f51422d5" ], "ci_platforms": [ "linux" @@ -27581,11 +36914,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/44e1fdcc46db56bf61a6702fd10766b56d35bc74" + "test/core/end2end/fuzzers/api_fuzzer_corpus/9f643e51d8e91e7e0348017d98078f078a1790b9" ], "ci_platforms": [ "linux" @@ -27597,11 +36931,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/45657516294c5426c490e6aa522a79077c972856" + "test/core/end2end/fuzzers/api_fuzzer_corpus/9f77859f13bbe482011164f7a5e1a2a77d8596f2" ], "ci_platforms": [ "linux" @@ -27613,11 +36948,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/465b299ab3509b61016406e0d1d93f7774c03c8c" + "test/core/end2end/fuzzers/api_fuzzer_corpus/9f86fc902ca36482d09f6c11e821b79bfc0b98cc" ], "ci_platforms": [ "linux" @@ -27629,11 +36965,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/46efabc911aab09a5e7a34a19ef97ce710594a77" + "test/core/end2end/fuzzers/api_fuzzer_corpus/9fb07d3aba4e2d39eff7d31111515d7df2c981ab" ], "ci_platforms": [ "linux" @@ -27645,11 +36982,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/472adcbc2a1970f2392e596c28bd44087b8f3431" + "test/core/end2end/fuzzers/api_fuzzer_corpus/a074a30fc5c627e8093a8f860d67661df22f8148" ], "ci_platforms": [ "linux" @@ -27661,11 +36999,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/47e402f3386843e0055431750f30b710e10295dd" + "test/core/end2end/fuzzers/api_fuzzer_corpus/a0e80579e201495c2337292a3508b2d220e9737a" ], "ci_platforms": [ "linux" @@ -27677,11 +37016,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/47ecf4079ea23d4de5fd9282f733eb5429f7ab05" + "test/core/end2end/fuzzers/api_fuzzer_corpus/a10775155c8eb3a834d067c0978753513d5e1d75" ], "ci_platforms": [ "linux" @@ -27693,11 +37033,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/484ab9d070fffe7e3d1a1704c9fa2ce01e192450" + "test/core/end2end/fuzzers/api_fuzzer_corpus/a18ed3861270cd42a661211d9d970c488fed46ad" ], "ci_platforms": [ "linux" @@ -27709,11 +37050,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/4905b3fb0f7d2196a5612e8e432abda666e4317d" + "test/core/end2end/fuzzers/api_fuzzer_corpus/a1b04c2504a75f50d47875bd1db804cef3674cf0" ], "ci_platforms": [ "linux" @@ -27725,11 +37067,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/490f5aa97dc05ef1ce089fa9d4fd377bacafcf18" + "test/core/end2end/fuzzers/api_fuzzer_corpus/a1b153e4cde45a7302094f6c751e3248d2f0fb8e" ], "ci_platforms": [ "linux" @@ -27741,11 +37084,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/4a3eae69f4c5dc768b166620af348316c9fac3e6" + "test/core/end2end/fuzzers/api_fuzzer_corpus/a1dffc6b0fabef88188bc4c140bc2d331d73f997" ], "ci_platforms": [ "linux" @@ -27757,11 +37101,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/4c3dcb9cb14f89b3616fc7cca78f2ebc502907eb" + "test/core/end2end/fuzzers/api_fuzzer_corpus/a1f6961a480f1eb49b394118b05b9cdabfb6f0a3" ], "ci_platforms": [ "linux" @@ -27773,11 +37118,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/4c686a41d4d2226b3cc76b8154d8df090d075f00" + "test/core/end2end/fuzzers/api_fuzzer_corpus/a25eb9c166a097ea3afa590e3584eb9986bd9445" ], "ci_platforms": [ "linux" @@ -27789,11 +37135,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/4d472e5a8e8ee92be6f23a101babbc601dd2512c" + "test/core/end2end/fuzzers/api_fuzzer_corpus/a2ac5153026b26fcbea42786e238b15017a684be" ], "ci_platforms": [ "linux" @@ -27805,11 +37152,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/4d4aa6ddd6404300e5278682e560f25292e9804e" + "test/core/end2end/fuzzers/api_fuzzer_corpus/a3026496fa01a4cae2682da4b3e7cfae09929698" ], "ci_platforms": [ "linux" @@ -27821,11 +37169,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/4e36813fde9b5de1b62de95f498f2e0a48b5c5f7" + "test/core/end2end/fuzzers/api_fuzzer_corpus/a36a156c5ed8a55aec450393deaed66c0e9117c9" ], "ci_platforms": [ "linux" @@ -27837,11 +37186,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/4ef22ea5b0aa8b80a180a9654f5aef121c5aad83" + "test/core/end2end/fuzzers/api_fuzzer_corpus/a380f7e56171dc69269afb6364216bc69925eb8a" ], "ci_platforms": [ "linux" @@ -27853,11 +37203,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/4f53cc7b3ed0c77c3b5e4478f54caa40e0bf64b6" + "test/core/end2end/fuzzers/api_fuzzer_corpus/a3926a25374714a71c8bd515564d294df229c7cf" ], "ci_platforms": [ "linux" @@ -27869,11 +37220,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/5000fa3e29de15e7533b0e04b37eb1985ae69891" + "test/core/end2end/fuzzers/api_fuzzer_corpus/a3c9b6e89b534d02bdad07207c4fdcda536f28a4" ], "ci_platforms": [ "linux" @@ -27885,11 +37237,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/50841095cafd9f9de6684fb3d89cd5fe148494ef" + "test/core/end2end/fuzzers/api_fuzzer_corpus/a3cc00f1a2020ff2e2d53bc91a212b5fdbe5c006" ], "ci_platforms": [ "linux" @@ -27901,11 +37254,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/50bfe6100bf11339372ba29fe0c9b38c3ec2ebf0" + "test/core/end2end/fuzzers/api_fuzzer_corpus/a3d52dfd05da328d3f109d125e6c1a15470eab06" ], "ci_platforms": [ "linux" @@ -27917,11 +37271,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/51d7466ac65468db7094bdedc60d1604231acc05" + "test/core/end2end/fuzzers/api_fuzzer_corpus/a41e8b175a837b55e540874c3f056a9d9535866c" ], "ci_platforms": [ "linux" @@ -27933,11 +37288,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/51ed796a5f8d8fccebe013ccccdc1ed5d8b8b4c0" + "test/core/end2end/fuzzers/api_fuzzer_corpus/a4d41bf7bce38a255a431912f6b57637645221e8" ], "ci_platforms": [ "linux" @@ -27949,11 +37305,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/528cc09294d2288fc91a4bab7cf6ec621c6621b0" + "test/core/end2end/fuzzers/api_fuzzer_corpus/a55fb292d4e1ffcdaf933f2dbdd8410628eb7acc" ], "ci_platforms": [ "linux" @@ -27965,11 +37322,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/5298ce28a7eab28c99964c0d838b017355607c92" + "test/core/end2end/fuzzers/api_fuzzer_corpus/a619bb6ff4871fab3045e46bef8036f80d605f37" ], "ci_platforms": [ "linux" @@ -27981,11 +37339,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/52dba1b997f903c5fa3d7da71421b36d96d9f55c" + "test/core/end2end/fuzzers/api_fuzzer_corpus/a62960425c597cf5d2bd38e9412363991479837f" ], "ci_platforms": [ "linux" @@ -27997,11 +37356,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/53e68cd362f3c8d64941efbb0b527c52da5e8424" + "test/core/end2end/fuzzers/api_fuzzer_corpus/a64136997cd4c4be7d93f10fd6a1d12cdc22691c" ], "ci_platforms": [ "linux" @@ -28013,11 +37373,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/546fe2e2b1e2756c3f121d0545866798c85c9b8b" + "test/core/end2end/fuzzers/api_fuzzer_corpus/a6541e0f317553947d53cfb9318367aff2898ad5" ], "ci_platforms": [ "linux" @@ -28029,11 +37390,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/54a0a2c37ce1830f241f6e2828adc8057cfa385f" + "test/core/end2end/fuzzers/api_fuzzer_corpus/a6914c7bbe81fd2138bc20e63b27c0cadd0471ee" ], "ci_platforms": [ "linux" @@ -28045,11 +37407,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/55ed466781b547db5957233bd8db0ce1f189183f" + "test/core/end2end/fuzzers/api_fuzzer_corpus/a693801403d7721b5b3d7d4525cc0b830ab35e06" ], "ci_platforms": [ "linux" @@ -28061,11 +37424,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/5677b3500e9353856c8d87fbe1476a22df4231f8" + "test/core/end2end/fuzzers/api_fuzzer_corpus/a6f614d434a1fe2162f7872100baef21b2051b53" ], "ci_platforms": [ "linux" @@ -28077,11 +37441,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/56f3ca8174d263240113de88e7547e7b1c5cb2cf" + "test/core/end2end/fuzzers/api_fuzzer_corpus/a78a65e7bd4c3cf41fce74155e97a758658fe8b4" ], "ci_platforms": [ "linux" @@ -28093,11 +37458,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/57798cc4375de344391221fd07d591f5c64d646d" + "test/core/end2end/fuzzers/api_fuzzer_corpus/a8115b0be87517139447c9fefc33e225f2efdf32" ], "ci_platforms": [ "linux" @@ -28109,11 +37475,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/57da1745490c2f21ecb86370f1f72f77752bc739" + "test/core/end2end/fuzzers/api_fuzzer_corpus/a8d353c157cc3788a86a0d572adcc7744e7e902a" ], "ci_platforms": [ "linux" @@ -28125,11 +37492,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/57dea4528141649208fa2af10c18e98e80c1758b" + "test/core/end2end/fuzzers/api_fuzzer_corpus/a8f87a7038125bd0e3b753c2a42ebdc3e4c75cba" ], "ci_platforms": [ "linux" @@ -28141,11 +37509,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/588f9166c839baf3102185d38f77f9a750e62c7f" + "test/core/end2end/fuzzers/api_fuzzer_corpus/a9548cec37ad3c54d4bff10c9127db3638065d77" ], "ci_platforms": [ "linux" @@ -28157,11 +37526,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/5939ec5fd8f4e02ff0720cfa3ef685876bb3549d" + "test/core/end2end/fuzzers/api_fuzzer_corpus/a967ca556a517366de03b8a9d21e991783f0896c" ], "ci_platforms": [ "linux" @@ -28173,11 +37543,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/594d676c8c05d75ba8587d9e900850dff5e21ff8" + "test/core/end2end/fuzzers/api_fuzzer_corpus/a96e54f84588c424c5ff2615fb0745684a11de39" ], "ci_platforms": [ "linux" @@ -28189,11 +37560,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/595603f4ed37e3716cbe53b3ef180e5cdf8005f0" + "test/core/end2end/fuzzers/api_fuzzer_corpus/a994ed559126fb75d245d34816a727d8585045ac" ], "ci_platforms": [ "linux" @@ -28205,11 +37577,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/5a3c9d98651a315b5bde737482ff54f6b90361e0" + "test/core/end2end/fuzzers/api_fuzzer_corpus/aa6e8ab6cab71f0d7fe316a19c47fbeba5351315" ], "ci_platforms": [ "linux" @@ -28221,11 +37594,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/5a6491ab9c23fae58967d4a4b5d5cfb23f620001" + "test/core/end2end/fuzzers/api_fuzzer_corpus/aa926963580066aa503c5433dad9889fabc4ee08" ], "ci_platforms": [ "linux" @@ -28237,11 +37611,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/5a85c9bd6a6d7a2f753dd315e4747fc0249c8799" + "test/core/end2end/fuzzers/api_fuzzer_corpus/aabcb4ea803e0b5399cb7a2cca8d28baa3f6c4ae" ], "ci_platforms": [ "linux" @@ -28253,11 +37628,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/5a8ca84c7d4d9b055f05c55b1f707f223979d387" + "test/core/end2end/fuzzers/api_fuzzer_corpus/aaf2bf9eaf71df9e0c597335e8d6f8c2d370b093" ], "ci_platforms": [ "linux" @@ -28269,11 +37645,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/5be956066b72ea1799e333a7bd17fb0b8fc2b91c" + "test/core/end2end/fuzzers/api_fuzzer_corpus/ab013aca29d6027d443e9dc0c550a26e7a23f01d" ], "ci_platforms": [ "linux" @@ -28285,11 +37662,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/5d0137a19ae57cfdf5172a8b51e8ea0a0a893690" + "test/core/end2end/fuzzers/api_fuzzer_corpus/ab1a75a7dec4c780749be5afa45fdb9e7e7907ee" ], "ci_platforms": [ "linux" @@ -28301,11 +37679,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/5d2f29b31d78b47077b15779d620747034d18c05" + "test/core/end2end/fuzzers/api_fuzzer_corpus/ab4a63521f8afd81d6f5bf117597039cb02d453a" ], "ci_platforms": [ "linux" @@ -28317,11 +37696,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/5d765c856a9a8650e1b17813340b9b6ba0989b58" + "test/core/end2end/fuzzers/api_fuzzer_corpus/ab850ea6858b0b4798d8d8c60cf7d715b9064c85" ], "ci_platforms": [ "linux" @@ -28333,11 +37713,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/5e1391f44f904fa54e66ec174e4c8879921e842a" + "test/core/end2end/fuzzers/api_fuzzer_corpus/ab8c19341f57f87c38055a9aaee515f8e65a33f3" ], "ci_platforms": [ "linux" @@ -28349,11 +37730,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/5ea01efbec747fc55ae29eb2b779f00889ca6922" + "test/core/end2end/fuzzers/api_fuzzer_corpus/abaca8e8237d5add7e35752471688233d265efc2" ], "ci_platforms": [ "linux" @@ -28365,11 +37747,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/60e8618c075ec5fd47a1699271c6da1b5befd579" + "test/core/end2end/fuzzers/api_fuzzer_corpus/abbd9f85ad500d55dda6009681ddffca1849b632" ], "ci_platforms": [ "linux" @@ -28381,11 +37764,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/6184ea16753b0827f728285f18dad4b3bde00024" + "test/core/end2end/fuzzers/api_fuzzer_corpus/abcfa029d3eb7c016a162e78e7351f64b9905a42" ], "ci_platforms": [ "linux" @@ -28397,11 +37781,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/6186bfc21ff7df3982e5d9757e5c7160da0f493a" + "test/core/end2end/fuzzers/api_fuzzer_corpus/abdb7891569085e3df0f6c7a5348c12bf3dd1ae0" ], "ci_platforms": [ "linux" @@ -28413,11 +37798,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/6230cce2862a18c4c92dc6fb4e034a1d15e1ff18" + "test/core/end2end/fuzzers/api_fuzzer_corpus/abe27eee1a472ac0dafe73619602ff44bf7d0657" ], "ci_platforms": [ "linux" @@ -28429,11 +37815,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/62fbfe90a1b9ac471bc2644c896f64515f6b3c7e" + "test/core/end2end/fuzzers/api_fuzzer_corpus/acb49fc7f5d61f15e2e0b8f391678365381c5ab9" ], "ci_platforms": [ "linux" @@ -28445,11 +37832,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/638c36cfe098b98008e594eddf90fdacfc078fae" + "test/core/end2end/fuzzers/api_fuzzer_corpus/ad6369d2c51c4787778ff9dbd86cc6df44312f1d" ], "ci_platforms": [ "linux" @@ -28461,11 +37849,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/6421db654fff309bc191aba0330fbcd1347655e3" + "test/core/end2end/fuzzers/api_fuzzer_corpus/ad8f14d76933f67a10d9e8442eaa1b88b2395cd7" ], "ci_platforms": [ "linux" @@ -28477,11 +37866,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/646c501021c79bf6eb1a39a9bcc82e018f31bca2" + "test/core/end2end/fuzzers/api_fuzzer_corpus/ada998a4b5a9895f514ddbf8da775f5c59736021" ], "ci_platforms": [ "linux" @@ -28493,11 +37883,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/64c572e594c2d491a902e8fdff7b617ac0c6881b" + "test/core/end2end/fuzzers/api_fuzzer_corpus/af042d0ae8cd624acfa12788ffc0154e6f49394b" ], "ci_platforms": [ "linux" @@ -28509,11 +37900,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/64eb970cc80162a4b80d49364f4227db3429e156" + "test/core/end2end/fuzzers/api_fuzzer_corpus/af0a181159725d308833841738c5d14d478228e8" ], "ci_platforms": [ "linux" @@ -28525,11 +37917,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/655b880459e6e00100727af9df52b64f6d77a653" + "test/core/end2end/fuzzers/api_fuzzer_corpus/af1fbe820d92608782360791113393055c171da0" ], "ci_platforms": [ "linux" @@ -28541,11 +37934,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/660c071578cbdccb503317ecbf2fd331bc4ac82d" + "test/core/end2end/fuzzers/api_fuzzer_corpus/af990e5c81c307c188a79f4cdfdae4e8e15dc4a2" ], "ci_platforms": [ "linux" @@ -28557,11 +37951,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/66ac31199d08e7a3b066059cd409457a850847b2" + "test/core/end2end/fuzzers/api_fuzzer_corpus/aff1fdfe79c104bce110cec92e1e021caf012fde" ], "ci_platforms": [ "linux" @@ -28573,11 +37968,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/66ef59d5da68fdb5e55b60fc8a8a764afb021b4b" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b05cbc7820c94bb3ee46dd3869ea39923338b4ba" ], "ci_platforms": [ "linux" @@ -28589,11 +37985,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/682cb8ad9fe4641e7a140ae3d3ee27c841ba397f" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b0ff62377b87b846f720a70f0b7f7bdc76aa1315" ], "ci_platforms": [ "linux" @@ -28605,11 +38002,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/6914f5f380c83ff9e3e90fc60d5048e47e5e77d9" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b12be9771ea0f5b687f50fa9abe5cb8bb688fa6a" ], "ci_platforms": [ "linux" @@ -28621,11 +38019,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/696ea30e2e1490f2f31b153641b2c29152ded5c2" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b23f1233d0e21c4aaaebe2fe5931903698b2408c" ], "ci_platforms": [ "linux" @@ -28637,11 +38036,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/6a10118289fe7179c4e9bb6a1b466ba34c582bfb" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b2432248370f7590e894c54f2dd13fe9df9fa53e" ], "ci_platforms": [ "linux" @@ -28653,11 +38053,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/6bfbea131237606756a12f275e736045c0956536" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b262c677b8c46262f1fc4982f5abf4ef603abe1c" ], "ci_platforms": [ "linux" @@ -28669,11 +38070,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/6c1c2177f3483086607c717d0c6c35a81d79e18e" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b29d3c87c76355ce07ea4d4c354bf9d40294abb3" ], "ci_platforms": [ "linux" @@ -28685,11 +38087,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/6ded157ecd3fce79fa69c51ee9ecb4639013e6ba" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b2af0db70de3a6ddcb188d1f6f2a673133a8f9c7" ], "ci_platforms": [ "linux" @@ -28701,11 +38104,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/6e1cf196e7c8ad4226d89f3ca2c6f7949598bec2" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b2f450dc86671548200a1fe6ee0ee76171edc578" ], "ci_platforms": [ "linux" @@ -28717,11 +38121,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/6ef96bc0c5b6ab5f8a4453b9cf5784fd55e3b59f" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b33f833f291ebba4d777c2bae51193553c27d138" ], "ci_platforms": [ "linux" @@ -28733,11 +38138,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/6f88ae246aa4af9c74732d87a758ba5ca0f40caf" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b35f51d95f597075bb93cd9d2135870fe0a73486" ], "ci_platforms": [ "linux" @@ -28749,11 +38155,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/6f8ffc96f9ebe390929165e32bdc187afb7a40ce" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b37ab56aacf7fea7dcade26810117c45e6041068" ], "ci_platforms": [ "linux" @@ -28765,11 +38172,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/70bd921a3d4700d49ad6b99e0cfee42c36a13b3a" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b37f3e85a80b5dcde6b48b46f162418fd2ee83ec" ], "ci_platforms": [ "linux" @@ -28781,11 +38189,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/710f61e5765c91bcf9cf2e07264771cf2feae48d" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b3b9e307ce3af6fa515a33668374e15fcc909ae5" ], "ci_platforms": [ "linux" @@ -28797,11 +38206,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/71c01818823d5c5fd8a3d1cb4c5db4aca51efdb2" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b4037205abce710935a93d656f69928ecc814b50" ], "ci_platforms": [ "linux" @@ -28813,11 +38223,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/71e2b03b503dbbdc0d2e724c562b9f1c77f972fa" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b436d6ea729dd071f87b21819cf1f32979216aee" ], "ci_platforms": [ "linux" @@ -28829,11 +38240,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/7240f3408714c2dcdcb448f234efef4f08e6b2fb" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b46794fb4115e84da13a79153b2ea44d89d952a5" ], "ci_platforms": [ "linux" @@ -28845,11 +38257,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/727f43500183aec9c0d9be7d2363fa1761cda5d5" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b49df296137b4c86eef0fd5fc55bbdd1cb3c4a7e" ], "ci_platforms": [ "linux" @@ -28861,11 +38274,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/72a3729a9bb74378156dcd42171e39ec348c71d7" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b4dfbd50da81516e8afcd93def813b4b813c3ae1" ], "ci_platforms": [ "linux" @@ -28877,11 +38291,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/72c363848fe754c23e1f9f2acc2f025666417d2d" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b51853fe4f799f7f959922fda1b3500668a45157" ], "ci_platforms": [ "linux" @@ -28893,11 +38308,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/73889340124f1f88859aab4e6ce36c0019a44218" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b56db2235df5a81ff15d0c07612de7eee0272304" ], "ci_platforms": [ "linux" @@ -28909,11 +38325,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/7462e4d1834938e8a5fb975da6865cc7d6b225f3" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b5bcc7f39420e997ec6f8e3c70ef49b8f1afb361" ], "ci_platforms": [ "linux" @@ -28925,11 +38342,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/74b69a49c2df95009ff18d820bbe7fe6ae797aae" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b5bec1a19e2ca2394f2c3235266c22a7167bfa5d" ], "ci_platforms": [ "linux" @@ -28941,11 +38359,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/74cc62178f9c631dc49cf09b0ff5884322d33969" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b5daec8e0821e8626c9b93ece56ccfef0511346b" ], "ci_platforms": [ "linux" @@ -28957,11 +38376,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/74eef5817db3984a020b2868f3c9979d0220c829" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b5dfbf1965f794634249cc6be9d20d2a9fc6e332" ], "ci_platforms": [ "linux" @@ -28973,11 +38393,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/758ce3af56f75edb8faa20ef78ffda5511dffb3a" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b61f6be57dd30d8c76aae7b966ffee26093f49ea" ], "ci_platforms": [ "linux" @@ -28989,11 +38410,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/761f683f6486e3efb606bf08fa527a4c1a51f302" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b6694ec2d425e8ce6ad9ff712a999fabfa5ce113" ], "ci_platforms": [ "linux" @@ -29005,11 +38427,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/76487a234f6f7276d8eba4edabef7623a592fdf6" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b6c47632d8d697f9f2923bde053f7a5571150705" ], "ci_platforms": [ "linux" @@ -29021,11 +38444,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/767c4f399ccca740ea3032eeade86851f12e7f9a" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b766e4a3e84ee0a2f57fccbc3a7f7f812b2032d3" ], "ci_platforms": [ "linux" @@ -29037,11 +38461,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/767d136ac4b3e33d9aa5320d941693e09648e59b" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b77ca0306f700c8c88854e73ccbdf470fba3f820" ], "ci_platforms": [ "linux" @@ -29053,11 +38478,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/768b6302130ac824947f956e062184afaafcdbab" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b792b464ceb568355e80a4588a3ae1b43f05a34d" ], "ci_platforms": [ "linux" @@ -29069,11 +38495,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/77d4480781e1e1a9d5d5c02ff53fba10127f8b6a" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b7f282fbd77193d822df9c8156370398e1fd099c" ], "ci_platforms": [ "linux" @@ -29085,11 +38512,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/77e8407dfe09892312213f7d6b2ad8a961b6b88e" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b821e8d3e12441e1120723cf4eda4d939794b17f" ], "ci_platforms": [ "linux" @@ -29101,11 +38529,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/792276ed826b9078ecfbd51e0136962f5e10ed6e" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b892c064b2703ac0dc31766946be487b197a541e" ], "ci_platforms": [ "linux" @@ -29117,11 +38546,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/7a0b2f8659484409af6a76d1df273b8dc66e3439" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b8a74cc440fbfaa2a523f20ca964976bde128fd0" ], "ci_platforms": [ "linux" @@ -29133,11 +38563,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/7abe8c414aa1418157c2d7ae5e70a84ffb61c027" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b8cd185f946c392f8fb5adca4851043df849ac6e" ], "ci_platforms": [ "linux" @@ -29149,11 +38580,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/7be89fb64b3d931387e8a5b1ef51bf9cda18006a" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b8d0be707d9505c0e63253904979492c22cd9fdc" ], "ci_platforms": [ "linux" @@ -29165,11 +38597,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/7c026422a34cb34de673a1d6702cbde67d112d27" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b8e06536840e31a343b3a42b677d623bacfccd99" ], "ci_platforms": [ "linux" @@ -29181,11 +38614,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/7c58daa09675ba2b11e69636bb78dc0d1343bb51" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b8ea2247c5b1636148fa66fdce22ed1cc72b6bdd" ], "ci_platforms": [ "linux" @@ -29197,11 +38631,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/7c9b4e2ea03542254235893edd042a822145e504" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b9318513eb6b1db553855cd062ebbd4d1db9b846" ], "ci_platforms": [ "linux" @@ -29213,11 +38648,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/7cdff0948ef64e551ad02f857acd5956d91530c9" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b93e4c7538558dfe92d2925646029b5dafe653d0" ], "ci_platforms": [ "linux" @@ -29229,11 +38665,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/7d33039255c9611d0e9e0cc7e230f87ad55c007f" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b94adf31dbe157a38e8b3a873658b8dace55f517" ], "ci_platforms": [ "linux" @@ -29245,11 +38682,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/7d6713afac17551fc2628c0f9f18c41a1aa9c2f1" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b95899d40afc4b3ff87af2285b61ba66939873fa" ], "ci_platforms": [ "linux" @@ -29261,11 +38699,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/7d88455cc77259c8bf17c1cdc0b24edf5667c79c" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b96fd7809c6f18c465e834a96dd60b43b32fac73" ], "ci_platforms": [ "linux" @@ -29277,11 +38716,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/7de73ddcb20d0940b937323599a5094bfb26ae6c" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b98ef7107754379c22a3ad59cffa3183e0804c0e" ], "ci_platforms": [ "linux" @@ -29293,11 +38733,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/7e8f7517bb0bb95011b48f1f4f4a631d4d756a5f" + "test/core/end2end/fuzzers/api_fuzzer_corpus/b9913b354096dbe1796814e2cea80addef6ee386" ], "ci_platforms": [ "linux" @@ -29309,11 +38750,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/80a249d17248e0dc7dcc9fb64d8ac2dd0320a544" + "test/core/end2end/fuzzers/api_fuzzer_corpus/ba3d174125e7378292fcbad9bfe8129dabf88b3a" ], "ci_platforms": [ "linux" @@ -29325,11 +38767,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/80a56bd23287d856a653f22f57f7d1442235b713" + "test/core/end2end/fuzzers/api_fuzzer_corpus/baab31938837e1a3cb49ca12fb886fcbb7d48501" ], "ci_platforms": [ "linux" @@ -29341,11 +38784,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/80b6a3cf5bb7cdeffcb6cbaaa10889168542a25a" + "test/core/end2end/fuzzers/api_fuzzer_corpus/bac43cd2ed1dbf3a89a0c66d8983b586066ef463" ], "ci_platforms": [ "linux" @@ -29357,11 +38801,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/811533455c494627bb5b5802f4ed7a386f57cb1e" + "test/core/end2end/fuzzers/api_fuzzer_corpus/bad.bin" ], "ci_platforms": [ "linux" @@ -29373,11 +38818,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/8123e9dc4d43115412f07fcf9946c99d9a1a55c3" + "test/core/end2end/fuzzers/api_fuzzer_corpus/bb2affdc830241ebea35795fed3bc8d478330eec" ], "ci_platforms": [ "linux" @@ -29389,11 +38835,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/820d5ba2e9d91563dae39a1b02833fbef1e6d8f1" + "test/core/end2end/fuzzers/api_fuzzer_corpus/bb349c691efa909b4c5412b9210e1acf4a4b7505" ], "ci_platforms": [ "linux" @@ -29405,11 +38852,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/83c29132911949c65d508753420708e9a0ffd6ab" + "test/core/end2end/fuzzers/api_fuzzer_corpus/bb54fde05891ecc235263ad087cfd9682a25f76d" ], "ci_platforms": [ "linux" @@ -29421,11 +38869,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/8492f54a92f9a2a05af1a078489a3a68145d8985" + "test/core/end2end/fuzzers/api_fuzzer_corpus/bba4073cde10ba7abaac18d6303e310d02a47826" ], "ci_platforms": [ "linux" @@ -29437,11 +38886,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/84c995b299f8d6fa0733d11f0b1a0b4414a7e232" + "test/core/end2end/fuzzers/api_fuzzer_corpus/bbf053837b7e0e2adc868be62fc91248b8dce176" ], "ci_platforms": [ "linux" @@ -29453,11 +38903,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/85220ed0c63891f376bee53c785b407fd9548f8b" + "test/core/end2end/fuzzers/api_fuzzer_corpus/bbf7ccb14d60a1d4fa79e572464c687530ca6c2a" ], "ci_platforms": [ "linux" @@ -29469,11 +38920,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/8554d0f8fc68c84fbd8515165a3d98aad0dfab3e" + "test/core/end2end/fuzzers/api_fuzzer_corpus/bc2967ecf8402d442ef63ca451497431932a7e57" ], "ci_platforms": [ "linux" @@ -29485,11 +38937,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/856fb7cd57f36cfcc8a2cad0cf61f9fff9696776" + "test/core/end2end/fuzzers/api_fuzzer_corpus/bc5e743f85f6632110277f09847381a402e1624c" ], "ci_platforms": [ "linux" @@ -29501,11 +38954,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/8711e2f477871e3ca68642bbb388e7f473f25394" + "test/core/end2end/fuzzers/api_fuzzer_corpus/bc6770a9bad24599ea4970735e9b17702a12b651" ], "ci_platforms": [ "linux" @@ -29517,11 +38971,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/8713d28e8cf45d3670ad40829a83b1fc7cd41a75" + "test/core/end2end/fuzzers/api_fuzzer_corpus/bc7f0b79a1781772d7f48e168462f99da27b03e2" ], "ci_platforms": [ "linux" @@ -29533,11 +38988,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/8778868ac7a23d552d93772aa8566cf427a0c1f1" + "test/core/end2end/fuzzers/api_fuzzer_corpus/bc8dd89f31fa5e89cabace6d7701d2a218f97aed" ], "ci_platforms": [ "linux" @@ -29549,11 +39005,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/8791b58ad0dbfdf9c37d48bc60940f86c6c7e3b4" + "test/core/end2end/fuzzers/api_fuzzer_corpus/bc96b9415e9bb48d27f37d91c51d10ec08139974" ], "ci_platforms": [ "linux" @@ -29565,11 +39022,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/87add83a18a25fe585df8adc124eae6d70733f74" + "test/core/end2end/fuzzers/api_fuzzer_corpus/bc9b5b6ba4b6ccbb9e5ff75edd0df8eef9c36d4c" ], "ci_platforms": [ "linux" @@ -29581,11 +39039,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/880070b48f04fd1c8ffafd750e1c4d37ff404c6c" + "test/core/end2end/fuzzers/api_fuzzer_corpus/bcae3229d884c5cfc36ae28c672f9b960e30042f" ], "ci_platforms": [ "linux" @@ -29597,11 +39056,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/885267691bb42bc807b6e578571430a81513eee0" + "test/core/end2end/fuzzers/api_fuzzer_corpus/bcc7eb464ff05cd0cd2669611776e55ca4dcb2b4" ], "ci_platforms": [ "linux" @@ -29613,11 +39073,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/88be31c841a66f523045f7bd1708ce64272e4276" + "test/core/end2end/fuzzers/api_fuzzer_corpus/bd04c9dc7eaf030313d4c87f190a9d973b96ac2d" ], "ci_platforms": [ "linux" @@ -29629,11 +39090,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/893ea11ec0c4425940d18a32acf23d5967d98dd9" + "test/core/end2end/fuzzers/api_fuzzer_corpus/bd1ed73f6cf97f980d23ff2e9f4f4e78b80bda57" ], "ci_platforms": [ "linux" @@ -29645,11 +39107,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/8949e5c946cf6ec7d1981d553972d4f3a6026987" + "test/core/end2end/fuzzers/api_fuzzer_corpus/bd459204c5fee8000abc7d895a317028351d0dec" ], "ci_platforms": [ "linux" @@ -29661,11 +39124,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/8a034b07b9baf1b441c0fb0322652772973f20ff" + "test/core/end2end/fuzzers/api_fuzzer_corpus/bd4786be14d852c68e605eaefa782f79064f32e2" ], "ci_platforms": [ "linux" @@ -29677,11 +39141,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/8a912877743b165b233303efaf502f5092b3c5b0" + "test/core/end2end/fuzzers/api_fuzzer_corpus/bd585e031f586c4313c6b00e5f247f6b272ce902" ], "ci_platforms": [ "linux" @@ -29693,11 +39158,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/8a9f7329b30a562837353767313df7fa9a1f31f7" + "test/core/end2end/fuzzers/api_fuzzer_corpus/bd5c6df9c2cfaa96d768b1fe6e8fff57bf1d02c9" ], "ci_platforms": [ "linux" @@ -29709,11 +39175,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/8b253ba946d6768c147f5d52552e150b703437e0" + "test/core/end2end/fuzzers/api_fuzzer_corpus/bd7314ef323557ccf3a97c1b1ba4bed0a9b24de2" ], "ci_platforms": [ "linux" @@ -29725,11 +39192,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/8b53f252f8558726dc0daaee84e2b4d2f0835f44" + "test/core/end2end/fuzzers/api_fuzzer_corpus/bd891b3b4256f1c4207c3bbe5bd86f5e90a49ee2" ], "ci_platforms": [ "linux" @@ -29741,11 +39209,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/8b7ebe7fb16e63e2584595ee77afb19359356eda" + "test/core/end2end/fuzzers/api_fuzzer_corpus/bdab9cab03ad7aa611612e02775018112303d3cd" ], "ci_platforms": [ "linux" @@ -29757,11 +39226,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/8c501e1c87c42c4b7765ab027bd537ef72656605" + "test/core/end2end/fuzzers/api_fuzzer_corpus/bde8a553b10a613c32f800429a07f0b5a2d37e53" ], "ci_platforms": [ "linux" @@ -29773,11 +39243,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/8c5bbcc6935d43c94a0c4ce4a5da01c04fd223d8" + "test/core/end2end/fuzzers/api_fuzzer_corpus/be0ccf7b9b4581e01a42e9cad6343c93ccf6f362" ], "ci_platforms": [ "linux" @@ -29789,11 +39260,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/8d7bb385d6b13b0e689a1e81e29113746218ba99" + "test/core/end2end/fuzzers/api_fuzzer_corpus/be29c4d0b6568b06c69fc339ac29890baac569de" ], "ci_platforms": [ "linux" @@ -29805,11 +39277,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/8d951b7ab0231fb1dc573433b354eac58c699c36" + "test/core/end2end/fuzzers/api_fuzzer_corpus/be40890ee61e101a7429d53cd9ffd59ee600e0f6" ], "ci_platforms": [ "linux" @@ -29821,11 +39294,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/8e94dd64fdbf453f06b351d6a8f77a43cc34e4bc" + "test/core/end2end/fuzzers/api_fuzzer_corpus/be757e0ca581bb4ec14fbba6e87569f93f4c7750" ], "ci_platforms": [ "linux" @@ -29837,11 +39311,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/8ea86819b4ac803bb12fd6b63e6496238aa329c1" + "test/core/end2end/fuzzers/api_fuzzer_corpus/be8114a7bd73ce15fe0495171234d0af526e41f1" ], "ci_platforms": [ "linux" @@ -29853,11 +39328,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/8f43b11f10961dcce8eaa8340c96d10bdbc937ad" + "test/core/end2end/fuzzers/api_fuzzer_corpus/becdf72b57104cede4a1fc7b7a4c97a3cbf3b7b4" ], "ci_platforms": [ "linux" @@ -29869,11 +39345,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/8f8b66436bade06813ec9ed4fce6774914b73db3" + "test/core/end2end/fuzzers/api_fuzzer_corpus/bef8cedf1a792786a027114c85a89a1bef3155c4" ], "ci_platforms": [ "linux" @@ -29885,11 +39362,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/8ff5277cdbe1417da64bfdb342747a23f5e4f956" + "test/core/end2end/fuzzers/api_fuzzer_corpus/beff7e2d09ef0547a3b1a498311c665954d8baea" ], "ci_platforms": [ "linux" @@ -29901,11 +39379,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/901c9a33205897999e7e78063ccdc5d363267568" + "test/core/end2end/fuzzers/api_fuzzer_corpus/bf0d70e0d09e5c2ddd79b55dbabdd58b385307f2" ], "ci_platforms": [ "linux" @@ -29917,11 +39396,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/90230730fae07c8eeb6b5bd571a119b486a21473" + "test/core/end2end/fuzzers/api_fuzzer_corpus/bfe2840aecee88c5301aedd16a6ac8cea0262005" ], "ci_platforms": [ "linux" @@ -29933,11 +39413,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/90cd72030567bddbce06152fa0af1a024d542fa7" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c004d2a6d36524db9e0c18c5df6170366dd2b6f1" ], "ci_platforms": [ "linux" @@ -29949,11 +39430,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/91e2f574e7ceb7f69a93011aac68903cd014a6c7" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c061aa42448363b548d90cbf4a7660fb2b043518" ], "ci_platforms": [ "linux" @@ -29965,11 +39447,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/92273cf09f18534ae700c1f35dfab49faa091c54" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c0bb5f00fc14ea4f2000f75e6d1d94f23e6203f6" ], "ci_platforms": [ "linux" @@ -29981,11 +39464,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/929980ce480ca47855bdebb8f6ebef7fa447fd5b" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c0e04f5709338a500b3be166714ed7b0013c17d0" ], "ci_platforms": [ "linux" @@ -29997,11 +39481,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/9379dd6ade6947a59a1786435a2d55a705161ae5" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c11e6f232cfdc5fffffa2c79150b5647704912c0" ], "ci_platforms": [ "linux" @@ -30013,11 +39498,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/950511efda7aea60b3bfae95e31683210a88792c" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c16876cdc8ab36ef7083bf4579849ee94239af0f" ], "ci_platforms": [ "linux" @@ -30029,11 +39515,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/9538327ef9f0a8d380a473bd25114b6859acf9b7" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c17ca23726e7bca7b0d92398f827cfb25c7f0d40" ], "ci_platforms": [ "linux" @@ -30045,11 +39532,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/9629c9a0c98f15eec2b7fd114fa5ff9ff5c61a19" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c1937db2c3dff32ff22a53a8b76614602cf41d73" ], "ci_platforms": [ "linux" @@ -30061,11 +39549,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/96a80511d8ef3ffdd370a3cc9467713a538259bb" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c1ac67facfa4ca5ad92c3eed576a59d41558480f" ], "ci_platforms": [ "linux" @@ -30077,11 +39566,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/984b6ee241b92be62923c6dc5bacaadb36183b89" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c1d33a370a8ec2c2ea380472cc49172c679fa5bc" ], "ci_platforms": [ "linux" @@ -30093,11 +39583,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/98b88c0751f1d9e5dc3d4751d2cb52ed8f0b008d" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c1d84db44208d08a84084986094aeac3eebfe3b8" ], "ci_platforms": [ "linux" @@ -30109,11 +39600,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/9a0de0d63d44e00fc88e6cb88f4b8665db3b4b5e" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c259fba0af17dd1636501feddd52e501b51c4137" ], "ci_platforms": [ "linux" @@ -30125,11 +39617,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/9a24710002a240ad32b7adb5310f4970c09cc8ca" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c29f63aa5c4462b359c9028b6e6031dc088d7d46" ], "ci_platforms": [ "linux" @@ -30141,11 +39634,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/9a425eda58b05407e671f6b86a6664eb728843cb" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c2d14ed959df62d2f6dbe46c71489bed68e3c0f0" ], "ci_platforms": [ "linux" @@ -30157,11 +39651,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/9b6f00dd2752afbd223aad960168e4e535330d30" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c2eb3287f8b83c9281826e3c773ca347056ee115" ], "ci_platforms": [ "linux" @@ -30173,11 +39668,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/9bc5b4a9a81905cbc7ee4a25482068dcab93898d" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c32029d5683ad5cfa1af3b534c53bc2f7f513f50" ], "ci_platforms": [ "linux" @@ -30189,11 +39685,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/9bfd723bfa4162bb5801a6050af0a8b2db10d4ab" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c343ddb31042500e460861abc70e98ce3088ceed" ], "ci_platforms": [ "linux" @@ -30205,11 +39702,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/9c0911c1a4b91f842670082c14af67d1f4b7bb6f" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c370cb2ce56d1006fea0af1a823042927c0cfa07" ], "ci_platforms": [ "linux" @@ -30221,11 +39719,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/9c5538a5492013e6bdbcce2a373be19fc97c4f20" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c3ade78c7fea61ed2e2cd843f9c551b107ae050f" ], "ci_platforms": [ "linux" @@ -30237,11 +39736,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/9c837f4e6cb572b3431b3a5065b889273712810e" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c40e43a76f0c493414386dd90ab892042a6914d2" ], "ci_platforms": [ "linux" @@ -30253,11 +39753,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/9d91fac343dd8a7848746ca5472fb1452052bfb7" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c45cc40cc387134dec06733a01bde8fc44a2c9d9" ], "ci_platforms": [ "linux" @@ -30269,11 +39770,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/9ebd34b96faba2fea70a50533df78a8c1dc35247" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c4a63251d65cb186242e7aba5ab3d4709d3f0065" ], "ci_platforms": [ "linux" @@ -30285,11 +39787,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/9f1db4144e46f913ca02e0abe2ccd5c7481e2a92" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c4b438b82ac86439296c31dd7de86a753034c807" ], "ci_platforms": [ "linux" @@ -30301,11 +39804,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/9f77859f13bbe482011164f7a5e1a2a77d8596f2" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c5154ce0384c3becaf12f83c51114bb3ccd0b673" ], "ci_platforms": [ "linux" @@ -30317,11 +39821,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/9fb07d3aba4e2d39eff7d31111515d7df2c981ab" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c53efcb830c4ae5cba7b3e0803635445e1469103" ], "ci_platforms": [ "linux" @@ -30333,11 +39838,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/a074a30fc5c627e8093a8f860d67661df22f8148" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c5446cba5971d6f44ee93097a21c1b8936f4020a" ], "ci_platforms": [ "linux" @@ -30349,11 +39855,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/a10775155c8eb3a834d067c0978753513d5e1d75" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c56726277ddeb233e30b6223158042aafb944191" ], "ci_platforms": [ "linux" @@ -30365,11 +39872,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/a1b04c2504a75f50d47875bd1db804cef3674cf0" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c5e5b4c1e4e2bae55c1355950c3c7a593cb3fc04" ], "ci_platforms": [ "linux" @@ -30381,11 +39889,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/a1b153e4cde45a7302094f6c751e3248d2f0fb8e" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c6733483e94f755f1cbf796f8aa3d10a2c371aa3" ], "ci_platforms": [ "linux" @@ -30397,11 +39906,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/a1dffc6b0fabef88188bc4c140bc2d331d73f997" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c69863dd21c782e609d6ecdb9150f887a0f39989" ], "ci_platforms": [ "linux" @@ -30413,11 +39923,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/a25eb9c166a097ea3afa590e3584eb9986bd9445" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c73e85bdaa195d9659ae9b08995a9fb716f9c92a" ], "ci_platforms": [ "linux" @@ -30429,11 +39940,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/a2ac5153026b26fcbea42786e238b15017a684be" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c73fbc2e78f496b5666da99bccac9445ac9feeac" ], "ci_platforms": [ "linux" @@ -30445,11 +39957,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/a3026496fa01a4cae2682da4b3e7cfae09929698" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c76a1cca503160ca659aad6f7a05ca8fe5db439e" ], "ci_platforms": [ "linux" @@ -30461,11 +39974,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/a3c9b6e89b534d02bdad07207c4fdcda536f28a4" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c7c13a37189ce2482f5517f6ef0903431194e11b" ], "ci_platforms": [ "linux" @@ -30477,11 +39991,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/a3cc00f1a2020ff2e2d53bc91a212b5fdbe5c006" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c837e4dc49146de843c9556c1b3c886abb552db7" ], "ci_platforms": [ "linux" @@ -30493,11 +40008,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/a55fb292d4e1ffcdaf933f2dbdd8410628eb7acc" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c8f0972dabb904bc6d35ed576fc9a49eb2ed5273" ], "ci_platforms": [ "linux" @@ -30509,11 +40025,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/a6914c7bbe81fd2138bc20e63b27c0cadd0471ee" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c918b9e3e9cdfdb21d94ef0fba85b25f3ed9d098" ], "ci_platforms": [ "linux" @@ -30525,11 +40042,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/a693801403d7721b5b3d7d4525cc0b830ab35e06" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c93f16b5b678d3019eb05bd0774598e7d34e9b3b" ], "ci_platforms": [ "linux" @@ -30541,11 +40059,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/a6f614d434a1fe2162f7872100baef21b2051b53" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c957b37c99c5bb22b2c1f6dd050c57e685505599" ], "ci_platforms": [ "linux" @@ -30557,11 +40076,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/a78a65e7bd4c3cf41fce74155e97a758658fe8b4" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c978dc651b961f2d48aad95b40ac761b3467f212" ], "ci_platforms": [ "linux" @@ -30573,11 +40093,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/a8d353c157cc3788a86a0d572adcc7744e7e902a" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c97c41c0c76a901f458bf9b4d785fb53fe8a2980" ], "ci_platforms": [ "linux" @@ -30589,11 +40110,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/a8f87a7038125bd0e3b753c2a42ebdc3e4c75cba" + "test/core/end2end/fuzzers/api_fuzzer_corpus/c9bda5eb1a93526b4809d147647cc78452988e29" ], "ci_platforms": [ "linux" @@ -30605,11 +40127,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/a9548cec37ad3c54d4bff10c9127db3638065d77" + "test/core/end2end/fuzzers/api_fuzzer_corpus/ca086cf78308275212c52012f06edf3b4152204a" ], "ci_platforms": [ "linux" @@ -30621,11 +40144,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/a967ca556a517366de03b8a9d21e991783f0896c" + "test/core/end2end/fuzzers/api_fuzzer_corpus/ca418a61964cb360014b574fe29aa20b193df04f" ], "ci_platforms": [ "linux" @@ -30637,11 +40161,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/a96e54f84588c424c5ff2615fb0745684a11de39" + "test/core/end2end/fuzzers/api_fuzzer_corpus/ca6add6699d063e2212335264ad3e004327afc1a" ], "ci_platforms": [ "linux" @@ -30653,11 +40178,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/a994ed559126fb75d245d34816a727d8585045ac" + "test/core/end2end/fuzzers/api_fuzzer_corpus/ca6b20544c093b14703410d792c8f73e73205bce" ], "ci_platforms": [ "linux" @@ -30669,11 +40195,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/aa926963580066aa503c5433dad9889fabc4ee08" + "test/core/end2end/fuzzers/api_fuzzer_corpus/cb9a688f0dbc2015c77920f344e2d029c87384ff" ], "ci_platforms": [ "linux" @@ -30685,11 +40212,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/aabcb4ea803e0b5399cb7a2cca8d28baa3f6c4ae" + "test/core/end2end/fuzzers/api_fuzzer_corpus/cc34f9a0d85a22556faffadf90182f7c44bf168a" ], "ci_platforms": [ "linux" @@ -30701,11 +40229,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/aaf2bf9eaf71df9e0c597335e8d6f8c2d370b093" + "test/core/end2end/fuzzers/api_fuzzer_corpus/cc7087fd7c7398e7c2afe3fb03e705262b5e843a" ], "ci_platforms": [ "linux" @@ -30717,11 +40246,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/ab013aca29d6027d443e9dc0c550a26e7a23f01d" + "test/core/end2end/fuzzers/api_fuzzer_corpus/cca20202993dda83570ac83c0b1967ce225c78b9" ], "ci_platforms": [ "linux" @@ -30733,11 +40263,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/ab1a75a7dec4c780749be5afa45fdb9e7e7907ee" + "test/core/end2end/fuzzers/api_fuzzer_corpus/ccdff5940d61b708f67fcc55dc26ac1ad4f4c298" ], "ci_platforms": [ "linux" @@ -30749,11 +40280,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/ab4a63521f8afd81d6f5bf117597039cb02d453a" + "test/core/end2end/fuzzers/api_fuzzer_corpus/cd0e7c4cd361b786b6f27c481ed601fd373cb221" ], "ci_platforms": [ "linux" @@ -30765,11 +40297,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/ab850ea6858b0b4798d8d8c60cf7d715b9064c85" + "test/core/end2end/fuzzers/api_fuzzer_corpus/cd4f2c59f0cf55d9a73fb0b96d701c784c446048" ], "ci_platforms": [ "linux" @@ -30781,11 +40314,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/ab8c19341f57f87c38055a9aaee515f8e65a33f3" + "test/core/end2end/fuzzers/api_fuzzer_corpus/cd779b587b80719e2838853c2eac8d4595c0faa4" ], "ci_platforms": [ "linux" @@ -30797,11 +40331,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/abe27eee1a472ac0dafe73619602ff44bf7d0657" + "test/core/end2end/fuzzers/api_fuzzer_corpus/cdc064f39a9a67210b1be6b195d38d5d0d73eaa0" ], "ci_platforms": [ "linux" @@ -30813,11 +40348,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/acb49fc7f5d61f15e2e0b8f391678365381c5ab9" + "test/core/end2end/fuzzers/api_fuzzer_corpus/ce02561c4cfd1ec7e272cf81678149350f8a066c" ], "ci_platforms": [ "linux" @@ -30829,11 +40365,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/ad8f14d76933f67a10d9e8442eaa1b88b2395cd7" + "test/core/end2end/fuzzers/api_fuzzer_corpus/ceecce905981d8291a79fe32f89e8be688dfee7e" ], "ci_platforms": [ "linux" @@ -30845,11 +40382,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/af042d0ae8cd624acfa12788ffc0154e6f49394b" + "test/core/end2end/fuzzers/api_fuzzer_corpus/cf26c6969c0f649a2ccd780edb8b3dc314ff7701" ], "ci_platforms": [ "linux" @@ -30861,11 +40399,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/af0a181159725d308833841738c5d14d478228e8" + "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-0a0ee428270236e707457b9560a91c233ed2326c" ], "ci_platforms": [ "linux" @@ -30877,11 +40416,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/b05cbc7820c94bb3ee46dd3869ea39923338b4ba" + "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-0b1b50227d01f99998b01ed218f5d4dc3839d44f" ], "ci_platforms": [ "linux" @@ -30893,11 +40433,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/b0ff62377b87b846f720a70f0b7f7bdc76aa1315" + "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-14359c8f754c2ecdae21deeeec033ae10360033a" ], "ci_platforms": [ "linux" @@ -30909,11 +40450,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/b12be9771ea0f5b687f50fa9abe5cb8bb688fa6a" + "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-1b9aeaf762bb1a972dda8f3a455df2628efd693b" ], "ci_platforms": [ "linux" @@ -30925,11 +40467,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/b23f1233d0e21c4aaaebe2fe5931903698b2408c" + "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-1bc1a02532d212c8975e0cdcd5127c98fcaf752b" ], "ci_platforms": [ "linux" @@ -30941,11 +40484,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/b29d3c87c76355ce07ea4d4c354bf9d40294abb3" + "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-212c3b09f310867e1e8ffa7faecac75c12f4cda3" ], "ci_platforms": [ "linux" @@ -30957,11 +40501,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/b33f833f291ebba4d777c2bae51193553c27d138" + "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-2ccee0e61103a767acec12b9146d478202b93b27" ], "ci_platforms": [ "linux" @@ -30973,11 +40518,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/b37f3e85a80b5dcde6b48b46f162418fd2ee83ec" + "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-2f1092c48db455fbe1ae5e275f8d221dc8c52f00" ], "ci_platforms": [ "linux" @@ -30989,11 +40535,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/b3b9e307ce3af6fa515a33668374e15fcc909ae5" + "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-4ae4941b4c3f857966a0e3c05f789a0a5ae15bbf" ], "ci_platforms": [ "linux" @@ -31005,11 +40552,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/b4037205abce710935a93d656f69928ecc814b50" + "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-4e4d7a383785c83b78ed6597bfed360079a49a08" ], "ci_platforms": [ "linux" @@ -31021,11 +40569,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/b436d6ea729dd071f87b21819cf1f32979216aee" + "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-5c774460d2dc7ae9d471ef4b87609b13e4e95219" ], "ci_platforms": [ "linux" @@ -31037,11 +40586,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/b46794fb4115e84da13a79153b2ea44d89d952a5" + "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-6db86c556caf542fe8c3345ef396467b1d609d32" ], "ci_platforms": [ "linux" @@ -31053,11 +40603,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/b49df296137b4c86eef0fd5fc55bbdd1cb3c4a7e" + "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-72ab4efc255cfc55ed03c1002187a68e2e18e33b" ], "ci_platforms": [ "linux" @@ -31069,11 +40620,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/b4dfbd50da81516e8afcd93def813b4b813c3ae1" + "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-7ca23a3e10cdbf579cf81a50e51af358f86631eb" ], "ci_platforms": [ "linux" @@ -31085,11 +40637,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/b51853fe4f799f7f959922fda1b3500668a45157" + "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-82b2ae1d2174f5782b32c89ce60f68bf5a30c0e1" ], "ci_platforms": [ "linux" @@ -31101,11 +40654,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/b56db2235df5a81ff15d0c07612de7eee0272304" + "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-89e1b03278bad9790ae0f8614a8389414d1eab37" ], "ci_platforms": [ "linux" @@ -31117,11 +40671,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/b5bcc7f39420e997ec6f8e3c70ef49b8f1afb361" + "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-8ab0b6e57b90ab4c6b8d5de8278464eb428f4668" ], "ci_platforms": [ "linux" @@ -31133,11 +40688,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/b5daec8e0821e8626c9b93ece56ccfef0511346b" + "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-8e2e3975a865fb107fff8060f4f949aa235727d5" ], "ci_platforms": [ "linux" @@ -31149,11 +40705,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/b61f6be57dd30d8c76aae7b966ffee26093f49ea" + "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-916f6ab61cd358be9a241e2eb09851f700335eda" ], "ci_platforms": [ "linux" @@ -31165,11 +40722,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/b766e4a3e84ee0a2f57fccbc3a7f7f812b2032d3" + "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-97ec5404605d0d7bed44c2b845e06f6d9479c152" ], "ci_platforms": [ "linux" @@ -31181,11 +40739,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/b77ca0306f700c8c88854e73ccbdf470fba3f820" + "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-9862337313ff89e8dd6fbd6f870a568ec4bd6ecc" ], "ci_platforms": [ "linux" @@ -31197,11 +40756,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/b792b464ceb568355e80a4588a3ae1b43f05a34d" + "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-9e53b8c6ea7f6ae5c53e5834c50eac8e9f33259a" ], "ci_platforms": [ "linux" @@ -31213,11 +40773,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/b7f282fbd77193d822df9c8156370398e1fd099c" + "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-a6224f954d8234d45e6f6ea27aca4d65ca77b6c7" ], "ci_platforms": [ "linux" @@ -31229,11 +40790,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/b821e8d3e12441e1120723cf4eda4d939794b17f" + "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-ba2c1509ff87865d9e23c056b9c7fe2732825ef0" ], "ci_platforms": [ "linux" @@ -31245,11 +40807,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/b8a74cc440fbfaa2a523f20ca964976bde128fd0" + "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-bac7a77b50e53ff71b0f52ce635e64ac15a787dc" ], "ci_platforms": [ "linux" @@ -31261,11 +40824,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/b8cd185f946c392f8fb5adca4851043df849ac6e" + "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-bebee7dd27c149af9e7b573300c686969fde9eb3" ], "ci_platforms": [ "linux" @@ -31277,11 +40841,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/b93e4c7538558dfe92d2925646029b5dafe653d0" + "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-ca8aa113c22037a2a552c1763f845609d555ef9b" ], "ci_platforms": [ "linux" @@ -31293,11 +40858,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/b94adf31dbe157a38e8b3a873658b8dace55f517" + "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-cce6ffed471344173c135e536b454f469bd07e03" ], "ci_platforms": [ "linux" @@ -31309,11 +40875,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/b96fd7809c6f18c465e834a96dd60b43b32fac73" + "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-dc6abf90d5e8e1b96f7e25f418b1a7f572e6a738" ], "ci_platforms": [ "linux" @@ -31325,11 +40892,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/bad.bin" + "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-e45753da8952c41715a65010250efba0a4a4d243" ], "ci_platforms": [ "linux" @@ -31341,11 +40909,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/bb349c691efa909b4c5412b9210e1acf4a4b7505" + "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-e7930097a989131890a316b0b1ed85801699562b" ], "ci_platforms": [ "linux" @@ -31357,11 +40926,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/bbf053837b7e0e2adc868be62fc91248b8dce176" + "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-ed3086c0ca03a427fca1817b52a4d6530fb4096b" ], "ci_platforms": [ "linux" @@ -31373,11 +40943,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/bbf7ccb14d60a1d4fa79e572464c687530ca6c2a" + "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-ed7959740df2fdcf62626e370dcd7eb43963731b" ], "ci_platforms": [ "linux" @@ -31389,11 +40960,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/bc5e743f85f6632110277f09847381a402e1624c" + "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-ef09afe157880d7f363fb87f6bc194ce1a72554c" ], "ci_platforms": [ "linux" @@ -31405,11 +40977,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/bc6770a9bad24599ea4970735e9b17702a12b651" + "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-f40dcae7e7cc52e44d49c7fd5452e33a77ef4499" ], "ci_platforms": [ "linux" @@ -31421,11 +40994,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/bc7f0b79a1781772d7f48e168462f99da27b03e2" + "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-f8bf4b7d89c07d661b695a3e4fdf269b853fe168" ], "ci_platforms": [ "linux" @@ -31437,11 +41011,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/bc96b9415e9bb48d27f37d91c51d10ec08139974" + "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-fb41c97305a2c94d367e40863dc046c8f78a57c9" ], "ci_platforms": [ "linux" @@ -31453,11 +41028,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/bc9b5b6ba4b6ccbb9e5ff75edd0df8eef9c36d4c" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d00326f1b0a93acb1cb7fe02ba0342cc6e1875e6" ], "ci_platforms": [ "linux" @@ -31469,11 +41045,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/bcae3229d884c5cfc36ae28c672f9b960e30042f" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d0692d73e38ed8c154ebddd627ce99890a1cf798" ], "ci_platforms": [ "linux" @@ -31485,11 +41062,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/bcc7eb464ff05cd0cd2669611776e55ca4dcb2b4" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d079f5c8a10611dc655cef33f73100f5f43787a8" ], "ci_platforms": [ "linux" @@ -31501,11 +41079,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/bd1ed73f6cf97f980d23ff2e9f4f4e78b80bda57" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d0fcc9d6dc91ead9fd27f0c613ea031f21fb4de4" ], "ci_platforms": [ "linux" @@ -31517,11 +41096,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/bd459204c5fee8000abc7d895a317028351d0dec" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d107d21374f4dba27f173d4edd5c8009e3b0f8c4" ], "ci_platforms": [ "linux" @@ -31533,11 +41113,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/bd4786be14d852c68e605eaefa782f79064f32e2" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d110d5d3a672bf483f230825e735d372b0b2c1a5" ], "ci_platforms": [ "linux" @@ -31549,11 +41130,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/bd5c6df9c2cfaa96d768b1fe6e8fff57bf1d02c9" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d17e7451bcef39ce542d84f2539f9586ea35f21e" ], "ci_platforms": [ "linux" @@ -31565,11 +41147,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/bd7314ef323557ccf3a97c1b1ba4bed0a9b24de2" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d18b2a1520207761100992c88b50f6b410c62184" ], "ci_platforms": [ "linux" @@ -31581,11 +41164,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/bd891b3b4256f1c4207c3bbe5bd86f5e90a49ee2" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d18b5e648be40b0ea52fc8b10bcbae9bd4325f0e" ], "ci_platforms": [ "linux" @@ -31597,11 +41181,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/bde8a553b10a613c32f800429a07f0b5a2d37e53" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d194d6aa501f75ed24fc399ee594fb77341e5d38" ], "ci_platforms": [ "linux" @@ -31613,11 +41198,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/be0ccf7b9b4581e01a42e9cad6343c93ccf6f362" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d1ade96319d9de82cf3b0480d226a5ad9f31eaa1" ], "ci_platforms": [ "linux" @@ -31629,11 +41215,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/be40890ee61e101a7429d53cd9ffd59ee600e0f6" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d1b53c2a386259ce958c34e2cb281514e14e0d03" ], "ci_platforms": [ "linux" @@ -31645,11 +41232,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/bef8cedf1a792786a027114c85a89a1bef3155c4" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d22287b96b3dcb840fc65e4be60e409fb0f6bfe5" ], "ci_platforms": [ "linux" @@ -31661,11 +41249,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/bf0d70e0d09e5c2ddd79b55dbabdd58b385307f2" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d27e050b2758f6658d166b0d30e9db9595388ef9" ], "ci_platforms": [ "linux" @@ -31677,11 +41266,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/c004d2a6d36524db9e0c18c5df6170366dd2b6f1" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d290717010121ba2745e551e7a80be6e9f6d59e2" ], "ci_platforms": [ "linux" @@ -31693,11 +41283,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/c17ca23726e7bca7b0d92398f827cfb25c7f0d40" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d2956eabd7b8b9d6b136731a3a4fa077f184aa13" ], "ci_platforms": [ "linux" @@ -31709,11 +41300,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/c1937db2c3dff32ff22a53a8b76614602cf41d73" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d2c828ee88b3e352fad3263f1e1ff901a41fc7a6" ], "ci_platforms": [ "linux" @@ -31725,11 +41317,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/c2d14ed959df62d2f6dbe46c71489bed68e3c0f0" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d3089d3ef9be14080abc156e5f2128c3c1a2f23a" ], "ci_platforms": [ "linux" @@ -31741,11 +41334,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/c343ddb31042500e460861abc70e98ce3088ceed" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d3090a5221ea984dc474c3fb448b71957f8197a4" ], "ci_platforms": [ "linux" @@ -31757,11 +41351,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/c45cc40cc387134dec06733a01bde8fc44a2c9d9" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d3124f8fe39ebe943d0d5a7087a51d7e852505bd" ], "ci_platforms": [ "linux" @@ -31773,11 +41368,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/c4a63251d65cb186242e7aba5ab3d4709d3f0065" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d333dc3999c6dcca82d85f72e65e10c07f12d978" ], "ci_platforms": [ "linux" @@ -31789,11 +41385,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/c53efcb830c4ae5cba7b3e0803635445e1469103" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d3bec93d378e7466bacd95be431500ed30cba449" ], "ci_platforms": [ "linux" @@ -31805,11 +41402,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/c56726277ddeb233e30b6223158042aafb944191" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d48a5cefe695d0494df4540ea395dcdd90a332ef" ], "ci_platforms": [ "linux" @@ -31821,11 +41419,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/c5e5b4c1e4e2bae55c1355950c3c7a593cb3fc04" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d4c3ed789ef8a888244504601964f0a0c994a66d" ], "ci_platforms": [ "linux" @@ -31837,11 +41436,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/c69863dd21c782e609d6ecdb9150f887a0f39989" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d4caa070bca058455b68c7b96961e3ca0f151b32" ], "ci_platforms": [ "linux" @@ -31853,11 +41453,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/c73e85bdaa195d9659ae9b08995a9fb716f9c92a" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d56b3dae753b110e9e1a050486c6deb6ac399bd8" ], "ci_platforms": [ "linux" @@ -31869,11 +41470,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/c73fbc2e78f496b5666da99bccac9445ac9feeac" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d576eb2948463f86f576d85e41d30a8cf3b972c2" ], "ci_platforms": [ "linux" @@ -31885,11 +41487,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/c76a1cca503160ca659aad6f7a05ca8fe5db439e" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d5824da8aeaf96a9e5f590a851e58e2534d178a5" ], "ci_platforms": [ "linux" @@ -31901,11 +41504,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/c7c13a37189ce2482f5517f6ef0903431194e11b" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d63251b34cf38052b657d62e353aa42d905e52c4" ], "ci_platforms": [ "linux" @@ -31917,11 +41521,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/c837e4dc49146de843c9556c1b3c886abb552db7" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d65f32b4af92080a496fb0965075c060c70ee444" ], "ci_platforms": [ "linux" @@ -31933,11 +41538,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/c918b9e3e9cdfdb21d94ef0fba85b25f3ed9d098" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d67c22b4174555c3e596c58dc7c28e84b1da8353" ], "ci_platforms": [ "linux" @@ -31949,11 +41555,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/c957b37c99c5bb22b2c1f6dd050c57e685505599" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d68001237e6366c844a6509fa03e677e6adfb75f" ], "ci_platforms": [ "linux" @@ -31965,11 +41572,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/c978dc651b961f2d48aad95b40ac761b3467f212" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d681712608025610b8ecc8a76a822516fb659953" ], "ci_platforms": [ "linux" @@ -31981,11 +41589,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/c9bda5eb1a93526b4809d147647cc78452988e29" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d712d007679af5438c7bda723ddc724c2e57b0c1" ], "ci_platforms": [ "linux" @@ -31997,11 +41606,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/ca086cf78308275212c52012f06edf3b4152204a" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d80ba5bbc230065821c0c6530f70bdf205e817cc" ], "ci_platforms": [ "linux" @@ -32013,11 +41623,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/ca6add6699d063e2212335264ad3e004327afc1a" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d8137be32de0a676678672fe6f82992b2ca61fef" ], "ci_platforms": [ "linux" @@ -32029,11 +41640,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/ca6b20544c093b14703410d792c8f73e73205bce" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d87b7bcd1b05a2f8cc04a2aadb999bcf65b84911" ], "ci_platforms": [ "linux" @@ -32045,11 +41657,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/cc34f9a0d85a22556faffadf90182f7c44bf168a" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d8bbba8dd44b71161c835cb09610e47401de44e3" ], "ci_platforms": [ "linux" @@ -32061,11 +41674,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/cc7087fd7c7398e7c2afe3fb03e705262b5e843a" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d8d117e45b7bc0c48f606d9ef844f00a363a8a38" ], "ci_platforms": [ "linux" @@ -32077,11 +41691,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/cca20202993dda83570ac83c0b1967ce225c78b9" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d913cc4e8f2900d7035d196fd62707cf1194e02b" ], "ci_platforms": [ "linux" @@ -32093,11 +41708,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/ccdff5940d61b708f67fcc55dc26ac1ad4f4c298" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d91e9bf6b6c78f35a68ba877f3325b3c1ee3db35" ], "ci_platforms": [ "linux" @@ -32109,11 +41725,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/cd0e7c4cd361b786b6f27c481ed601fd373cb221" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d97ade864dccd3eea245411665e5126f97302063" ], "ci_platforms": [ "linux" @@ -32125,11 +41742,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/cd4f2c59f0cf55d9a73fb0b96d701c784c446048" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d99bfa6bb10d30f64b533ea7620fc08b762a7bf3" ], "ci_platforms": [ "linux" @@ -32141,11 +41759,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/cdc064f39a9a67210b1be6b195d38d5d0d73eaa0" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d9d80422059678f0a011b8e8fdedd3d20c025b91" ], "ci_platforms": [ "linux" @@ -32157,11 +41776,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/ce02561c4cfd1ec7e272cf81678149350f8a066c" + "test/core/end2end/fuzzers/api_fuzzer_corpus/d9f752e6e02987d7bfe6f0f4c4d70644d357fef5" ], "ci_platforms": [ "linux" @@ -32173,11 +41793,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/cf26c6969c0f649a2ccd780edb8b3dc314ff7701" + "test/core/end2end/fuzzers/api_fuzzer_corpus/da23c62c70f6c1174adc08093c429f1ec657921a" ], "ci_platforms": [ "linux" @@ -32189,11 +41810,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-0a0ee428270236e707457b9560a91c233ed2326c" + "test/core/end2end/fuzzers/api_fuzzer_corpus/da2ace62505959bae7b4f158220f7ce97d20423d" ], "ci_platforms": [ "linux" @@ -32205,11 +41827,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-0b1b50227d01f99998b01ed218f5d4dc3839d44f" + "test/core/end2end/fuzzers/api_fuzzer_corpus/dab32e8bb17a9bd7b04b8b895b7b48c27d38ef51" ], "ci_platforms": [ "linux" @@ -32221,11 +41844,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-14359c8f754c2ecdae21deeeec033ae10360033a" + "test/core/end2end/fuzzers/api_fuzzer_corpus/dac17b9025074828797ef0dd1e3895baf875627f" ], "ci_platforms": [ "linux" @@ -32237,11 +41861,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-1b9aeaf762bb1a972dda8f3a455df2628efd693b" + "test/core/end2end/fuzzers/api_fuzzer_corpus/dacc3689e0a7b90aeebfaee000adf89e95e50cf9" ], "ci_platforms": [ "linux" @@ -32253,11 +41878,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-1bc1a02532d212c8975e0cdcd5127c98fcaf752b" + "test/core/end2end/fuzzers/api_fuzzer_corpus/dad2c9af972d2e21c4437f0d94fdeacd7c8c7641" ], "ci_platforms": [ "linux" @@ -32269,11 +41895,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-212c3b09f310867e1e8ffa7faecac75c12f4cda3" + "test/core/end2end/fuzzers/api_fuzzer_corpus/db0dbec7a0811cac7b250cf9b248d47936edc0d0" ], "ci_platforms": [ "linux" @@ -32285,11 +41912,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-2ccee0e61103a767acec12b9146d478202b93b27" + "test/core/end2end/fuzzers/api_fuzzer_corpus/db7c4b56e701832634e61cc0b3ab5206fabf518d" ], "ci_platforms": [ "linux" @@ -32301,11 +41929,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-2f1092c48db455fbe1ae5e275f8d221dc8c52f00" + "test/core/end2end/fuzzers/api_fuzzer_corpus/dc38c75bcb7df7e61428d8f12ff01a1ec1b68a99" ], "ci_platforms": [ "linux" @@ -32317,11 +41946,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-4ae4941b4c3f857966a0e3c05f789a0a5ae15bbf" + "test/core/end2end/fuzzers/api_fuzzer_corpus/dcc8e14bbb75292968233ce89acd404303a53cc3" ], "ci_platforms": [ "linux" @@ -32333,11 +41963,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-4e4d7a383785c83b78ed6597bfed360079a49a08" + "test/core/end2end/fuzzers/api_fuzzer_corpus/dcd0182c3027a0d6cc7a9a8c26f647d45bf3d3df" ], "ci_platforms": [ "linux" @@ -32349,11 +41980,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-5c774460d2dc7ae9d471ef4b87609b13e4e95219" + "test/core/end2end/fuzzers/api_fuzzer_corpus/dd0e562fcf5edda051585b70d3b3780a9a6a2818" ], "ci_platforms": [ "linux" @@ -32365,11 +41997,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-6db86c556caf542fe8c3345ef396467b1d609d32" + "test/core/end2end/fuzzers/api_fuzzer_corpus/dddf3303e3e8e558ca6f147ec11d8195b6de30bb" ], "ci_platforms": [ "linux" @@ -32381,11 +42014,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-72ab4efc255cfc55ed03c1002187a68e2e18e33b" + "test/core/end2end/fuzzers/api_fuzzer_corpus/dde3b1c08399b61df7de4997194d9392c2e4c3cb" ], "ci_platforms": [ "linux" @@ -32397,11 +42031,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-7ca23a3e10cdbf579cf81a50e51af358f86631eb" + "test/core/end2end/fuzzers/api_fuzzer_corpus/de838de0352fc7ee32452bc83043cf587176e120" ], "ci_platforms": [ "linux" @@ -32413,11 +42048,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-82b2ae1d2174f5782b32c89ce60f68bf5a30c0e1" + "test/core/end2end/fuzzers/api_fuzzer_corpus/deb08a636c04030bc28459820c7ddbace429b40a" ], "ci_platforms": [ "linux" @@ -32429,11 +42065,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-89e1b03278bad9790ae0f8614a8389414d1eab37" + "test/core/end2end/fuzzers/api_fuzzer_corpus/deeec423355ed885b906c6770c96d3f17583fdf3" ], "ci_platforms": [ "linux" @@ -32445,11 +42082,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-8ab0b6e57b90ab4c6b8d5de8278464eb428f4668" + "test/core/end2end/fuzzers/api_fuzzer_corpus/df106c9859b09869094c77aeba44e6e9ce909246" ], "ci_platforms": [ "linux" @@ -32461,11 +42099,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-8e2e3975a865fb107fff8060f4f949aa235727d5" + "test/core/end2end/fuzzers/api_fuzzer_corpus/df380dfd997318c00cfc75313e6a7ecb041d38af" ], "ci_platforms": [ "linux" @@ -32477,11 +42116,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-916f6ab61cd358be9a241e2eb09851f700335eda" + "test/core/end2end/fuzzers/api_fuzzer_corpus/df616ee922cc89908b771e5276e47abcbaff1346" ], "ci_platforms": [ "linux" @@ -32493,11 +42133,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-97ec5404605d0d7bed44c2b845e06f6d9479c152" + "test/core/end2end/fuzzers/api_fuzzer_corpus/df8ef8bf4069afd375066fbb74cbe137f73db829" ], "ci_platforms": [ "linux" @@ -32509,11 +42150,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-9862337313ff89e8dd6fbd6f870a568ec4bd6ecc" + "test/core/end2end/fuzzers/api_fuzzer_corpus/df949398b0b614309219c4128b167746e16a1ead" ], "ci_platforms": [ "linux" @@ -32525,11 +42167,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-9e53b8c6ea7f6ae5c53e5834c50eac8e9f33259a" + "test/core/end2end/fuzzers/api_fuzzer_corpus/dfe4f327699ddea25103dd17b68e9a0fb726f4a7" ], "ci_platforms": [ "linux" @@ -32541,11 +42184,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-a6224f954d8234d45e6f6ea27aca4d65ca77b6c7" + "test/core/end2end/fuzzers/api_fuzzer_corpus/dfe6d60fd53eb8f4174366d1515c5a90ce10bf1b" ], "ci_platforms": [ "linux" @@ -32557,11 +42201,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-ba2c1509ff87865d9e23c056b9c7fe2732825ef0" + "test/core/end2end/fuzzers/api_fuzzer_corpus/dfefc5d84c18606a3aefd5bb721a06e192b4420e" ], "ci_platforms": [ "linux" @@ -32573,11 +42218,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-bac7a77b50e53ff71b0f52ce635e64ac15a787dc" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e007d8c9aa6c37e8b62fab4cb95b2807fc49105f" ], "ci_platforms": [ "linux" @@ -32589,11 +42235,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-bebee7dd27c149af9e7b573300c686969fde9eb3" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e022322a04b3ac1452055563bb41976a03a146ad" ], "ci_platforms": [ "linux" @@ -32605,11 +42252,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-ca8aa113c22037a2a552c1763f845609d555ef9b" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e0507daae4458401edc11e5c76b246d6d5a44e3d" ], "ci_platforms": [ "linux" @@ -32621,11 +42269,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-cce6ffed471344173c135e536b454f469bd07e03" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e06db057637f6738a48464cc2d65d7399fe296e8" ], "ci_platforms": [ "linux" @@ -32637,11 +42286,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-dc6abf90d5e8e1b96f7e25f418b1a7f572e6a738" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e08b85aa24c9d0a49f8946c8400b86b5ea9211c8" ], "ci_platforms": [ "linux" @@ -32653,11 +42303,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-e45753da8952c41715a65010250efba0a4a4d243" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e0b7eb44f182f08d2eeaeecc76ef7b3efeff1fc4" ], "ci_platforms": [ "linux" @@ -32669,11 +42320,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-e7930097a989131890a316b0b1ed85801699562b" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e0e7112238b555fdc12a1c5e9adb50703ae56a43" ], "ci_platforms": [ "linux" @@ -32685,11 +42337,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-ed3086c0ca03a427fca1817b52a4d6530fb4096b" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e13361499a2326ef8dbc3746ceb61c61b2e1ad57" ], "ci_platforms": [ "linux" @@ -32701,11 +42354,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-ed7959740df2fdcf62626e370dcd7eb43963731b" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e140f7efd72850d181a0145bb9ea7d92e61dec95" ], "ci_platforms": [ "linux" @@ -32717,11 +42371,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-ef09afe157880d7f363fb87f6bc194ce1a72554c" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e15a0a0fb7b4f1c05088bc119c492ac20eb5dbcf" ], "ci_platforms": [ "linux" @@ -32733,11 +42388,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-f40dcae7e7cc52e44d49c7fd5452e33a77ef4499" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e192ba28f8a3bc9079b810c46ecc526f84609863" ], "ci_platforms": [ "linux" @@ -32749,11 +42405,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-f8bf4b7d89c07d661b695a3e4fdf269b853fe168" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e1a0398910c28ad61e065e98e884a7492f6dc594" ], "ci_platforms": [ "linux" @@ -32765,11 +42422,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-fb41c97305a2c94d367e40863dc046c8f78a57c9" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e212833dd63750f436254c0c81f1ddd42fb9a17e" ], "ci_platforms": [ "linux" @@ -32781,11 +42439,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/d00326f1b0a93acb1cb7fe02ba0342cc6e1875e6" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e23c0abb4f625880dbae1cc81ce5b146992f5d36" ], "ci_platforms": [ "linux" @@ -32797,11 +42456,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/d0692d73e38ed8c154ebddd627ce99890a1cf798" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e33eb4b19232b2e32bc8f18e43459c4ed15bfc4f" ], "ci_platforms": [ "linux" @@ -32813,11 +42473,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/d0fcc9d6dc91ead9fd27f0c613ea031f21fb4de4" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e33f7d7998fe6e12ecc4014c8434e4ca591371b3" ], "ci_platforms": [ "linux" @@ -32829,11 +42490,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/d17e7451bcef39ce542d84f2539f9586ea35f21e" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e3b45752c8160c48885420e20c24bb7124128f16" ], "ci_platforms": [ "linux" @@ -32845,11 +42507,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/d18b5e648be40b0ea52fc8b10bcbae9bd4325f0e" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e3c1dbfb1ef140f6bdcf7d683e2b2071aacba9ba" ], "ci_platforms": [ "linux" @@ -32861,11 +42524,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/d194d6aa501f75ed24fc399ee594fb77341e5d38" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e3eda76a93e94d081a9dfd675975fe2fc1d670dc" ], "ci_platforms": [ "linux" @@ -32877,11 +42541,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/d1ade96319d9de82cf3b0480d226a5ad9f31eaa1" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e401c1abdd1ef0458dd46e35167c4734667ebcc0" ], "ci_platforms": [ "linux" @@ -32893,11 +42558,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/d1b53c2a386259ce958c34e2cb281514e14e0d03" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e42a9e07845680b8aad95408657c87b01873bcbe" ], "ci_platforms": [ "linux" @@ -32909,11 +42575,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/d290717010121ba2745e551e7a80be6e9f6d59e2" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e42fc248764aac6f6e0af5b5705272f82101287f" ], "ci_platforms": [ "linux" @@ -32925,11 +42592,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/d2956eabd7b8b9d6b136731a3a4fa077f184aa13" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e4ba9f46387c5687fb9003724893c0b199debf2d" ], "ci_platforms": [ "linux" @@ -32941,11 +42609,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/d2c828ee88b3e352fad3263f1e1ff901a41fc7a6" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e53a201505fe8412278d7444b1a915b353bacb3e" ], "ci_platforms": [ "linux" @@ -32957,11 +42626,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/d3124f8fe39ebe943d0d5a7087a51d7e852505bd" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e55693473101ac4626e04012beb1b9b6d93a0a94" ], "ci_platforms": [ "linux" @@ -32973,11 +42643,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/d333dc3999c6dcca82d85f72e65e10c07f12d978" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e57acbf9e36c755cc50b00bc868c01ca1c1f6842" ], "ci_platforms": [ "linux" @@ -32989,11 +42660,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/d3bec93d378e7466bacd95be431500ed30cba449" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e590a42febe0442ddf632b05cda112b3aca43380" ], "ci_platforms": [ "linux" @@ -33005,11 +42677,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/d48a5cefe695d0494df4540ea395dcdd90a332ef" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e5afbabdb437dfc44f06ddf8b9f793868e8fdde0" ], "ci_platforms": [ "linux" @@ -33021,11 +42694,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/d4c3ed789ef8a888244504601964f0a0c994a66d" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e5d120938961b8ed1e0f46e342683432b9081dd1" ], "ci_platforms": [ "linux" @@ -33037,11 +42711,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/d4caa070bca058455b68c7b96961e3ca0f151b32" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e62f5243dd375cb4b71c864a18ddd50b5b99762f" ], "ci_platforms": [ "linux" @@ -33053,11 +42728,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/d63251b34cf38052b657d62e353aa42d905e52c4" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e6660a661f0adb7be809c558ca15573add24f686" ], "ci_platforms": [ "linux" @@ -33069,11 +42745,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/d65f32b4af92080a496fb0965075c060c70ee444" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e66b054263dd9e7ea90d7dfaee555e2f24bfb60f" ], "ci_platforms": [ "linux" @@ -33085,11 +42762,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/d712d007679af5438c7bda723ddc724c2e57b0c1" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e72218971bac83f556e86b0a65ec303e2a05eac8" ], "ci_platforms": [ "linux" @@ -33101,11 +42779,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/d80ba5bbc230065821c0c6530f70bdf205e817cc" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e73a05b1cf7dfeeada6356bb18ec4381485bb3d0" ], "ci_platforms": [ "linux" @@ -33117,11 +42796,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/d8137be32de0a676678672fe6f82992b2ca61fef" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e7484552736c89fe721019daaad8739a68f1a926" ], "ci_platforms": [ "linux" @@ -33133,11 +42813,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/d8bbba8dd44b71161c835cb09610e47401de44e3" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e75fa90650f1d67ff9849024e88a91300690778c" ], "ci_platforms": [ "linux" @@ -33149,11 +42830,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/d913cc4e8f2900d7035d196fd62707cf1194e02b" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e79ffffd4bd565b2b5bb8d0f191c8e34385de085" ], "ci_platforms": [ "linux" @@ -33165,11 +42847,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/d91e9bf6b6c78f35a68ba877f3325b3c1ee3db35" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e80302182fbd464b72d2b9be495901c0c3e93344" ], "ci_platforms": [ "linux" @@ -33181,11 +42864,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/d97ade864dccd3eea245411665e5126f97302063" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e805c33631e579c782550439f123b78e1ad8e180" ], "ci_platforms": [ "linux" @@ -33197,11 +42881,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/d9f752e6e02987d7bfe6f0f4c4d70644d357fef5" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e8c24e95b095fee6053a49f51326479b60949424" ], "ci_platforms": [ "linux" @@ -33213,11 +42898,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/da23c62c70f6c1174adc08093c429f1ec657921a" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e8fd7c4270b5f2cb56fb06684858c39c7ccfa909" ], "ci_platforms": [ "linux" @@ -33229,11 +42915,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/dab32e8bb17a9bd7b04b8b895b7b48c27d38ef51" + "test/core/end2end/fuzzers/api_fuzzer_corpus/e921037de2e963b653e881fba095eeb33799d749" ], "ci_platforms": [ "linux" @@ -33245,11 +42932,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/dacc3689e0a7b90aeebfaee000adf89e95e50cf9" + "test/core/end2end/fuzzers/api_fuzzer_corpus/ea2cf809383d8725bec1b44ab774f04b3e6d5ae5" ], "ci_platforms": [ "linux" @@ -33261,11 +42949,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/dad2c9af972d2e21c4437f0d94fdeacd7c8c7641" + "test/core/end2end/fuzzers/api_fuzzer_corpus/ea351febbe2c4e73fb0e0d34e7d2a23ff46b79f4" ], "ci_platforms": [ "linux" @@ -33277,11 +42966,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/db7c4b56e701832634e61cc0b3ab5206fabf518d" + "test/core/end2end/fuzzers/api_fuzzer_corpus/ea6cc4b0a83ac8d578c4927f3c9d5a57a4464df3" ], "ci_platforms": [ "linux" @@ -33293,11 +42983,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/dd0e562fcf5edda051585b70d3b3780a9a6a2818" + "test/core/end2end/fuzzers/api_fuzzer_corpus/eab01c8a32e76c8f354055807399a808848234e6" ], "ci_platforms": [ "linux" @@ -33309,11 +43000,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/dddf3303e3e8e558ca6f147ec11d8195b6de30bb" + "test/core/end2end/fuzzers/api_fuzzer_corpus/eb342f6fd92411d7beb1f82983a19849d45ff46f" ], "ci_platforms": [ "linux" @@ -33325,11 +43017,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/dde3b1c08399b61df7de4997194d9392c2e4c3cb" + "test/core/end2end/fuzzers/api_fuzzer_corpus/eb9367a74ba61abe8d5f5fdb7c1c840b2d27dab7" ], "ci_platforms": [ "linux" @@ -33341,11 +43034,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/de838de0352fc7ee32452bc83043cf587176e120" + "test/core/end2end/fuzzers/api_fuzzer_corpus/eb9faf5efb229c562a6825f930b8316f2aff2864" ], "ci_platforms": [ "linux" @@ -33357,11 +43051,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/deeec423355ed885b906c6770c96d3f17583fdf3" + "test/core/end2end/fuzzers/api_fuzzer_corpus/ebbc2aa89ec745a7201eb4aa1aded15d35e4206c" ], "ci_platforms": [ "linux" @@ -33373,11 +43068,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/df616ee922cc89908b771e5276e47abcbaff1346" + "test/core/end2end/fuzzers/api_fuzzer_corpus/ebc30c5cbe17138976223f2283fe42d9e4c6f39a" ], "ci_platforms": [ "linux" @@ -33389,11 +43085,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/df8ef8bf4069afd375066fbb74cbe137f73db829" + "test/core/end2end/fuzzers/api_fuzzer_corpus/ebe414975652c12fbbfd99efd2da1cd4c72c340c" ], "ci_platforms": [ "linux" @@ -33405,11 +43102,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/df949398b0b614309219c4128b167746e16a1ead" + "test/core/end2end/fuzzers/api_fuzzer_corpus/ec012a94d14659f311451e89e757bd06a93d30b8" ], "ci_platforms": [ "linux" @@ -33421,11 +43119,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/dfe6d60fd53eb8f4174366d1515c5a90ce10bf1b" + "test/core/end2end/fuzzers/api_fuzzer_corpus/ec230c6a27149df85cad53f33478ffc11bd92d4e" ], "ci_platforms": [ "linux" @@ -33437,11 +43136,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/dfefc5d84c18606a3aefd5bb721a06e192b4420e" + "test/core/end2end/fuzzers/api_fuzzer_corpus/ec97d4ee730261bdc3b14349a3346fd45929bd17" ], "ci_platforms": [ "linux" @@ -33453,11 +43153,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/e022322a04b3ac1452055563bb41976a03a146ad" + "test/core/end2end/fuzzers/api_fuzzer_corpus/eca1d41de5486c09c6aa7767289daa7185379220" ], "ci_platforms": [ "linux" @@ -33469,11 +43170,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/e06db057637f6738a48464cc2d65d7399fe296e8" + "test/core/end2end/fuzzers/api_fuzzer_corpus/ecf0a3cd157191263734f4f2de9689d5a02e439b" ], "ci_platforms": [ "linux" @@ -33485,11 +43187,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/e0e7112238b555fdc12a1c5e9adb50703ae56a43" + "test/core/end2end/fuzzers/api_fuzzer_corpus/ed361ec32383606748bedeb8eee6510041b0f366" ], "ci_platforms": [ "linux" @@ -33501,11 +43204,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/e140f7efd72850d181a0145bb9ea7d92e61dec95" + "test/core/end2end/fuzzers/api_fuzzer_corpus/ed9a1a597bad76e9ed9e52ba2e5c80304583c006" ], "ci_platforms": [ "linux" @@ -33517,11 +43221,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/e1a0398910c28ad61e065e98e884a7492f6dc594" + "test/core/end2end/fuzzers/api_fuzzer_corpus/eda5d435276e002a08358fd67a2bbd75902236a3" ], "ci_platforms": [ "linux" @@ -33533,11 +43238,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/e212833dd63750f436254c0c81f1ddd42fb9a17e" + "test/core/end2end/fuzzers/api_fuzzer_corpus/edcf7ea2ec8443a92883e68e5e18353fad8f6d21" ], "ci_platforms": [ "linux" @@ -33549,11 +43255,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/e23c0abb4f625880dbae1cc81ce5b146992f5d36" + "test/core/end2end/fuzzers/api_fuzzer_corpus/edfcf299569efc4788937d2cd4ca0e625fb9e527" ], "ci_platforms": [ "linux" @@ -33565,11 +43272,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/e33f7d7998fe6e12ecc4014c8434e4ca591371b3" + "test/core/end2end/fuzzers/api_fuzzer_corpus/ef264406b5a2263cd7a9145f7ca68ed8fd6c50ad" ], "ci_platforms": [ "linux" @@ -33581,11 +43289,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/e401c1abdd1ef0458dd46e35167c4734667ebcc0" + "test/core/end2end/fuzzers/api_fuzzer_corpus/ef32866f14ccd80c1231fa742b53fba46ae15d6f" ], "ci_platforms": [ "linux" @@ -33597,11 +43306,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/e42a9e07845680b8aad95408657c87b01873bcbe" + "test/core/end2end/fuzzers/api_fuzzer_corpus/ef4127bfbb6d1b7490a076c4af795b1e40b2bcd8" ], "ci_platforms": [ "linux" @@ -33613,11 +43323,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/e42fc248764aac6f6e0af5b5705272f82101287f" + "test/core/end2end/fuzzers/api_fuzzer_corpus/ef63ab3c4dbf27ed1f15c2b310bf41ff3a2a7e3c" ], "ci_platforms": [ "linux" @@ -33629,11 +43340,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/e4ba9f46387c5687fb9003724893c0b199debf2d" + "test/core/end2end/fuzzers/api_fuzzer_corpus/ef930a505edebc0ff6ca7eef7549bbaa21d95b4a" ], "ci_platforms": [ "linux" @@ -33645,11 +43357,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/e55693473101ac4626e04012beb1b9b6d93a0a94" + "test/core/end2end/fuzzers/api_fuzzer_corpus/ef967ba35676b971983b1e95e62c383a978a37f7" ], "ci_platforms": [ "linux" @@ -33661,11 +43374,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/e57acbf9e36c755cc50b00bc868c01ca1c1f6842" + "test/core/end2end/fuzzers/api_fuzzer_corpus/efa80ac7daa93de08fc91bdf2a912269a3f2396a" ], "ci_platforms": [ "linux" @@ -33677,11 +43391,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/e590a42febe0442ddf632b05cda112b3aca43380" + "test/core/end2end/fuzzers/api_fuzzer_corpus/eff00cadc3130c257b3fe360ea5d32fb034aadff" ], "ci_platforms": [ "linux" @@ -33693,11 +43408,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/e5afbabdb437dfc44f06ddf8b9f793868e8fdde0" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f0649728d5f9e1a91735eaa429605ce0da6c00c0" ], "ci_platforms": [ "linux" @@ -33709,11 +43425,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/e5d120938961b8ed1e0f46e342683432b9081dd1" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f0a7e39c194ee3f30312ae2f4827bdbd43416a42" ], "ci_platforms": [ "linux" @@ -33725,11 +43442,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/e62f5243dd375cb4b71c864a18ddd50b5b99762f" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f0d881bdd69c3945694068719a7a6b6b094dee3c" ], "ci_platforms": [ "linux" @@ -33741,11 +43459,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/e6660a661f0adb7be809c558ca15573add24f686" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f0e8450c85a3c6dfaa50ee65399270c59a127088" ], "ci_platforms": [ "linux" @@ -33757,11 +43476,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/e66b054263dd9e7ea90d7dfaee555e2f24bfb60f" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f0ee077bc982be02a547d81d85e5c69e36fe38fc" ], "ci_platforms": [ "linux" @@ -33773,11 +43493,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/e72218971bac83f556e86b0a65ec303e2a05eac8" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f18f2d094ef0f0c971173153279bc44bfa3c1187" ], "ci_platforms": [ "linux" @@ -33789,11 +43510,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/e73a05b1cf7dfeeada6356bb18ec4381485bb3d0" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f1a6421ddd077ba6971eee7ba1084ed66fd1bee3" ], "ci_platforms": [ "linux" @@ -33805,11 +43527,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/e75fa90650f1d67ff9849024e88a91300690778c" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f1a7981f4f19f6318e0f16cafe9541d1564f9e15" ], "ci_platforms": [ "linux" @@ -33821,11 +43544,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/e79ffffd4bd565b2b5bb8d0f191c8e34385de085" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f1b592b7e1a5af83eea1bccc2d7bcca302173d57" ], "ci_platforms": [ "linux" @@ -33837,11 +43561,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/e8c24e95b095fee6053a49f51326479b60949424" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f224ca8baea51bbc26a3814af9253483c66ad8f8" ], "ci_platforms": [ "linux" @@ -33853,11 +43578,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/e8fd7c4270b5f2cb56fb06684858c39c7ccfa909" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f238d0b5973d8d4081ba7036711d8c3091554e28" ], "ci_platforms": [ "linux" @@ -33869,11 +43595,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/e921037de2e963b653e881fba095eeb33799d749" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f27ae36fe8211e46f49656597658daab1429b163" ], "ci_platforms": [ "linux" @@ -33885,11 +43612,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/ea2cf809383d8725bec1b44ab774f04b3e6d5ae5" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f2bb9fb90c0fb7dfd765e1c528330881e721c7d8" ], "ci_platforms": [ "linux" @@ -33901,11 +43629,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/ea351febbe2c4e73fb0e0d34e7d2a23ff46b79f4" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f2f014c6ef70e40f9334096f34584ea4f1f882d7" ], "ci_platforms": [ "linux" @@ -33917,11 +43646,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/ea6cc4b0a83ac8d578c4927f3c9d5a57a4464df3" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f37b108d4dca7cdd24f464ad880a57aa038528ae" ], "ci_platforms": [ "linux" @@ -33933,11 +43663,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/eb342f6fd92411d7beb1f82983a19849d45ff46f" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f3c0468b37c09b998096d18cd13a522dec09888b" ], "ci_platforms": [ "linux" @@ -33949,11 +43680,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/eb9367a74ba61abe8d5f5fdb7c1c840b2d27dab7" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f463b733bfacabdd064c6b5a0551d72398f833af" ], "ci_platforms": [ "linux" @@ -33965,11 +43697,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/eb9faf5efb229c562a6825f930b8316f2aff2864" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f47f636b8e22e8db428ea956d9336bd12b928a9e" ], "ci_platforms": [ "linux" @@ -33981,11 +43714,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/ebbc2aa89ec745a7201eb4aa1aded15d35e4206c" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f4d74d507a7171e5f116bf750a20435eeaf81f3f" ], "ci_platforms": [ "linux" @@ -33997,11 +43731,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/ec012a94d14659f311451e89e757bd06a93d30b8" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f4dc057d97c34f31ea542d67593b8d3a295bf52a" ], "ci_platforms": [ "linux" @@ -34013,11 +43748,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/eca1d41de5486c09c6aa7767289daa7185379220" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f5867f7dbacd22878e2955f4be8fca147442aa9d" ], "ci_platforms": [ "linux" @@ -34029,11 +43765,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/ed9a1a597bad76e9ed9e52ba2e5c80304583c006" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f59e8ceab587254d408a4af86cd938d896eb0b6d" ], "ci_platforms": [ "linux" @@ -34045,11 +43782,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/eda5d435276e002a08358fd67a2bbd75902236a3" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f5a7503830d1e74c6a7230c10c5007a5f8ad5a0f" ], "ci_platforms": [ "linux" @@ -34061,11 +43799,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/edfcf299569efc4788937d2cd4ca0e625fb9e527" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f62ae81e655f294699b73830d3abaa787196cb23" ], "ci_platforms": [ "linux" @@ -34077,11 +43816,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/ef264406b5a2263cd7a9145f7ca68ed8fd6c50ad" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f65e41c8021049c4ca8782902de25d6791bae63a" ], "ci_platforms": [ "linux" @@ -34093,11 +43833,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/ef4127bfbb6d1b7490a076c4af795b1e40b2bcd8" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f693fbf860c6cd1090a6dc220c20eb5c51543208" ], "ci_platforms": [ "linux" @@ -34109,11 +43850,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/ef930a505edebc0ff6ca7eef7549bbaa21d95b4a" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f71de0dac54e25fe658e8c78208b855d3f0db23c" ], "ci_platforms": [ "linux" @@ -34125,11 +43867,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/efa80ac7daa93de08fc91bdf2a912269a3f2396a" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f7316eaa3f54119ac5b7fb24e8b92debdf57c3f1" ], "ci_platforms": [ "linux" @@ -34141,11 +43884,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/f0a7e39c194ee3f30312ae2f4827bdbd43416a42" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f73f63e243ea6484a97ece29bb8d4f33841410fc" ], "ci_platforms": [ "linux" @@ -34157,11 +43901,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/f0e8450c85a3c6dfaa50ee65399270c59a127088" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f755b44ff2221c971ca2bfaffc69e002ba982730" ], "ci_platforms": [ "linux" @@ -34173,11 +43918,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/f0ee077bc982be02a547d81d85e5c69e36fe38fc" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f788d2b893fe39fe24582acffa6a70f1ca4e3037" ], "ci_platforms": [ "linux" @@ -34189,11 +43935,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/f1a6421ddd077ba6971eee7ba1084ed66fd1bee3" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f7909263cd7edc56186185c0b3421ebb68ad8d2b" ], "ci_platforms": [ "linux" @@ -34205,11 +43952,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/f1b592b7e1a5af83eea1bccc2d7bcca302173d57" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f7b309af25b6ae5029a9548142333a905e3c99be" ], "ci_platforms": [ "linux" @@ -34221,11 +43969,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/f224ca8baea51bbc26a3814af9253483c66ad8f8" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f7c45ab223810b0b6b77042055a86800e5ec213a" ], "ci_platforms": [ "linux" @@ -34237,11 +43986,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/f238d0b5973d8d4081ba7036711d8c3091554e28" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f7c686af20a3cf5b5c569a570656df83db3fe165" ], "ci_platforms": [ "linux" @@ -34253,11 +44003,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/f2bb9fb90c0fb7dfd765e1c528330881e721c7d8" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f8373fd74d8a4eafc7d015e2643c2a277656b716" ], "ci_platforms": [ "linux" @@ -34269,11 +44020,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/f37b108d4dca7cdd24f464ad880a57aa038528ae" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f861e708b6d0e0ca691d88a31e73f3d2643deacd" ], "ci_platforms": [ "linux" @@ -34285,11 +44037,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/f3c0468b37c09b998096d18cd13a522dec09888b" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f8a02d7d9317428fd142c05f9428840d3d30aff4" ], "ci_platforms": [ "linux" @@ -34301,11 +44054,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/f47f636b8e22e8db428ea956d9336bd12b928a9e" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f912a072f4abf312ebbe7f1a2bf5ebd8c51e35e2" ], "ci_platforms": [ "linux" @@ -34317,11 +44071,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/f4d74d507a7171e5f116bf750a20435eeaf81f3f" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f91f27afa6e72fd653eb41b316ad2d2e88fc0bb7" ], "ci_platforms": [ "linux" @@ -34333,11 +44088,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/f4dc057d97c34f31ea542d67593b8d3a295bf52a" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f9540ce65b08ec33d9157d03bf5231b767460d4a" ], "ci_platforms": [ "linux" @@ -34349,11 +44105,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/f59e8ceab587254d408a4af86cd938d896eb0b6d" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f96f406763e8d6a53de319e67e942696cc10a4b4" ], "ci_platforms": [ "linux" @@ -34365,11 +44122,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/f65e41c8021049c4ca8782902de25d6791bae63a" + "test/core/end2end/fuzzers/api_fuzzer_corpus/f97d97545054500e8035ac3c73957d0f75b2715b" ], "ci_platforms": [ "linux" @@ -34381,11 +44139,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/f693fbf860c6cd1090a6dc220c20eb5c51543208" + "test/core/end2end/fuzzers/api_fuzzer_corpus/fa423921deeaeda55d2ff74e9541e5d89ddc7d36" ], "ci_platforms": [ "linux" @@ -34397,11 +44156,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/f71de0dac54e25fe658e8c78208b855d3f0db23c" + "test/core/end2end/fuzzers/api_fuzzer_corpus/fa44038e372af4ab374d3e94ec61662051e0dd74" ], "ci_platforms": [ "linux" @@ -34413,11 +44173,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/f73f63e243ea6484a97ece29bb8d4f33841410fc" + "test/core/end2end/fuzzers/api_fuzzer_corpus/fa45cfbecd8680693570d90f214abd9febf681a6" ], "ci_platforms": [ "linux" @@ -34429,11 +44190,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/f755b44ff2221c971ca2bfaffc69e002ba982730" + "test/core/end2end/fuzzers/api_fuzzer_corpus/fa99f1f9be3384be1229657b26374545228c2318" ], "ci_platforms": [ "linux" @@ -34445,11 +44207,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/f788d2b893fe39fe24582acffa6a70f1ca4e3037" + "test/core/end2end/fuzzers/api_fuzzer_corpus/faa0471930dc99deb5b1ffdc9bab7c1267b4ddbb" ], "ci_platforms": [ "linux" @@ -34461,11 +44224,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/f7b309af25b6ae5029a9548142333a905e3c99be" + "test/core/end2end/fuzzers/api_fuzzer_corpus/fac54fba5614e5930104bc7391773b490c0523b2" ], "ci_platforms": [ "linux" @@ -34477,11 +44241,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/f7c45ab223810b0b6b77042055a86800e5ec213a" + "test/core/end2end/fuzzers/api_fuzzer_corpus/fae6e98220e0943926fe570bd32ea7f0dcd34feb" ], "ci_platforms": [ "linux" @@ -34493,11 +44258,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/f7c686af20a3cf5b5c569a570656df83db3fe165" + "test/core/end2end/fuzzers/api_fuzzer_corpus/fb0bef1e4142a7bcfa30e93f834fb6315438d1ad" ], "ci_platforms": [ "linux" @@ -34509,11 +44275,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/f8373fd74d8a4eafc7d015e2643c2a277656b716" + "test/core/end2end/fuzzers/api_fuzzer_corpus/fb0bfb049d4a99a529ff339218a5d962983118d0" ], "ci_platforms": [ "linux" @@ -34525,11 +44292,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/f861e708b6d0e0ca691d88a31e73f3d2643deacd" + "test/core/end2end/fuzzers/api_fuzzer_corpus/fb9505e4511c982f4f26675979a138a3408d80e2" ], "ci_platforms": [ "linux" @@ -34541,11 +44309,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/f8a02d7d9317428fd142c05f9428840d3d30aff4" + "test/core/end2end/fuzzers/api_fuzzer_corpus/fb9ad6fd8276dd9b38b27ee8907f0db5a3a2cedf" ], "ci_platforms": [ "linux" @@ -34557,11 +44326,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/f91f27afa6e72fd653eb41b316ad2d2e88fc0bb7" + "test/core/end2end/fuzzers/api_fuzzer_corpus/fbeb44db0fc0f6b70c226053448c7170f62543b1" ], "ci_platforms": [ "linux" @@ -34573,11 +44343,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/f9540ce65b08ec33d9157d03bf5231b767460d4a" + "test/core/end2end/fuzzers/api_fuzzer_corpus/fc0cb8a6287528bfbe1e43d452fc40a180c221f2" ], "ci_platforms": [ "linux" @@ -34589,11 +44360,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/f96f406763e8d6a53de319e67e942696cc10a4b4" + "test/core/end2end/fuzzers/api_fuzzer_corpus/fc2bb278363a5f7d4dbfe8d123a8092a99d5a9f4" ], "ci_platforms": [ "linux" @@ -34605,11 +44377,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/f97d97545054500e8035ac3c73957d0f75b2715b" + "test/core/end2end/fuzzers/api_fuzzer_corpus/fc37856ff6d7a1cce83efad8cc7727f5aac44200" ], "ci_platforms": [ "linux" @@ -34621,11 +44394,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/fa423921deeaeda55d2ff74e9541e5d89ddc7d36" + "test/core/end2end/fuzzers/api_fuzzer_corpus/fc39c0c12cde4ef57c217955886ed9508214ca98" ], "ci_platforms": [ "linux" @@ -34637,11 +44411,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/fa45cfbecd8680693570d90f214abd9febf681a6" + "test/core/end2end/fuzzers/api_fuzzer_corpus/fc9879794ab7f7cdc4959c204788fce6146c0579" ], "ci_platforms": [ "linux" @@ -34653,11 +44428,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/fa99f1f9be3384be1229657b26374545228c2318" + "test/core/end2end/fuzzers/api_fuzzer_corpus/fd4d68895bc219f52d93f3f2f302ff138e8ffeda" ], "ci_platforms": [ "linux" @@ -34669,11 +44445,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/fae6e98220e0943926fe570bd32ea7f0dcd34feb" + "test/core/end2end/fuzzers/api_fuzzer_corpus/fda1618a9c7d2d7c22234b3c7f996116bc5e6e4b" ], "ci_platforms": [ "linux" @@ -34685,11 +44462,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/fb0bfb049d4a99a529ff339218a5d962983118d0" + "test/core/end2end/fuzzers/api_fuzzer_corpus/fe565289309a897d640309b9bf214d3036c2216b" ], "ci_platforms": [ "linux" @@ -34701,11 +44479,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/fb9505e4511c982f4f26675979a138a3408d80e2" + "test/core/end2end/fuzzers/api_fuzzer_corpus/fe680903482b870b820690f61cc607e5d26a652a" ], "ci_platforms": [ "linux" @@ -34717,11 +44496,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/fc0cb8a6287528bfbe1e43d452fc40a180c221f2" + "test/core/end2end/fuzzers/api_fuzzer_corpus/fe7ac5c3403c7f1673ead3176af4efe7c60b2c02" ], "ci_platforms": [ "linux" @@ -34733,11 +44513,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/fc2bb278363a5f7d4dbfe8d123a8092a99d5a9f4" + "test/core/end2end/fuzzers/api_fuzzer_corpus/fe9d7f510475f17a7592213c9b2e614ce7d38f22" ], "ci_platforms": [ "linux" @@ -34749,11 +44530,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/fc37856ff6d7a1cce83efad8cc7727f5aac44200" + "test/core/end2end/fuzzers/api_fuzzer_corpus/fef5208b90316cac47bdc95ffd384b9c9a8a7c78" ], "ci_platforms": [ "linux" @@ -34765,11 +44547,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/fc9879794ab7f7cdc4959c204788fce6146c0579" + "test/core/end2end/fuzzers/api_fuzzer_corpus/ff2fd7bfc554729dc2a40554597e3a95ab8baefe" ], "ci_platforms": [ "linux" @@ -34781,11 +44564,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/fda1618a9c7d2d7c22234b3c7f996116bc5e6e4b" + "test/core/end2end/fuzzers/api_fuzzer_corpus/ff6138cc4a36bad9a76401072dbd41fd2ad437cc" ], "ci_platforms": [ "linux" @@ -34797,11 +44581,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/fe680903482b870b820690f61cc607e5d26a652a" + "test/core/end2end/fuzzers/api_fuzzer_corpus/ff8ffcfafaf420d6fee1cfa087204975ab8e14d6" ], "ci_platforms": [ "linux" @@ -34813,11 +44598,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/fef5208b90316cac47bdc95ffd384b9c9a8a7c78" + "test/core/end2end/fuzzers/api_fuzzer_corpus/ffc74f2184f64032a1f67b5f843a683ea1372b74" ], "ci_platforms": [ "linux" @@ -34829,11 +44615,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/ff6138cc4a36bad9a76401072dbd41fd2ad437cc" + "test/core/end2end/fuzzers/api_fuzzer_corpus/ffd263ba66c7dd7180f5b8e13a3f7b8bf169dd79" ], "ci_platforms": [ "linux" @@ -34845,11 +44632,12 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/api_fuzzer_corpus/ffd263ba66c7dd7180f5b8e13a3f7b8bf169dd79" + "test/core/end2end/fuzzers/api_fuzzer_corpus/full_request.bin" ], "ci_platforms": [ "linux" @@ -34861,7 +44649,8 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -34877,7 +44666,8 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -34893,7 +44683,8 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -34909,7 +44700,8 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -34925,7 +44717,8 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -34941,7 +44734,8 @@ "name": "api_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -34957,7 +44751,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -34973,7 +44768,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -34989,7 +44785,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35005,7 +44802,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35021,7 +44819,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35037,7 +44836,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35053,7 +44853,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35069,7 +44870,25 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/04bef86965e816c0cd330896ecd981dd3b14275c" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -35085,7 +44904,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35101,7 +44921,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35117,7 +44938,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35133,7 +44955,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35149,7 +44972,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35165,7 +44989,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35181,7 +45006,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35197,7 +45023,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35213,7 +45040,25 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/0c6f2e0a2232788cb20c4f52ffa18d7ab8f0b938" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -35229,7 +45074,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35245,7 +45091,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35261,7 +45108,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35277,7 +45125,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35293,7 +45142,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35309,7 +45159,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35325,7 +45176,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35341,7 +45193,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35357,7 +45210,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35373,7 +45227,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35389,7 +45244,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35405,7 +45261,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35421,7 +45278,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35437,7 +45295,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35453,7 +45312,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35469,7 +45329,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35485,7 +45346,25 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/1526ac4266e152b029b7c283255fe4fb6507f726" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -35501,7 +45380,25 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/15c8bfec99ff18b11211d464c824fc139cc791fd" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -35517,7 +45414,25 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/169f579e66b4b8ff423891a40380e648e8d45247" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -35533,7 +45448,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35549,7 +45465,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35565,7 +45482,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35581,7 +45499,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35597,7 +45516,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35613,7 +45533,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35629,7 +45550,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35645,7 +45567,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35661,7 +45584,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35677,7 +45601,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35693,7 +45618,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35709,7 +45635,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35725,7 +45652,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35741,7 +45669,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35757,7 +45686,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35773,7 +45703,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35789,7 +45720,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35805,7 +45737,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35821,7 +45754,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35837,7 +45771,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35853,7 +45788,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35869,7 +45805,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35885,7 +45822,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35901,7 +45839,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35917,7 +45856,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35933,7 +45873,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35949,7 +45890,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35965,7 +45907,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35981,7 +45924,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -35997,7 +45941,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36013,7 +45958,25 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/23e8c1377addaf67019ea36a084e0b68ca7a33db" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -36029,7 +45992,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36045,7 +46009,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36061,7 +46026,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36077,7 +46043,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36093,7 +46060,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36109,7 +46077,25 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/25d2969baf8bd256e15b2ab72707682b2d18b40a" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -36125,7 +46111,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36141,7 +46128,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36157,7 +46145,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36173,7 +46162,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36189,7 +46179,42 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/2862adc802092f1a422416a1666a5142f71d5d7f" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/28680d04887f96a1167dd913573ec8daa2a39625" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -36205,7 +46230,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36221,7 +46247,25 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/28f54e558b181e294e101447c7a79d976fe36fcb" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -36237,7 +46281,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36253,7 +46298,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36269,7 +46315,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36285,7 +46332,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36301,7 +46349,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36317,7 +46366,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36333,7 +46383,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36349,7 +46400,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36365,7 +46417,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36381,7 +46434,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36397,7 +46451,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36413,7 +46468,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36429,7 +46485,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36445,7 +46502,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36461,7 +46519,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36477,7 +46536,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36493,7 +46553,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36509,7 +46570,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36525,7 +46587,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36541,7 +46604,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36557,7 +46621,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36573,7 +46638,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36589,7 +46655,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36605,7 +46672,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36621,7 +46689,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36637,7 +46706,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36653,7 +46723,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36669,7 +46740,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36685,7 +46757,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36701,7 +46774,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36717,7 +46791,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36733,7 +46808,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36749,7 +46825,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36765,7 +46842,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36781,7 +46859,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36797,7 +46876,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36813,7 +46893,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36829,7 +46910,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36845,7 +46927,25 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/3c01b1f89d50fa37fcb3457cd3dd6502fe84e25b" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -36861,7 +46961,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36877,7 +46978,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36893,7 +46995,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36909,7 +47012,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36925,7 +47029,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36941,7 +47046,25 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/4097094277bc09981f428280fc0cc0f590f20ded" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -36957,7 +47080,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36973,7 +47097,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -36989,7 +47114,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37005,7 +47131,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37021,7 +47148,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37037,7 +47165,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37053,7 +47182,25 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/44b6be630161765a3de5872629602ca14789c3bd" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -37069,7 +47216,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37085,7 +47233,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37101,7 +47250,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37117,7 +47267,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37133,7 +47284,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37149,7 +47301,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37165,7 +47318,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37181,7 +47335,25 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/49c5568cb0de363bc9f9298f1eacaace6c8a268a" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -37197,7 +47369,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37213,7 +47386,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37229,7 +47403,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37245,7 +47420,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37261,7 +47437,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37277,7 +47454,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37293,7 +47471,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37309,7 +47488,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37325,7 +47505,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37341,7 +47522,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37357,7 +47539,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37373,7 +47556,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37389,7 +47573,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37405,7 +47590,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37421,7 +47607,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37437,7 +47624,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37453,7 +47641,25 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/54555ceac4403855f4cf20367f7be05714c46c51" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -37469,7 +47675,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37485,7 +47692,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37501,7 +47709,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37517,7 +47726,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37533,7 +47743,25 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/5821752bf8923fdaebc8484662624d8acd382716" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -37549,7 +47777,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37565,7 +47794,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37581,7 +47811,25 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/59d28886db21f371ac9d999b68b116bcf425d971" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -37597,7 +47845,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37613,7 +47862,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37629,7 +47879,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37645,7 +47896,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37661,7 +47913,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37677,7 +47930,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37693,7 +47947,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37709,7 +47964,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37725,7 +47981,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37741,7 +47998,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37757,7 +48015,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37773,7 +48032,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37789,7 +48049,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37805,7 +48066,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37821,7 +48083,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37837,7 +48100,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37853,7 +48117,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37869,7 +48134,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37885,7 +48151,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37901,7 +48168,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37917,7 +48185,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37933,7 +48202,25 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/690158fb146f7f3b3ea820979307a8d8e6f38314" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -37949,7 +48236,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37965,7 +48253,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37981,7 +48270,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -37997,7 +48287,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38013,7 +48304,25 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/6ca3910d5f4f7967311853724b072750716dcb48" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -38029,7 +48338,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38045,7 +48355,25 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/6f30de3096eb71f697885fdd9cbddd9ee6ce46c4" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -38061,7 +48389,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38077,7 +48406,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38093,7 +48423,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38109,7 +48440,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38125,7 +48457,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38141,7 +48474,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38157,7 +48491,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38173,7 +48508,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38189,7 +48525,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38205,7 +48542,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38221,7 +48559,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38237,7 +48576,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38253,7 +48593,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38269,7 +48610,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38285,7 +48627,25 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/7f1530d4b702e68d043f89d9e63d314319dcd803" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -38301,7 +48661,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38317,7 +48678,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38333,7 +48695,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38349,7 +48712,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38365,7 +48729,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38381,7 +48746,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38397,7 +48763,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38413,7 +48780,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38429,7 +48797,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38445,7 +48814,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38461,7 +48831,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38477,7 +48848,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38493,7 +48865,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38509,7 +48882,25 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/85a7e47ef707d3b31cad924ed6c697c3678ab569" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -38525,7 +48916,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38541,7 +48933,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38557,7 +48950,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38573,7 +48967,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38589,7 +48984,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38605,7 +49001,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38621,7 +49018,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38637,7 +49035,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38653,7 +49052,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38669,7 +49069,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38685,7 +49086,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38701,7 +49103,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38717,7 +49120,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38733,7 +49137,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38749,7 +49154,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38765,7 +49171,25 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/911e2ea20b6c10431e48f70d9933987815926a9d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -38781,7 +49205,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38797,7 +49222,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38813,7 +49239,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38829,7 +49256,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38845,7 +49273,25 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/93ac93b7deabdfb4f86eb37a1e9f6669957d14a6" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -38861,7 +49307,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38877,7 +49324,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38893,7 +49341,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38909,7 +49358,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38925,7 +49375,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38941,7 +49392,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38957,7 +49409,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38973,7 +49426,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -38989,7 +49443,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39005,7 +49460,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39021,7 +49477,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39037,7 +49494,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39053,7 +49511,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39069,7 +49528,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39085,7 +49545,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39101,7 +49562,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39117,7 +49579,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39133,7 +49596,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39149,7 +49613,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39165,7 +49630,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39181,7 +49647,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39197,7 +49664,25 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/9eaf2ad607a943141c29f334b2c66c2e59e99980" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -39213,11 +49698,80 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/9f2316ddcea948c947fbbf35ae87b767b8c1dc55" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/9f9ed47f98b4905f1f6ef2b552a66905bdf79b1b" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/9fee3212240d4bccfdab3696dbbc579b06d39982" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/a09ef34c93fe0ffc13045f67b7ecec683fb72e98" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/client_fuzzer_corpus/9f2316ddcea948c947fbbf35ae87b767b8c1dc55" + "test/core/end2end/fuzzers/client_fuzzer_corpus/a210d629c305b89a34b7ff3c41ae4566cd22186b" ], "ci_platforms": [ "linux" @@ -39229,11 +49783,12 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/client_fuzzer_corpus/9f9ed47f98b4905f1f6ef2b552a66905bdf79b1b" + "test/core/end2end/fuzzers/client_fuzzer_corpus/a29a547671badd3154789e1a02bdb87332fcd6a4" ], "ci_platforms": [ "linux" @@ -39245,11 +49800,12 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/client_fuzzer_corpus/9fee3212240d4bccfdab3696dbbc579b06d39982" + "test/core/end2end/fuzzers/client_fuzzer_corpus/a30fc2605f4e74f7003f902ea4a4c994e3ce9bfd" ], "ci_platforms": [ "linux" @@ -39261,11 +49817,12 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/client_fuzzer_corpus/a09ef34c93fe0ffc13045f67b7ecec683fb72e98" + "test/core/end2end/fuzzers/client_fuzzer_corpus/a33e1b28074a41fc5c2611a67161ae5638a47dd5" ], "ci_platforms": [ "linux" @@ -39277,11 +49834,12 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/client_fuzzer_corpus/a30fc2605f4e74f7003f902ea4a4c994e3ce9bfd" + "test/core/end2end/fuzzers/client_fuzzer_corpus/a3cd54d43d3b3bdfcf224d636dc11ce1b5ee4d30" ], "ci_platforms": [ "linux" @@ -39293,11 +49851,12 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/client_fuzzer_corpus/a33e1b28074a41fc5c2611a67161ae5638a47dd5" + "test/core/end2end/fuzzers/client_fuzzer_corpus/a4874327383ca168f9d9d59cffe327f61e9a6610" ], "ci_platforms": [ "linux" @@ -39309,11 +49868,12 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/client_fuzzer_corpus/a3cd54d43d3b3bdfcf224d636dc11ce1b5ee4d30" + "test/core/end2end/fuzzers/client_fuzzer_corpus/a4e4a0473ac1f2b8de86efdf00fcb382a343126d" ], "ci_platforms": [ "linux" @@ -39325,11 +49885,12 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/client_fuzzer_corpus/a4874327383ca168f9d9d59cffe327f61e9a6610" + "test/core/end2end/fuzzers/client_fuzzer_corpus/a502dbaf3c842bd86e9ae513e8782eb23c70ad7a" ], "ci_platforms": [ "linux" @@ -39341,11 +49902,12 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/client_fuzzer_corpus/a4e4a0473ac1f2b8de86efdf00fcb382a343126d" + "test/core/end2end/fuzzers/client_fuzzer_corpus/a5592f15d5424ab7e16a18e77027ab91c846d90a" ], "ci_platforms": [ "linux" @@ -39357,11 +49919,12 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ - "test/core/end2end/fuzzers/client_fuzzer_corpus/a502dbaf3c842bd86e9ae513e8782eb23c70ad7a" + "test/core/end2end/fuzzers/client_fuzzer_corpus/a5cf80b996b2ba8c9580f8ecd22720c48de41044" ], "ci_platforms": [ "linux" @@ -39373,7 +49936,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39389,7 +49953,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39405,7 +49970,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39421,7 +49987,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39437,7 +50004,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39453,7 +50021,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39469,7 +50038,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39485,7 +50055,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39501,7 +50072,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39517,7 +50089,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39533,7 +50106,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39549,7 +50123,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39565,7 +50140,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39581,7 +50157,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39597,7 +50174,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39613,7 +50191,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39629,7 +50208,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39645,7 +50225,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39661,7 +50242,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39677,7 +50259,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39693,7 +50276,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39709,7 +50293,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39725,7 +50310,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39741,7 +50327,25 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/b24c25c6d4b57a5f3d64a0adb205bf4f150c9138" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -39757,7 +50361,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39773,7 +50378,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39789,7 +50395,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39805,7 +50412,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39821,7 +50429,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39837,7 +50446,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39853,7 +50463,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39869,7 +50480,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39885,7 +50497,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39901,7 +50514,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39917,7 +50531,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39933,7 +50548,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39949,7 +50565,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39965,7 +50582,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39981,7 +50599,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -39997,7 +50616,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40013,7 +50633,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40029,7 +50650,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40045,7 +50667,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40061,7 +50684,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40077,7 +50701,25 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/beabbe93f1e9b2e56f729af30559ec03a00f53fa" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -40093,7 +50735,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40109,7 +50752,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40125,7 +50769,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40141,7 +50786,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40157,7 +50803,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40173,7 +50820,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40189,7 +50837,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40205,7 +50854,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40221,7 +50871,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40237,7 +50888,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40253,7 +50905,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40269,7 +50922,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40285,7 +50939,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40301,7 +50956,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40317,7 +50973,25 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/cbe59c62c6d36c7307c438159327e320cd2fcf57" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -40333,7 +51007,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40349,7 +51024,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40365,7 +51041,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40381,7 +51058,25 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/ce1c326f3b0147841550ce3b5126390764bae8e8" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -40397,7 +51092,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40413,7 +51109,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40429,7 +51126,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40445,7 +51143,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40461,7 +51160,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40477,7 +51177,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40493,7 +51194,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40509,7 +51211,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40525,7 +51228,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40541,7 +51245,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40557,7 +51262,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40573,7 +51279,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40589,7 +51296,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40605,7 +51313,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40621,7 +51330,25 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/d21ca2b01baa21a666257d1a1e0275587eeb565d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -40637,7 +51364,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40653,7 +51381,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40669,7 +51398,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40685,7 +51415,25 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/d2f71a800612876010558ce804c9a72ad0a1b9fc" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -40701,7 +51449,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40717,7 +51466,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40733,7 +51483,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40749,7 +51500,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40765,7 +51517,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40781,7 +51534,25 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/d637cc9387087de633b9db535d19f64795c43be1" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -40797,7 +51568,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40813,7 +51585,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40829,7 +51602,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40845,7 +51619,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40861,7 +51636,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40877,7 +51653,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40893,7 +51670,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40909,7 +51687,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40925,7 +51704,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40941,7 +51721,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40957,7 +51738,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40973,7 +51755,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -40989,7 +51772,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41005,7 +51789,25 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/dd5ac34f5b220970447b2733848de78570c47883" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -41021,7 +51823,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41037,7 +51840,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41053,7 +51857,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41069,7 +51874,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41085,7 +51891,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41101,7 +51908,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41117,7 +51925,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41133,7 +51942,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41149,7 +51959,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41165,7 +51976,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41181,7 +51993,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41197,7 +52010,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41213,7 +52027,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41229,7 +52044,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41245,7 +52061,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41261,7 +52078,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41277,7 +52095,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41293,7 +52112,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41309,7 +52129,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41325,7 +52146,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41341,7 +52163,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41357,7 +52180,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41373,7 +52197,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41389,7 +52214,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41405,7 +52231,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41421,7 +52248,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41437,7 +52265,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41453,7 +52282,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41469,7 +52299,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41485,7 +52316,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41501,7 +52333,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41517,7 +52350,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41533,7 +52367,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41549,7 +52384,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41565,7 +52401,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41581,7 +52418,25 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/f2a6bb4e0137541e2b140b976764377d07d822d6" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false }, { "args": [ @@ -41597,7 +52452,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41613,7 +52469,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41629,7 +52486,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41645,7 +52503,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41661,7 +52520,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41677,7 +52537,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41693,7 +52554,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41709,7 +52571,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41725,7 +52588,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41741,7 +52605,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41757,7 +52622,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41773,7 +52639,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41789,7 +52656,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41805,7 +52673,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41821,7 +52690,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41837,7 +52707,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41853,7 +52724,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41869,7 +52741,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41885,7 +52758,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41901,7 +52775,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41917,7 +52792,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41933,7 +52809,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41949,7 +52826,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41965,7 +52843,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41981,7 +52860,8 @@ "name": "client_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -41997,7 +52877,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42013,7 +52894,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42029,7 +52911,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42045,7 +52928,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42061,7 +52945,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42077,7 +52962,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42093,7 +52979,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42109,7 +52996,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42125,7 +53013,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42141,7 +53030,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42157,7 +53047,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42173,7 +53064,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42189,7 +53081,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42205,7 +53098,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42221,7 +53115,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42237,7 +53132,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42253,7 +53149,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42269,7 +53166,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42285,7 +53183,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42301,7 +53200,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42317,7 +53217,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42333,7 +53234,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42349,7 +53251,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42365,7 +53268,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42381,7 +53285,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42397,7 +53302,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42413,7 +53319,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42429,7 +53336,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42445,7 +53353,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42461,7 +53370,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42477,7 +53387,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42493,7 +53404,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42509,7 +53421,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42525,7 +53438,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42541,7 +53455,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42557,7 +53472,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42573,7 +53489,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42589,7 +53506,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42605,7 +53523,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42621,7 +53540,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42637,7 +53557,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42653,7 +53574,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42669,7 +53591,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42685,7 +53608,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42701,7 +53625,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42717,7 +53642,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42733,7 +53659,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42749,7 +53676,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42765,7 +53693,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42781,7 +53710,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42797,7 +53727,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42813,7 +53744,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42829,7 +53761,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42845,7 +53778,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42861,7 +53795,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42877,7 +53812,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42893,7 +53829,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42909,7 +53846,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42925,7 +53863,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42941,7 +53880,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42957,7 +53897,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42973,7 +53914,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -42989,7 +53931,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43005,7 +53948,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43021,7 +53965,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43037,7 +53982,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43053,7 +53999,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43069,7 +54016,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43085,7 +54033,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43101,7 +54050,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43117,7 +54067,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43133,7 +54084,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43149,7 +54101,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43165,7 +54118,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43181,7 +54135,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43197,7 +54152,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43213,7 +54169,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43229,7 +54186,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43245,7 +54203,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43261,7 +54220,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43277,7 +54237,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43293,7 +54254,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43309,7 +54271,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43325,7 +54288,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43341,7 +54305,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43357,7 +54322,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43373,7 +54339,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43389,7 +54356,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43405,7 +54373,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43421,7 +54390,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43437,7 +54407,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43453,7 +54424,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43469,7 +54441,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43485,7 +54458,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43501,7 +54475,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43517,7 +54492,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43533,7 +54509,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43549,7 +54526,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43565,7 +54543,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43581,7 +54560,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43597,7 +54577,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43613,7 +54594,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43629,7 +54611,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43645,7 +54628,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43661,7 +54645,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43677,7 +54662,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43693,7 +54679,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43709,7 +54696,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43725,7 +54713,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43741,7 +54730,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43757,7 +54747,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43773,7 +54764,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43789,7 +54781,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43805,7 +54798,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43821,7 +54815,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43837,7 +54832,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43853,7 +54849,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43869,7 +54866,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43885,7 +54883,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43901,7 +54900,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43917,7 +54917,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43933,7 +54934,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43949,7 +54951,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43965,7 +54968,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43981,7 +54985,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -43997,7 +55002,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44013,7 +55019,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44029,7 +55036,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44045,7 +55053,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44061,7 +55070,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44077,7 +55087,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44093,7 +55104,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44109,7 +55121,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44125,7 +55138,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44141,7 +55155,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44157,7 +55172,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44173,7 +55189,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44189,7 +55206,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44205,7 +55223,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44221,7 +55240,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44237,7 +55257,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44253,7 +55274,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44269,7 +55291,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44285,7 +55308,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44301,7 +55325,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44317,7 +55342,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44333,7 +55359,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44349,7 +55376,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44365,7 +55393,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44381,7 +55410,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44397,7 +55427,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44413,7 +55444,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44429,7 +55461,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44445,7 +55478,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44461,7 +55495,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44477,7 +55512,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44493,7 +55529,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44509,7 +55546,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44525,7 +55563,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44541,7 +55580,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44557,7 +55597,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44573,7 +55614,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44589,7 +55631,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44605,7 +55648,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44621,7 +55665,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44637,7 +55682,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44653,7 +55699,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44669,7 +55716,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44685,7 +55733,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44701,7 +55750,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44717,7 +55767,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44733,7 +55784,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44749,7 +55801,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44765,7 +55818,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44781,7 +55835,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44797,7 +55852,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44813,7 +55869,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44829,7 +55886,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44845,7 +55903,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44861,7 +55920,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44877,7 +55937,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44893,7 +55954,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44909,7 +55971,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44925,7 +55988,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44941,7 +56005,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44957,7 +56022,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44973,7 +56039,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -44989,7 +56056,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45005,7 +56073,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45021,7 +56090,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45037,7 +56107,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45053,7 +56124,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45069,7 +56141,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45085,7 +56158,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45101,7 +56175,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45117,7 +56192,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45133,7 +56209,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45149,7 +56226,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45165,7 +56243,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45181,7 +56260,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45197,7 +56277,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45213,7 +56294,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45229,7 +56311,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45245,7 +56328,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45261,7 +56345,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45277,7 +56362,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45293,7 +56379,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45309,7 +56396,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45325,7 +56413,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45341,7 +56430,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45357,7 +56447,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45373,7 +56464,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45389,7 +56481,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45405,7 +56498,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45421,7 +56515,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45437,7 +56532,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45453,7 +56549,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45469,7 +56566,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45485,7 +56583,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45501,7 +56600,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45517,7 +56617,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45533,7 +56634,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45549,7 +56651,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45565,7 +56668,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45581,7 +56685,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45597,7 +56702,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45613,7 +56719,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45629,7 +56736,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45645,7 +56753,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45661,7 +56770,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45677,7 +56787,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45693,7 +56804,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45709,7 +56821,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45725,7 +56838,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45741,7 +56855,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45757,7 +56872,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45773,7 +56889,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45789,7 +56906,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45805,7 +56923,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45821,7 +56940,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45837,7 +56957,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45853,7 +56974,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45869,7 +56991,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45885,7 +57008,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45901,7 +57025,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45917,7 +57042,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45933,7 +57059,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45949,7 +57076,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45965,7 +57093,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45981,7 +57110,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -45997,7 +57127,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46013,7 +57144,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46029,7 +57161,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46045,7 +57178,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46061,7 +57195,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46077,7 +57212,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46093,7 +57229,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46109,7 +57246,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46125,7 +57263,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46141,7 +57280,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46157,7 +57297,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46173,7 +57314,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46189,7 +57331,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46205,7 +57348,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46221,7 +57365,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46237,7 +57382,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46253,7 +57399,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46269,7 +57416,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46285,7 +57433,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46301,7 +57450,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46317,7 +57467,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46333,7 +57484,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46349,7 +57501,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46365,7 +57518,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46381,7 +57535,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46397,7 +57552,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46413,7 +57569,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46429,7 +57586,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46445,7 +57603,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46461,7 +57620,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46477,7 +57637,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46493,7 +57654,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46509,7 +57671,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46525,7 +57688,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46541,7 +57705,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46557,7 +57722,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46573,7 +57739,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46589,7 +57756,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46605,7 +57773,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46621,7 +57790,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46637,7 +57807,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46653,7 +57824,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46669,7 +57841,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46685,7 +57858,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46701,7 +57875,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46717,7 +57892,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46733,7 +57909,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46749,7 +57926,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46765,7 +57943,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46781,7 +57960,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46797,7 +57977,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46813,7 +57994,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46829,7 +58011,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46845,7 +58028,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46861,7 +58045,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46877,7 +58062,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46893,7 +58079,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46909,7 +58096,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46925,7 +58113,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46941,7 +58130,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46957,7 +58147,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46973,7 +58164,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -46989,7 +58181,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47005,7 +58198,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47021,7 +58215,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47037,7 +58232,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47053,7 +58249,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47069,7 +58266,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47085,7 +58283,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47101,7 +58300,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47117,7 +58317,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47133,7 +58334,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47149,7 +58351,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47165,7 +58368,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47181,7 +58385,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47197,7 +58402,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47213,7 +58419,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47229,7 +58436,8 @@ "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47245,7 +58453,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47261,7 +58470,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47277,7 +58487,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47293,7 +58504,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47309,7 +58521,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47325,7 +58538,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47341,7 +58555,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47357,7 +58572,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47373,7 +58589,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47389,7 +58606,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47405,7 +58623,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47421,7 +58640,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47437,7 +58657,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47453,7 +58674,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47469,7 +58691,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47485,7 +58708,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47501,7 +58725,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47517,7 +58742,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47533,7 +58759,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47549,7 +58776,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47565,7 +58793,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47581,7 +58810,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47597,7 +58827,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47613,7 +58844,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47629,7 +58861,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47645,7 +58878,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47661,7 +58895,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47677,7 +58912,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47693,7 +58929,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47709,7 +58946,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47725,7 +58963,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47741,7 +58980,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47757,7 +58997,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47773,7 +59014,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47789,7 +59031,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47805,7 +59048,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47821,7 +59065,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47837,7 +59082,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47853,7 +59099,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47869,7 +59116,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47885,7 +59133,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47901,7 +59150,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47917,7 +59167,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47933,7 +59184,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47949,7 +59201,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47965,7 +59218,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47981,7 +59235,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -47997,7 +59252,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48013,7 +59269,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48029,7 +59286,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48045,7 +59303,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48061,7 +59320,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48077,7 +59337,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48093,7 +59354,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48109,7 +59371,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48125,7 +59388,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48141,7 +59405,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48157,7 +59422,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48173,7 +59439,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48189,7 +59456,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48205,7 +59473,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48221,7 +59490,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48237,7 +59507,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48253,7 +59524,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48269,7 +59541,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48285,7 +59558,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48301,7 +59575,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48317,7 +59592,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48333,7 +59609,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48349,7 +59626,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48365,7 +59643,8 @@ "name": "http_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48381,7 +59660,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48397,7 +59677,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48413,7 +59694,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48429,7 +59711,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48445,7 +59728,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48461,7 +59745,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48477,7 +59762,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48493,7 +59779,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48509,7 +59796,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48525,7 +59813,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48541,7 +59830,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48557,7 +59847,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48573,7 +59864,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48589,7 +59881,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48605,7 +59898,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48621,7 +59915,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48637,7 +59932,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48653,7 +59949,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48669,7 +59966,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48685,7 +59983,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48701,7 +60000,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48717,7 +60017,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48733,7 +60034,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48749,7 +60051,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48765,7 +60068,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48781,7 +60085,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48797,7 +60102,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48813,7 +60119,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48829,7 +60136,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48845,7 +60153,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48861,7 +60170,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48877,7 +60187,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48893,7 +60204,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48909,7 +60221,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48925,7 +60238,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48941,7 +60255,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48957,7 +60272,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48973,7 +60289,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -48989,7 +60306,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49005,7 +60323,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49021,7 +60340,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49037,7 +60357,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49053,7 +60374,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49069,7 +60391,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49085,7 +60408,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49101,7 +60425,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49117,7 +60442,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49133,7 +60459,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49149,7 +60476,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49165,7 +60493,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49181,7 +60510,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49197,7 +60527,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49213,7 +60544,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49229,7 +60561,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49245,7 +60578,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49261,7 +60595,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49277,7 +60612,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49293,7 +60629,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49309,7 +60646,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49325,7 +60663,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49341,7 +60680,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49357,7 +60697,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49373,7 +60714,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49389,7 +60731,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49405,7 +60748,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49421,7 +60765,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49437,7 +60782,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49453,7 +60799,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49469,7 +60816,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49485,7 +60833,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49501,7 +60850,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49517,7 +60867,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49533,7 +60884,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49549,7 +60901,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49565,7 +60918,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49581,7 +60935,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49597,7 +60952,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49613,7 +60969,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49629,7 +60986,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49645,7 +61003,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49661,7 +61020,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49677,7 +61037,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49693,7 +61054,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49709,7 +61071,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49725,7 +61088,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49741,7 +61105,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49757,7 +61122,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49773,7 +61139,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49789,7 +61156,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49805,7 +61173,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49821,7 +61190,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49837,7 +61207,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49853,7 +61224,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49869,7 +61241,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49885,7 +61258,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49901,7 +61275,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49917,7 +61292,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49933,7 +61309,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49949,7 +61326,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49965,7 +61343,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49981,7 +61360,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -49997,7 +61377,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50013,7 +61394,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50029,7 +61411,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50045,7 +61428,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50061,7 +61445,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50077,7 +61462,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50093,7 +61479,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50109,7 +61496,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50125,7 +61513,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50141,7 +61530,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50157,7 +61547,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50173,7 +61564,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50189,7 +61581,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50205,7 +61598,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50221,7 +61615,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50237,7 +61632,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50253,7 +61649,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50269,7 +61666,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50285,7 +61683,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50301,7 +61700,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50317,7 +61717,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50333,7 +61734,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50349,7 +61751,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50365,7 +61768,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50381,7 +61785,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50397,7 +61802,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50413,7 +61819,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50429,7 +61836,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50445,7 +61853,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50461,7 +61870,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50477,7 +61887,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50493,7 +61904,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50509,7 +61921,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50525,7 +61938,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50541,7 +61955,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50557,7 +61972,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50573,7 +61989,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50589,7 +62006,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50605,7 +62023,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50621,7 +62040,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50637,7 +62057,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50653,7 +62074,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50669,7 +62091,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50685,7 +62108,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50701,7 +62125,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50717,7 +62142,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50733,7 +62159,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50749,7 +62176,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50765,7 +62193,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50781,7 +62210,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50797,7 +62227,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50813,7 +62244,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50829,7 +62261,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50845,7 +62278,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50861,7 +62295,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50877,7 +62312,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50893,7 +62329,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50909,7 +62346,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50925,7 +62363,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50941,7 +62380,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50957,7 +62397,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50973,7 +62414,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -50989,7 +62431,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51005,7 +62448,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51021,7 +62465,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51037,7 +62482,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51053,7 +62499,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51069,7 +62516,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51085,7 +62533,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51101,7 +62550,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51117,7 +62567,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51133,7 +62584,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51149,7 +62601,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51165,7 +62618,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51181,7 +62635,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51197,7 +62652,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51213,7 +62669,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51229,7 +62686,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51245,7 +62703,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51261,7 +62720,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51277,7 +62737,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51293,7 +62754,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51309,7 +62771,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51325,7 +62788,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51341,7 +62805,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51357,7 +62822,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51373,7 +62839,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51389,7 +62856,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51405,7 +62873,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51421,7 +62890,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51437,7 +62907,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51453,7 +62924,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51469,7 +62941,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51485,7 +62958,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51501,7 +62975,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51517,7 +62992,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51533,7 +63009,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51549,7 +63026,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51565,7 +63043,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51581,7 +63060,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51597,7 +63077,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51613,7 +63094,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51629,7 +63111,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51645,7 +63128,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51661,7 +63145,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51677,7 +63162,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51693,7 +63179,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51709,7 +63196,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51725,7 +63213,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51741,7 +63230,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51757,7 +63247,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51773,7 +63264,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51789,7 +63281,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51805,7 +63298,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51821,7 +63315,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51837,7 +63332,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51853,7 +63349,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51869,7 +63366,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51885,7 +63383,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51901,7 +63400,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51917,7 +63417,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51933,7 +63434,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51949,7 +63451,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51965,7 +63468,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51981,7 +63485,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -51997,7 +63502,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52013,7 +63519,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52029,7 +63536,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52045,7 +63553,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52061,7 +63570,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52077,7 +63587,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52093,7 +63604,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52109,7 +63621,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52125,7 +63638,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52141,7 +63655,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52157,7 +63672,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52173,7 +63689,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52189,7 +63706,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52205,7 +63723,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52221,7 +63740,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52237,7 +63757,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52253,7 +63774,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52269,7 +63791,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52285,7 +63808,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52301,7 +63825,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52317,7 +63842,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52333,7 +63859,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52349,7 +63876,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52365,7 +63893,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52381,7 +63910,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52397,7 +63927,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52413,7 +63944,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52429,7 +63961,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52445,7 +63978,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52461,7 +63995,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52477,7 +64012,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52493,7 +64029,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52509,7 +64046,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52525,7 +64063,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52541,7 +64080,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52557,7 +64097,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52573,7 +64114,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52589,7 +64131,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52605,7 +64148,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52621,7 +64165,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52637,7 +64182,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52653,7 +64199,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52669,7 +64216,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52685,7 +64233,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52701,7 +64250,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52717,7 +64267,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52733,7 +64284,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52749,7 +64301,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52765,7 +64318,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52781,7 +64335,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52797,7 +64352,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52813,7 +64369,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52829,7 +64386,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52845,7 +64403,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52861,7 +64420,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52877,7 +64437,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52893,7 +64454,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52909,7 +64471,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52925,7 +64488,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52941,7 +64505,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52957,7 +64522,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52973,7 +64539,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -52989,7 +64556,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53005,7 +64573,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53021,7 +64590,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53037,7 +64607,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53053,7 +64624,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53069,7 +64641,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53085,7 +64658,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53101,7 +64675,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53117,7 +64692,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53133,7 +64709,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53149,7 +64726,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53165,7 +64743,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53181,7 +64760,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53197,7 +64777,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53213,7 +64794,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53229,7 +64811,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53245,7 +64828,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53261,7 +64845,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53277,7 +64862,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53293,7 +64879,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53309,7 +64896,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53325,7 +64913,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53341,7 +64930,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53357,7 +64947,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53373,7 +64964,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53389,7 +64981,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53405,7 +64998,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53421,7 +65015,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53437,7 +65032,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53453,7 +65049,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53469,7 +65066,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53485,7 +65083,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53501,7 +65100,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53517,7 +65117,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53533,7 +65134,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53549,7 +65151,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53565,7 +65168,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53581,7 +65185,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53597,7 +65202,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53613,7 +65219,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53629,7 +65236,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53645,7 +65253,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53661,7 +65270,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53677,7 +65287,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53693,7 +65304,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53709,7 +65321,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53725,7 +65338,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53741,7 +65355,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53757,7 +65372,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53773,7 +65389,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53789,7 +65406,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53805,7 +65423,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53821,7 +65440,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53837,7 +65457,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53853,7 +65474,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53869,7 +65491,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53885,7 +65508,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53901,7 +65525,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53917,7 +65542,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53933,7 +65559,8 @@ "name": "json_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53949,7 +65576,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53965,7 +65593,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53981,7 +65610,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -53997,7 +65627,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54013,7 +65644,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54029,7 +65661,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54045,7 +65678,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54061,7 +65695,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54077,7 +65712,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54093,7 +65729,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54109,7 +65746,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54125,7 +65763,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54141,7 +65780,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54157,7 +65797,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54173,7 +65814,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54189,7 +65831,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54205,7 +65848,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54221,7 +65865,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54237,7 +65882,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54253,7 +65899,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54269,7 +65916,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54285,7 +65933,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54301,7 +65950,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54317,7 +65967,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54333,7 +65984,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54349,7 +66001,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54365,7 +66018,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54381,7 +66035,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54397,7 +66052,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54413,7 +66069,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54429,7 +66086,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54445,7 +66103,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54461,7 +66120,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54477,7 +66137,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54493,7 +66154,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54509,7 +66171,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54525,7 +66188,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54541,7 +66205,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54557,7 +66222,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54573,7 +66239,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54589,7 +66256,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54605,7 +66273,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54621,7 +66290,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54637,7 +66307,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54653,7 +66324,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54669,7 +66341,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54685,7 +66358,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54701,7 +66375,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54717,7 +66392,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54733,7 +66409,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54749,7 +66426,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54765,7 +66443,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54781,7 +66460,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54797,7 +66477,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54813,7 +66494,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54829,7 +66511,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54845,7 +66528,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54861,7 +66545,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54877,7 +66562,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54893,7 +66579,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54909,7 +66596,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54925,7 +66613,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54941,7 +66630,8 @@ "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54957,7 +66647,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54973,7 +66664,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -54989,7 +66681,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55005,7 +66698,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55021,7 +66715,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55037,7 +66732,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55053,7 +66749,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55069,7 +66766,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55085,7 +66783,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55101,7 +66800,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55117,7 +66817,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55133,7 +66834,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55149,7 +66851,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55165,7 +66868,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55181,7 +66885,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55197,7 +66902,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55213,7 +66919,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55229,7 +66936,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55245,7 +66953,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55261,7 +66970,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55277,7 +66987,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55293,7 +67004,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55309,7 +67021,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55325,7 +67038,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55341,7 +67055,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55357,7 +67072,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55373,7 +67089,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55389,7 +67106,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55405,7 +67123,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55421,7 +67140,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55437,7 +67157,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55453,7 +67174,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55469,7 +67191,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55485,7 +67208,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55501,7 +67225,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55517,7 +67242,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55533,7 +67259,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55549,7 +67276,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55565,7 +67293,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55581,7 +67310,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55597,7 +67327,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55613,7 +67344,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55629,7 +67361,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55645,7 +67378,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55661,7 +67395,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55677,7 +67412,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55693,7 +67429,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55709,7 +67446,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55725,7 +67463,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55741,7 +67480,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55757,7 +67497,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55773,7 +67514,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55789,7 +67531,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55805,7 +67548,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55821,7 +67565,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55837,7 +67582,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55853,7 +67599,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55869,7 +67616,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55885,7 +67633,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55901,7 +67650,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55917,7 +67667,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55933,7 +67684,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55949,7 +67701,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55965,7 +67718,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55981,7 +67735,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -55997,7 +67752,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56013,7 +67769,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56029,7 +67786,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56045,7 +67803,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56061,7 +67820,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56077,7 +67837,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56093,7 +67854,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56109,7 +67871,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56125,7 +67888,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56141,7 +67905,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56157,7 +67922,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56173,7 +67939,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56189,7 +67956,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56205,7 +67973,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56221,7 +67990,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56237,7 +68007,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56253,7 +68024,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56269,7 +68041,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56285,7 +68058,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56301,7 +68075,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56317,7 +68092,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56333,7 +68109,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56349,7 +68126,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56365,7 +68143,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56381,7 +68160,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56397,7 +68177,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56413,7 +68194,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56429,7 +68211,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56445,7 +68228,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56461,7 +68245,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56477,7 +68262,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56493,7 +68279,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56509,7 +68296,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56525,7 +68313,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56541,7 +68330,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56557,7 +68347,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56573,7 +68364,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56589,7 +68381,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56605,7 +68398,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56621,7 +68415,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56637,7 +68432,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56653,7 +68449,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56669,7 +68466,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56685,7 +68483,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56701,7 +68500,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56717,7 +68517,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56733,7 +68534,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56749,7 +68551,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56765,7 +68568,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56781,7 +68585,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56797,7 +68602,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56813,7 +68619,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56829,7 +68636,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56845,7 +68653,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56861,7 +68670,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56877,7 +68687,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56893,7 +68704,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56909,7 +68721,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56925,7 +68738,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56941,7 +68755,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56957,7 +68772,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56973,7 +68789,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -56989,7 +68806,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57005,7 +68823,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57021,7 +68840,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57037,7 +68857,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57053,7 +68874,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57069,7 +68891,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57085,7 +68908,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57101,7 +68925,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57117,7 +68942,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57133,7 +68959,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57149,7 +68976,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57165,7 +68993,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57181,7 +69010,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57197,7 +69027,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57213,7 +69044,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57229,7 +69061,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57245,7 +69078,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57261,7 +69095,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57277,7 +69112,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57293,7 +69129,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57309,7 +69146,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57325,7 +69163,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57341,7 +69180,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57357,7 +69197,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57373,7 +69214,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57389,7 +69231,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57405,7 +69248,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57421,7 +69265,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57437,7 +69282,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57453,7 +69299,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57469,7 +69316,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57485,7 +69333,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57501,7 +69350,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57517,7 +69367,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57533,7 +69384,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57549,7 +69401,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57565,7 +69418,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57581,7 +69435,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57597,7 +69452,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57613,7 +69469,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57629,7 +69486,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57645,7 +69503,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57661,7 +69520,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57677,7 +69537,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57693,7 +69554,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57709,7 +69571,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57725,7 +69588,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57741,7 +69605,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57757,7 +69622,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57773,7 +69639,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57789,7 +69656,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57805,7 +69673,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57821,7 +69690,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57837,7 +69707,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57853,7 +69724,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57869,7 +69741,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57885,7 +69758,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57901,7 +69775,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57917,7 +69792,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57933,7 +69809,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57949,7 +69826,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57965,7 +69843,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57981,7 +69860,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -57997,7 +69877,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58013,7 +69894,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58029,7 +69911,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58045,7 +69928,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58061,7 +69945,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58077,7 +69962,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58093,7 +69979,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58109,7 +69996,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58125,7 +70013,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58141,7 +70030,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58157,7 +70047,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58173,7 +70064,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58189,7 +70081,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58205,7 +70098,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58221,7 +70115,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58237,7 +70132,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58253,7 +70149,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58269,7 +70166,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58285,7 +70183,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58301,7 +70200,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58317,7 +70217,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58333,7 +70234,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58349,7 +70251,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58365,7 +70268,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58381,7 +70285,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58397,7 +70302,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58413,7 +70319,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58429,7 +70336,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58445,7 +70353,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58461,7 +70370,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58477,7 +70387,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58493,7 +70404,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58509,7 +70421,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58525,7 +70438,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58541,7 +70455,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58557,7 +70472,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58573,7 +70489,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58589,7 +70506,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58605,7 +70523,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58621,7 +70540,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58637,7 +70557,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58653,7 +70574,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58669,7 +70591,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58685,7 +70608,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58701,7 +70625,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58717,7 +70642,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58733,7 +70659,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58749,7 +70676,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58765,7 +70693,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58781,7 +70710,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58797,7 +70727,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58813,7 +70744,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58829,7 +70761,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58845,7 +70778,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58861,7 +70795,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58877,7 +70812,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58893,7 +70829,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58909,7 +70846,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58925,7 +70863,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58941,7 +70880,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58957,7 +70897,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58973,7 +70914,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -58989,7 +70931,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59005,7 +70948,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59021,7 +70965,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59037,7 +70982,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59053,7 +70999,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59069,7 +71016,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59085,7 +71033,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59101,7 +71050,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59117,7 +71067,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59133,7 +71084,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59149,7 +71101,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59165,7 +71118,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59181,7 +71135,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59197,7 +71152,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59213,7 +71169,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59229,7 +71186,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59245,7 +71203,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59261,7 +71220,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59277,7 +71237,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59293,7 +71254,8 @@ "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59309,7 +71271,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59325,7 +71288,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59341,7 +71305,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59357,7 +71322,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59373,7 +71339,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59389,7 +71356,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59405,7 +71373,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59421,7 +71390,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59437,7 +71407,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59453,7 +71424,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59469,7 +71441,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59485,7 +71458,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59501,7 +71475,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59517,7 +71492,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59533,7 +71509,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59549,7 +71526,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59565,7 +71543,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59581,7 +71560,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59597,7 +71577,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59613,7 +71594,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59629,7 +71611,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59645,7 +71628,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59661,7 +71645,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59677,7 +71662,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59693,7 +71679,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59709,7 +71696,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59725,7 +71713,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59741,7 +71730,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59757,7 +71747,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59773,7 +71764,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59789,7 +71781,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59805,7 +71798,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59821,7 +71815,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59837,7 +71832,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59853,7 +71849,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59869,7 +71866,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59885,7 +71883,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59901,7 +71900,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59917,7 +71917,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59933,7 +71934,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59949,7 +71951,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59965,7 +71968,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59981,7 +71985,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -59997,7 +72002,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60013,7 +72019,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60029,7 +72036,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60045,7 +72053,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60061,7 +72070,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60077,7 +72087,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60093,7 +72104,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60109,7 +72121,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60125,7 +72138,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60141,7 +72155,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60157,7 +72172,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60173,7 +72189,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60189,7 +72206,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60205,7 +72223,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60221,7 +72240,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60237,7 +72257,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60253,7 +72274,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60269,7 +72291,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60285,7 +72308,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60301,7 +72325,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60317,7 +72342,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60333,7 +72359,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60349,7 +72376,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60365,7 +72393,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60381,7 +72410,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60397,7 +72427,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60413,7 +72444,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60429,7 +72461,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60445,7 +72478,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60461,7 +72495,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60477,7 +72512,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60493,7 +72529,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60509,7 +72546,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60525,7 +72563,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60541,7 +72580,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60557,7 +72597,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60573,7 +72614,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60589,7 +72631,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60605,7 +72648,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60621,7 +72665,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60637,7 +72682,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60653,7 +72699,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60669,7 +72716,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60685,7 +72733,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60701,7 +72750,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60717,7 +72767,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60733,7 +72784,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60749,7 +72801,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60765,7 +72818,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60781,7 +72835,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60797,7 +72852,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60813,7 +72869,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60829,7 +72886,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60845,7 +72903,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60861,7 +72920,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60877,7 +72937,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60893,7 +72954,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60909,7 +72971,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60925,7 +72988,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60941,7 +73005,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60957,7 +73022,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60973,7 +73039,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -60989,7 +73056,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61005,7 +73073,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61021,7 +73090,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61037,7 +73107,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61053,7 +73124,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61069,7 +73141,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61085,7 +73158,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61101,7 +73175,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61117,7 +73192,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61133,7 +73209,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61149,7 +73226,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61165,7 +73243,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61181,7 +73260,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61197,7 +73277,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61213,7 +73294,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61229,7 +73311,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61245,7 +73328,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61261,7 +73345,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61277,7 +73362,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61293,7 +73379,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61309,7 +73396,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61325,7 +73413,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61341,7 +73430,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61357,7 +73447,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61373,7 +73464,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61389,7 +73481,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61405,7 +73498,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61421,7 +73515,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61437,7 +73532,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61453,7 +73549,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61469,7 +73566,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61485,7 +73583,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61501,7 +73600,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61517,7 +73617,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61533,7 +73634,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61549,7 +73651,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61565,7 +73668,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61581,7 +73685,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61597,7 +73702,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61613,7 +73719,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61629,7 +73736,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61645,7 +73753,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61661,7 +73770,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61677,7 +73787,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61693,7 +73804,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61709,7 +73821,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61725,7 +73838,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61741,7 +73855,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61757,7 +73872,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61773,7 +73889,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61789,7 +73906,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61805,7 +73923,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61821,7 +73940,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61837,7 +73957,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61853,7 +73974,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61869,7 +73991,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61885,7 +74008,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61901,7 +74025,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61917,7 +74042,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61933,7 +74059,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61949,7 +74076,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61965,7 +74093,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61981,7 +74110,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -61997,7 +74127,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62013,7 +74144,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62029,7 +74161,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62045,7 +74178,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62061,7 +74195,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62077,7 +74212,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62093,7 +74229,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62109,7 +74246,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62125,7 +74263,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62141,7 +74280,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62157,7 +74297,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62173,7 +74314,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62189,7 +74331,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62205,7 +74348,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62221,7 +74365,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62237,7 +74382,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62253,7 +74399,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62269,7 +74416,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62285,7 +74433,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62301,7 +74450,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62317,7 +74467,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62333,7 +74484,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62349,7 +74501,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62365,7 +74518,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62381,7 +74535,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62397,7 +74552,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62413,7 +74569,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62429,7 +74586,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62445,7 +74603,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62461,7 +74620,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62477,7 +74637,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62493,7 +74654,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62509,7 +74671,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62525,7 +74688,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62541,7 +74705,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62557,7 +74722,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62573,7 +74739,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62589,7 +74756,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62605,7 +74773,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62621,7 +74790,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62637,7 +74807,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62653,7 +74824,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62669,7 +74841,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62685,7 +74858,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62701,7 +74875,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62717,7 +74892,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62733,7 +74909,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62749,7 +74926,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62765,7 +74943,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62781,7 +74960,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62797,7 +74977,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62813,7 +74994,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62829,7 +75011,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62845,7 +75028,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62861,7 +75045,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62877,7 +75062,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62893,7 +75079,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62909,7 +75096,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62925,7 +75113,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62941,7 +75130,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62957,7 +75147,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62973,7 +75164,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -62989,7 +75181,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63005,7 +75198,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63021,7 +75215,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63037,7 +75232,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63053,7 +75249,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63069,7 +75266,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63085,7 +75283,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63101,7 +75300,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63117,7 +75317,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63133,7 +75334,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63149,7 +75351,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63165,7 +75368,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63181,7 +75385,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63197,7 +75402,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63213,7 +75419,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63229,7 +75436,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63245,7 +75453,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63261,7 +75470,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63277,7 +75487,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63293,7 +75504,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63309,7 +75521,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63325,7 +75538,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63341,7 +75555,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63357,7 +75572,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63373,7 +75589,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63389,7 +75606,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63405,7 +75623,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63421,7 +75640,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63437,7 +75657,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63453,7 +75674,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63469,7 +75691,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63485,7 +75708,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63501,7 +75725,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63517,7 +75742,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63533,7 +75759,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63549,7 +75776,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63565,7 +75793,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63581,7 +75810,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63597,7 +75827,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63613,7 +75844,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63629,7 +75861,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63645,7 +75878,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63661,7 +75895,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63677,7 +75912,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63693,7 +75929,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63709,7 +75946,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63725,7 +75963,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63741,7 +75980,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63757,7 +75997,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63773,7 +76014,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63789,7 +76031,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63805,7 +76048,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63821,7 +76065,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63837,7 +76082,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63853,7 +76099,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63869,7 +76116,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63885,7 +76133,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63901,7 +76150,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63917,7 +76167,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63933,7 +76184,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63949,7 +76201,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63965,7 +76218,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63981,7 +76235,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -63997,7 +76252,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64013,7 +76269,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64029,7 +76286,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64045,7 +76303,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64061,7 +76320,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64077,7 +76337,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64093,7 +76354,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64109,7 +76371,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64125,7 +76388,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64141,7 +76405,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64157,7 +76422,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64173,7 +76439,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64189,7 +76456,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64205,7 +76473,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64221,7 +76490,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64237,7 +76507,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64253,7 +76524,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64269,7 +76541,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64285,7 +76558,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64301,7 +76575,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64317,7 +76592,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64333,7 +76609,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64349,7 +76626,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64365,7 +76643,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64381,7 +76660,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64397,7 +76677,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64413,7 +76694,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64429,7 +76711,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64445,7 +76728,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64461,7 +76745,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64477,7 +76762,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64493,7 +76779,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64509,7 +76796,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64525,7 +76813,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64541,7 +76830,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64557,7 +76847,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64573,7 +76864,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64589,7 +76881,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64605,7 +76898,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64621,7 +76915,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64637,7 +76932,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64653,7 +76949,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64669,7 +76966,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64685,7 +76983,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64701,7 +77000,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64717,7 +77017,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64733,7 +77034,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64749,7 +77051,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64765,7 +77068,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64781,7 +77085,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64797,7 +77102,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64813,7 +77119,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64829,7 +77136,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64845,7 +77153,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64861,7 +77170,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64877,7 +77187,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64893,7 +77204,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64909,7 +77221,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64925,7 +77238,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64941,7 +77255,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64957,7 +77272,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64973,7 +77289,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -64989,7 +77306,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65005,7 +77323,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65021,7 +77340,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65037,7 +77357,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65053,7 +77374,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65069,7 +77391,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65085,7 +77408,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65101,7 +77425,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65117,7 +77442,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65133,7 +77459,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65149,7 +77476,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65165,7 +77493,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65181,7 +77510,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65197,7 +77527,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65213,7 +77544,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65229,7 +77561,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65245,7 +77578,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65261,7 +77595,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65277,7 +77612,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65293,7 +77629,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65309,7 +77646,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65325,7 +77663,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65341,7 +77680,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65357,7 +77697,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65373,7 +77714,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65389,7 +77731,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65405,7 +77748,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65421,7 +77765,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65437,7 +77782,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65453,7 +77799,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65469,7 +77816,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65485,7 +77833,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65501,7 +77850,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65517,7 +77867,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65533,7 +77884,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65549,7 +77901,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65565,7 +77918,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65581,7 +77935,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65597,7 +77952,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65613,7 +77969,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65629,7 +77986,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65645,7 +78003,8 @@ "name": "server_fuzzer_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65661,7 +78020,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65677,7 +78037,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65693,7 +78054,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65709,7 +78071,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65725,7 +78088,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65741,7 +78105,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65757,7 +78122,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65773,7 +78139,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65789,7 +78156,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65805,7 +78173,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65821,7 +78190,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65837,7 +78207,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65853,7 +78224,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65869,7 +78241,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65885,7 +78258,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65901,7 +78275,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65917,7 +78292,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65933,7 +78309,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65949,7 +78326,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65965,7 +78343,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65981,7 +78360,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -65997,7 +78377,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -66013,7 +78394,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -66029,7 +78411,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -66045,7 +78428,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -66061,7 +78445,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -66077,7 +78462,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -66093,7 +78479,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -66109,7 +78496,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -66125,7 +78513,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -66141,7 +78530,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -66157,7 +78547,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -66173,7 +78564,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -66189,7 +78581,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -66205,7 +78598,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -66221,7 +78615,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -66237,7 +78632,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -66253,7 +78649,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -66269,7 +78666,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -66285,7 +78683,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -66301,7 +78700,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -66317,7 +78717,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -66333,7 +78734,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -66349,7 +78751,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -66365,7 +78768,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -66381,7 +78785,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -66397,7 +78802,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -66413,7 +78819,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -66429,7 +78836,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -66445,7 +78853,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -66461,7 +78870,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -66477,7 +78887,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -66493,7 +78904,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -66509,7 +78921,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -66525,7 +78938,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -66541,7 +78955,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -66557,7 +78972,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -66573,7 +78989,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -66589,7 +79006,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -66605,7 +79023,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -66621,7 +79040,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -66637,7 +79057,8 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false }, { "args": [ @@ -66653,6 +79074,7 @@ "name": "uri_fuzzer_test_one_entry", "platforms": [ "linux" - ] + ], + "uses_polling": false } ] diff --git a/vsprojects/build_plugins.bat b/vsprojects/build_plugins.bat index 4c33a584ad46baaf14bd78eb4777c66e255871b2..7c8e056dc4efad4a3fb65de27a6574dbcc9a4293 100644 --- a/vsprojects/build_plugins.bat +++ b/vsprojects/build_plugins.bat @@ -1,3 +1,32 @@ +@rem Copyright 2016, Google Inc. +@rem All rights reserved. +@rem +@rem Redistribution and use in source and binary forms, with or without +@rem modification, are permitted provided that the following conditions are +@rem met: +@rem +@rem * Redistributions of source code must retain the above copyright +@rem notice, this list of conditions and the following disclaimer. +@rem * Redistributions in binary form must reproduce the above +@rem copyright notice, this list of conditions and the following disclaimer +@rem in the documentation and/or other materials provided with the +@rem distribution. +@rem * Neither the name of Google Inc. nor the names of its +@rem contributors may be used to endorse or promote products derived from +@rem this software without specific prior written permission. +@rem +@rem THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +@rem "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +@rem LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +@rem A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +@rem OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +@rem SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +@rem LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +@rem DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +@rem THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +@rem (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +@rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + @rem Convenience script to build gRPC protoc plugins from command line. protoc plugins are used to generate service stub code from .proto service defintions. setlocal diff --git a/vsprojects/build_vs2010.bat b/vsprojects/build_vs2010.bat index 1bc3c86a92f4bd9c6a16bb1cad4ed0d7cdf42b0e..d951295369651beb2967624e7a5e775d86dc60cb 100644 --- a/vsprojects/build_vs2010.bat +++ b/vsprojects/build_vs2010.bat @@ -1,3 +1,32 @@ +@rem Copyright 2016, Google Inc. +@rem All rights reserved. +@rem +@rem Redistribution and use in source and binary forms, with or without +@rem modification, are permitted provided that the following conditions are +@rem met: +@rem +@rem * Redistributions of source code must retain the above copyright +@rem notice, this list of conditions and the following disclaimer. +@rem * Redistributions in binary form must reproduce the above +@rem copyright notice, this list of conditions and the following disclaimer +@rem in the documentation and/or other materials provided with the +@rem distribution. +@rem * Neither the name of Google Inc. nor the names of its +@rem contributors may be used to endorse or promote products derived from +@rem this software without specific prior written permission. +@rem +@rem THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +@rem "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +@rem LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +@rem A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +@rem OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +@rem SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +@rem LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +@rem DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +@rem THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +@rem (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +@rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + @rem Convenience wrapper that runs specified gRPC target using msbuild @rem Usage: build_vs2010.bat TARGET_NAME diff --git a/vsprojects/build_vs2013.bat b/vsprojects/build_vs2013.bat index 82c0a3ad824d91966dd43464f3eb505bfe09ca12..c500bf11ed5cb62674093df355ee983a903d2cb7 100644 --- a/vsprojects/build_vs2013.bat +++ b/vsprojects/build_vs2013.bat @@ -1,3 +1,32 @@ +@rem Copyright 2016, Google Inc. +@rem All rights reserved. +@rem +@rem Redistribution and use in source and binary forms, with or without +@rem modification, are permitted provided that the following conditions are +@rem met: +@rem +@rem * Redistributions of source code must retain the above copyright +@rem notice, this list of conditions and the following disclaimer. +@rem * Redistributions in binary form must reproduce the above +@rem copyright notice, this list of conditions and the following disclaimer +@rem in the documentation and/or other materials provided with the +@rem distribution. +@rem * Neither the name of Google Inc. nor the names of its +@rem contributors may be used to endorse or promote products derived from +@rem this software without specific prior written permission. +@rem +@rem THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +@rem "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +@rem LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +@rem A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +@rem OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +@rem SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +@rem LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +@rem DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +@rem THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +@rem (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +@rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + @rem Convenience wrapper that runs specified gRPC target using msbuild @rem Usage: build_vs2013.bat TARGET_NAME diff --git a/vsprojects/build_vs2015.bat b/vsprojects/build_vs2015.bat index c6e1b433a3e9fcf1526332d58ec52d41b807b925..e2f4b3db069d9dd28ac2f8f94dd740377af98ff6 100644 --- a/vsprojects/build_vs2015.bat +++ b/vsprojects/build_vs2015.bat @@ -1,3 +1,32 @@ +@rem Copyright 2016, Google Inc. +@rem All rights reserved. +@rem +@rem Redistribution and use in source and binary forms, with or without +@rem modification, are permitted provided that the following conditions are +@rem met: +@rem +@rem * Redistributions of source code must retain the above copyright +@rem notice, this list of conditions and the following disclaimer. +@rem * Redistributions in binary form must reproduce the above +@rem copyright notice, this list of conditions and the following disclaimer +@rem in the documentation and/or other materials provided with the +@rem distribution. +@rem * Neither the name of Google Inc. nor the names of its +@rem contributors may be used to endorse or promote products derived from +@rem this software without specific prior written permission. +@rem +@rem THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +@rem "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +@rem LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +@rem A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +@rem OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +@rem SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +@rem LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +@rem DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +@rem THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +@rem (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +@rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + @rem Convenience wrapper that runs specified gRPC target using msbuild @rem Usage: build_vs2015.bat TARGET_NAME diff --git a/vsprojects/buildtests_c.sln b/vsprojects/buildtests_c.sln index 34251cb7499dc92c551ec493273cbe43d12e4228..f332f656c7f638805bf366032a8254d7d57d410f 100644 --- a/vsprojects/buildtests_c.sln +++ b/vsprojects/buildtests_c.sln @@ -1095,6 +1095,18 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "initial_settings_frame_bad_ {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} EndProjectSection EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "large_metadata_bad_client_test", "vcxproj\test\large_metadata_bad_client_test\large_metadata_bad_client_test.vcxproj", "{B706A9EC-7982-0DBC-495D-07B165F6CF56}" + ProjectSection(myProperties) = preProject + lib = "False" + EndProjectSection + ProjectSection(ProjectDependencies) = postProject + {BA67B418-B699-E41A-9CC4-0279C49481A5} = {BA67B418-B699-E41A-9CC4-0279C49481A5} + {0A7E7F92-FDEA-40F1-A9EC-3BA484F98BBF} = {0A7E7F92-FDEA-40F1-A9EC-3BA484F98BBF} + {46CEDFFF-9692-456A-AA24-38B5D6BCF4C5} = {46CEDFFF-9692-456A-AA24-38B5D6BCF4C5} + {EAB0A629-17A9-44DB-B5FF-E91A721FE037} = {EAB0A629-17A9-44DB-B5FF-E91A721FE037} + {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} + EndProjectSection +EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "server_registered_method_bad_client_test", "vcxproj\test\server_registered_method_bad_client_test\server_registered_method_bad_client_test.vcxproj", "{B4E7CD82-988A-BD3A-29F8-8590D3A8BC28}" ProjectSection(myProperties) = preProject lib = "False" @@ -3111,6 +3123,22 @@ Global {6756895E-05BF-8CC7-58F2-868DF0C0300C}.Release-DLL|Win32.Build.0 = Release|Win32 {6756895E-05BF-8CC7-58F2-868DF0C0300C}.Release-DLL|x64.ActiveCfg = Release|x64 {6756895E-05BF-8CC7-58F2-868DF0C0300C}.Release-DLL|x64.Build.0 = Release|x64 + {B706A9EC-7982-0DBC-495D-07B165F6CF56}.Debug|Win32.ActiveCfg = Debug|Win32 + {B706A9EC-7982-0DBC-495D-07B165F6CF56}.Debug|x64.ActiveCfg = Debug|x64 + {B706A9EC-7982-0DBC-495D-07B165F6CF56}.Release|Win32.ActiveCfg = Release|Win32 + {B706A9EC-7982-0DBC-495D-07B165F6CF56}.Release|x64.ActiveCfg = Release|x64 + {B706A9EC-7982-0DBC-495D-07B165F6CF56}.Debug|Win32.Build.0 = Debug|Win32 + {B706A9EC-7982-0DBC-495D-07B165F6CF56}.Debug|x64.Build.0 = Debug|x64 + {B706A9EC-7982-0DBC-495D-07B165F6CF56}.Release|Win32.Build.0 = Release|Win32 + {B706A9EC-7982-0DBC-495D-07B165F6CF56}.Release|x64.Build.0 = Release|x64 + {B706A9EC-7982-0DBC-495D-07B165F6CF56}.Debug-DLL|Win32.ActiveCfg = Debug|Win32 + {B706A9EC-7982-0DBC-495D-07B165F6CF56}.Debug-DLL|Win32.Build.0 = Debug|Win32 + {B706A9EC-7982-0DBC-495D-07B165F6CF56}.Debug-DLL|x64.ActiveCfg = Debug|x64 + {B706A9EC-7982-0DBC-495D-07B165F6CF56}.Debug-DLL|x64.Build.0 = Debug|x64 + {B706A9EC-7982-0DBC-495D-07B165F6CF56}.Release-DLL|Win32.ActiveCfg = Release|Win32 + {B706A9EC-7982-0DBC-495D-07B165F6CF56}.Release-DLL|Win32.Build.0 = Release|Win32 + {B706A9EC-7982-0DBC-495D-07B165F6CF56}.Release-DLL|x64.ActiveCfg = Release|x64 + {B706A9EC-7982-0DBC-495D-07B165F6CF56}.Release-DLL|x64.Build.0 = Release|x64 {B4E7CD82-988A-BD3A-29F8-8590D3A8BC28}.Debug|Win32.ActiveCfg = Debug|Win32 {B4E7CD82-988A-BD3A-29F8-8590D3A8BC28}.Debug|x64.ActiveCfg = Debug|x64 {B4E7CD82-988A-BD3A-29F8-8590D3A8BC28}.Release|Win32.ActiveCfg = Release|Win32 diff --git a/vsprojects/coapp/openssl/buildall.bat b/vsprojects/coapp/openssl/buildall.bat index 2bf1c87077a2d43097a67d6959cecb22acfcf1a7..f5797abb219510b764701aa0bdbc5dd40556bdf1 100644 --- a/vsprojects/coapp/openssl/buildall.bat +++ b/vsprojects/coapp/openssl/buildall.bat @@ -1,3 +1,31 @@ +@rem Copyright 2016, Google Inc. +@rem All rights reserved. +@rem +@rem Redistribution and use in source and binary forms, with or without +@rem modification, are permitted provided that the following conditions are +@rem met: +@rem +@rem * Redistributions of source code must retain the above copyright +@rem notice, this list of conditions and the following disclaimer. +@rem * Redistributions in binary form must reproduce the above +@rem copyright notice, this list of conditions and the following disclaimer +@rem in the documentation and/or other materials provided with the +@rem distribution. +@rem * Neither the name of Google Inc. nor the names of its +@rem contributors may be used to endorse or promote products derived from +@rem this software without specific prior written permission. +@rem +@rem THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +@rem "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +@rem LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +@rem A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +@rem OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +@rem SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +@rem LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +@rem DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +@rem THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +@rem (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +@rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. rem Restore using NuGet dependencies (Download NuGet from nuget.org and put it in this directory first) nuget restore || goto eof: diff --git a/vsprojects/coapp/zlib/buildall.bat b/vsprojects/coapp/zlib/buildall.bat index 840410a5a237d236a0515e81fa98623fa07b92d5..2b4b4a1c80f6bbacf023caa3c604ad6eb8d8c2f6 100644 --- a/vsprojects/coapp/zlib/buildall.bat +++ b/vsprojects/coapp/zlib/buildall.bat @@ -1,3 +1,32 @@ +@rem Copyright 2016, Google Inc. +@rem All rights reserved. +@rem +@rem Redistribution and use in source and binary forms, with or without +@rem modification, are permitted provided that the following conditions are +@rem met: +@rem +@rem * Redistributions of source code must retain the above copyright +@rem notice, this list of conditions and the following disclaimer. +@rem * Redistributions in binary form must reproduce the above +@rem copyright notice, this list of conditions and the following disclaimer +@rem in the documentation and/or other materials provided with the +@rem distribution. +@rem * Neither the name of Google Inc. nor the names of its +@rem contributors may be used to endorse or promote products derived from +@rem this software without specific prior written permission. +@rem +@rem THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +@rem "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +@rem LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +@rem A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +@rem OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +@rem SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +@rem LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +@rem DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +@rem THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +@rem (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +@rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + @echo off setlocal diff --git a/vsprojects/vcxproj/grpc++/grpc++.vcxproj b/vsprojects/vcxproj/grpc++/grpc++.vcxproj index 29cab37d521ad210e3adbf5d65336afbc11b55bd..65de5e97175a0ab7438bcdcd9fc0c1be57277460 100644 --- a/vsprojects/vcxproj/grpc++/grpc++.vcxproj +++ b/vsprojects/vcxproj/grpc++/grpc++.vcxproj @@ -275,6 +275,8 @@ <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\rpc_service_method.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\serialization_traits.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\server_builder_option.h" /> + <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\server_builder_plugin.h" /> + <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\server_initializer.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\service_type.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\sync.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\sync_cxx11.h" /> @@ -331,6 +333,7 @@ <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\sync_stream.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\time.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\byte_buffer.h" /> + <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\byte_buffer_reader.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\compression_types.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\connectivity_state.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\grpc_types.h" /> diff --git a/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters b/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters index 15e2807fd410a5fb39db6bb6424ea766eba73713..ce50bd9de8d865b98195552446859142e4a1d072 100644 --- a/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters +++ b/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters @@ -147,6 +147,12 @@ <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\server_builder_option.h"> <Filter>include\grpc++\impl</Filter> </ClInclude> + <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\server_builder_plugin.h"> + <Filter>include\grpc++\impl</Filter> + </ClInclude> + <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\server_initializer.h"> + <Filter>include\grpc++\impl</Filter> + </ClInclude> <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\service_type.h"> <Filter>include\grpc++\impl</Filter> </ClInclude> @@ -315,6 +321,9 @@ <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\byte_buffer.h"> <Filter>include\grpc\impl\codegen</Filter> </ClInclude> + <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\byte_buffer_reader.h"> + <Filter>include\grpc\impl\codegen</Filter> + </ClInclude> <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\compression_types.h"> <Filter>include\grpc\impl\codegen</Filter> </ClInclude> diff --git a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj index fcda361ef19f722edd349d21fcc80f1fa057eaaf..895e2233518faa18e5811004f0f4a1c4f9277e7d 100644 --- a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj +++ b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj @@ -275,6 +275,8 @@ <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\rpc_service_method.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\serialization_traits.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\server_builder_option.h" /> + <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\server_builder_plugin.h" /> + <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\server_initializer.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\service_type.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\sync.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\sync_cxx11.h" /> @@ -331,6 +333,7 @@ <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\sync_stream.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\time.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\byte_buffer.h" /> + <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\byte_buffer_reader.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\compression_types.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\connectivity_state.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\grpc_types.h" /> diff --git a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters index 1dc95f985ad708ee18f081ad85fcce28016db5ec..ab305fa92972d5fc2df02c4dc4734db575fae846 100644 --- a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters +++ b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters @@ -132,6 +132,12 @@ <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\server_builder_option.h"> <Filter>include\grpc++\impl</Filter> </ClInclude> + <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\server_builder_plugin.h"> + <Filter>include\grpc++\impl</Filter> + </ClInclude> + <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\server_initializer.h"> + <Filter>include\grpc++\impl</Filter> + </ClInclude> <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\service_type.h"> <Filter>include\grpc++\impl</Filter> </ClInclude> @@ -300,6 +306,9 @@ <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\byte_buffer.h"> <Filter>include\grpc\impl\codegen</Filter> </ClInclude> + <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\byte_buffer_reader.h"> + <Filter>include\grpc\impl\codegen</Filter> + </ClInclude> <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\compression_types.h"> <Filter>include\grpc\impl\codegen</Filter> </ClInclude> diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj b/vsprojects/vcxproj/grpc/grpc.vcxproj index 465f2e414ac3e462cf84383d4bb5fd43e683e51b..46241e253c23e23eabcd92be78f444d69204c7f4 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj @@ -273,6 +273,7 @@ <ClInclude Include="$(SolutionDir)\..\include\grpc\grpc.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc\status.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\byte_buffer.h" /> + <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\byte_buffer_reader.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\compression_types.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\connectivity_state.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\grpc_types.h" /> @@ -292,6 +293,7 @@ <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\sync_posix.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\sync_win32.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\time.h" /> + <ClInclude Include="$(SolutionDir)\..\include\grpc\grpc_cronet.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc\grpc_security.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc\grpc_security_constants.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc\census.h" /> @@ -315,6 +317,7 @@ <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\endpoint.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\endpoint_pair.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_and_epoll_posix.h" /> + <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_posix.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_posix.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\exec_ctx.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\executor.h" /> @@ -421,8 +424,9 @@ <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\subchannel_call_holder.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\subchannel_index.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\uri_parser.h" /> + <ClInclude Include="$(SolutionDir)\..\third_party\objective_c\Cronet\cronet_c_for_grpc.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\load_balancer_api.h" /> - <ClInclude Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\proto\grpc\lb\v0\load_balancer.pb.h" /> + <ClInclude Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\proto\grpc\lb\v1\load_balancer.pb.h" /> <ClInclude Include="$(SolutionDir)\..\third_party\nanopb\pb.h" /> <ClInclude Include="$(SolutionDir)\..\third_party\nanopb\pb_common.h" /> <ClInclude Include="$(SolutionDir)\..\third_party\nanopb\pb_decode.h" /> @@ -475,6 +479,8 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_and_epoll_posix.c"> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_posix.c"> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_posix.c"> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\exec_ctx.c"> @@ -729,9 +735,15 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\transport\chttp2\client\insecure\channel_create.c"> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\ext\transport\cronet\client\secure\cronet_channel_create.c"> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\ext\transport\cronet\transport\cronet_api_dummy.c"> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\ext\transport\cronet\transport\cronet_transport.c"> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\load_balancer_api.c"> </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\proto\grpc\lb\v0\load_balancer.pb.c"> + <ClCompile Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\proto\grpc\lb\v1\load_balancer.pb.c"> </ClCompile> <ClCompile Include="$(SolutionDir)\..\third_party\nanopb\pb_common.c"> </ClCompile> diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters index f4dfa82f2916fb2db80211738c3dd1d617f54a33..9668b9a11489edab9928fd40dfa2d32522b7b5f5 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters @@ -58,6 +58,9 @@ <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_and_epoll_posix.c"> <Filter>src\core\lib\iomgr</Filter> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_posix.c"> + <Filter>src\core\lib\iomgr</Filter> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_posix.c"> <Filter>src\core\lib\iomgr</Filter> </ClCompile> @@ -439,11 +442,20 @@ <ClCompile Include="$(SolutionDir)\..\src\core\ext\transport\chttp2\client\insecure\channel_create.c"> <Filter>src\core\ext\transport\chttp2\client\insecure</Filter> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\ext\transport\cronet\client\secure\cronet_channel_create.c"> + <Filter>src\core\ext\transport\cronet\client\secure</Filter> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\ext\transport\cronet\transport\cronet_api_dummy.c"> + <Filter>src\core\ext\transport\cronet\transport</Filter> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\ext\transport\cronet\transport\cronet_transport.c"> + <Filter>src\core\ext\transport\cronet\transport</Filter> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\load_balancer_api.c"> <Filter>src\core\ext\lb_policy\grpclb</Filter> </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\proto\grpc\lb\v0\load_balancer.pb.c"> - <Filter>src\core\ext\lb_policy\grpclb\proto\grpc\lb\v0</Filter> + <ClCompile Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\proto\grpc\lb\v1\load_balancer.pb.c"> + <Filter>src\core\ext\lb_policy\grpclb\proto\grpc\lb\v1</Filter> </ClCompile> <ClCompile Include="$(SolutionDir)\..\third_party\nanopb\pb_common.c"> <Filter>third_party\nanopb</Filter> @@ -522,6 +534,9 @@ <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\byte_buffer.h"> <Filter>include\grpc\impl\codegen</Filter> </ClInclude> + <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\byte_buffer_reader.h"> + <Filter>include\grpc\impl\codegen</Filter> + </ClInclude> <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\compression_types.h"> <Filter>include\grpc\impl\codegen</Filter> </ClInclude> @@ -579,6 +594,9 @@ <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\time.h"> <Filter>include\grpc\impl\codegen</Filter> </ClInclude> + <ClInclude Include="$(SolutionDir)\..\include\grpc\grpc_cronet.h"> + <Filter>include\grpc</Filter> + </ClInclude> <ClInclude Include="$(SolutionDir)\..\include\grpc\grpc_security.h"> <Filter>include\grpc</Filter> </ClInclude> @@ -644,6 +662,9 @@ <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_and_epoll_posix.h"> <Filter>src\core\lib\iomgr</Filter> </ClInclude> + <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_posix.h"> + <Filter>src\core\lib\iomgr</Filter> + </ClInclude> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_posix.h"> <Filter>src\core\lib\iomgr</Filter> </ClInclude> @@ -962,11 +983,14 @@ <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\uri_parser.h"> <Filter>src\core\ext\client_config</Filter> </ClInclude> + <ClInclude Include="$(SolutionDir)\..\third_party\objective_c\Cronet\cronet_c_for_grpc.h"> + <Filter>third_party\objective_c\Cronet</Filter> + </ClInclude> <ClInclude Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\load_balancer_api.h"> <Filter>src\core\ext\lb_policy\grpclb</Filter> </ClInclude> - <ClInclude Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\proto\grpc\lb\v0\load_balancer.pb.h"> - <Filter>src\core\ext\lb_policy\grpclb\proto\grpc\lb\v0</Filter> + <ClInclude Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\proto\grpc\lb\v1\load_balancer.pb.h"> + <Filter>src\core\ext\lb_policy\grpclb\proto\grpc\lb\v1</Filter> </ClInclude> <ClInclude Include="$(SolutionDir)\..\third_party\nanopb\pb.h"> <Filter>third_party\nanopb</Filter> @@ -1049,8 +1073,8 @@ <Filter Include="src\core\ext\lb_policy\grpclb\proto\grpc\lb"> <UniqueIdentifier>{adf7e553-94ef-14fd-e845-03104f00a06f}</UniqueIdentifier> </Filter> - <Filter Include="src\core\ext\lb_policy\grpclb\proto\grpc\lb\v0"> - <UniqueIdentifier>{0406d191-8817-38c3-a562-e3541201f424}</UniqueIdentifier> + <Filter Include="src\core\ext\lb_policy\grpclb\proto\grpc\lb\v1"> + <UniqueIdentifier>{bc357e2d-8ddd-a688-88a3-255228fc0818}</UniqueIdentifier> </Filter> <Filter Include="src\core\ext\lb_policy\pick_first"> <UniqueIdentifier>{b63ded00-b24f-708e-333f-ce199e421875}</UniqueIdentifier> @@ -1103,6 +1127,18 @@ <Filter Include="src\core\ext\transport\chttp2\transport"> <UniqueIdentifier>{6f34254e-e69f-c9b4-156d-5024bade5408}</UniqueIdentifier> </Filter> + <Filter Include="src\core\ext\transport\cronet"> + <UniqueIdentifier>{1e9c85e9-5522-7ef8-0017-7e19990a6194}</UniqueIdentifier> + </Filter> + <Filter Include="src\core\ext\transport\cronet\client"> + <UniqueIdentifier>{d0530883-75d9-b5f7-d594-26735a70ac7b}</UniqueIdentifier> + </Filter> + <Filter Include="src\core\ext\transport\cronet\client\secure"> + <UniqueIdentifier>{4fa6fe90-b7a8-5c8f-d629-db1e68d89eed}</UniqueIdentifier> + </Filter> + <Filter Include="src\core\ext\transport\cronet\transport"> + <UniqueIdentifier>{31518af8-5860-6d0d-ff78-4059fce29ec2}</UniqueIdentifier> + </Filter> <Filter Include="src\core\lib"> <UniqueIdentifier>{5b2ded3f-84a5-f6b4-2060-286c7d1dc945}</UniqueIdentifier> </Filter> @@ -1145,6 +1181,12 @@ <Filter Include="third_party\nanopb"> <UniqueIdentifier>{93d6596d-330c-1d27-6f84-3c840e57869e}</UniqueIdentifier> </Filter> + <Filter Include="third_party\objective_c"> + <UniqueIdentifier>{3a56a516-857e-d2aa-95cc-11685baf4e8c}</UniqueIdentifier> + </Filter> + <Filter Include="third_party\objective_c\Cronet"> + <UniqueIdentifier>{a165c6e3-0776-6f40-7351-d7865668e220}</UniqueIdentifier> + </Filter> </ItemGroup> </Project> diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj index 7f1a3727b613b0147bdf9afda89ebb1db98b691d..82eb644dfce34bf3f5b5f67f516ccfe49ec25108 100644 --- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj +++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj @@ -264,6 +264,7 @@ <ClInclude Include="$(SolutionDir)\..\include\grpc\grpc.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc\status.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\byte_buffer.h" /> + <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\byte_buffer_reader.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\compression_types.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\connectivity_state.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\grpc_types.h" /> @@ -304,6 +305,7 @@ <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\endpoint.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\endpoint_pair.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_and_epoll_posix.h" /> + <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_posix.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_posix.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\exec_ctx.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\executor.h" /> @@ -399,7 +401,7 @@ <ClInclude Include="$(SolutionDir)\..\src\core\ext\load_reporting\load_reporting.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\load_reporting\load_reporting_filter.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\load_balancer_api.h" /> - <ClInclude Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\proto\grpc\lb\v0\load_balancer.pb.h" /> + <ClInclude Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\proto\grpc\lb\v1\load_balancer.pb.h" /> <ClInclude Include="$(SolutionDir)\..\third_party\nanopb\pb.h" /> <ClInclude Include="$(SolutionDir)\..\third_party\nanopb\pb_common.h" /> <ClInclude Include="$(SolutionDir)\..\third_party\nanopb\pb_decode.h" /> @@ -452,6 +454,8 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_and_epoll_posix.c"> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_posix.c"> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_posix.c"> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\exec_ctx.c"> @@ -674,7 +678,7 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\load_balancer_api.c"> </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\proto\grpc\lb\v0\load_balancer.pb.c"> + <ClCompile Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\proto\grpc\lb\v1\load_balancer.pb.c"> </ClCompile> <ClCompile Include="$(SolutionDir)\..\third_party\nanopb\pb_common.c"> </ClCompile> diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters index 95409536b1497412c61cfd19de577867c81804a2..120f1bee37ed24d356cdfe378556bfd64af1f292 100644 --- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters +++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters @@ -61,6 +61,9 @@ <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_and_epoll_posix.c"> <Filter>src\core\lib\iomgr</Filter> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_posix.c"> + <Filter>src\core\lib\iomgr</Filter> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_posix.c"> <Filter>src\core\lib\iomgr</Filter> </ClCompile> @@ -394,8 +397,8 @@ <ClCompile Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\load_balancer_api.c"> <Filter>src\core\ext\lb_policy\grpclb</Filter> </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\proto\grpc\lb\v0\load_balancer.pb.c"> - <Filter>src\core\ext\lb_policy\grpclb\proto\grpc\lb\v0</Filter> + <ClCompile Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\proto\grpc\lb\v1\load_balancer.pb.c"> + <Filter>src\core\ext\lb_policy\grpclb\proto\grpc\lb\v1</Filter> </ClCompile> <ClCompile Include="$(SolutionDir)\..\third_party\nanopb\pb_common.c"> <Filter>third_party\nanopb</Filter> @@ -462,6 +465,9 @@ <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\byte_buffer.h"> <Filter>include\grpc\impl\codegen</Filter> </ClInclude> + <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\byte_buffer_reader.h"> + <Filter>include\grpc\impl\codegen</Filter> + </ClInclude> <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\compression_types.h"> <Filter>include\grpc\impl\codegen</Filter> </ClInclude> @@ -578,6 +584,9 @@ <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_and_epoll_posix.h"> <Filter>src\core\lib\iomgr</Filter> </ClInclude> + <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_posix.h"> + <Filter>src\core\lib\iomgr</Filter> + </ClInclude> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_posix.h"> <Filter>src\core\lib\iomgr</Filter> </ClInclude> @@ -863,8 +872,8 @@ <ClInclude Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\load_balancer_api.h"> <Filter>src\core\ext\lb_policy\grpclb</Filter> </ClInclude> - <ClInclude Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\proto\grpc\lb\v0\load_balancer.pb.h"> - <Filter>src\core\ext\lb_policy\grpclb\proto\grpc\lb\v0</Filter> + <ClInclude Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\proto\grpc\lb\v1\load_balancer.pb.h"> + <Filter>src\core\ext\lb_policy\grpclb\proto\grpc\lb\v1</Filter> </ClInclude> <ClInclude Include="$(SolutionDir)\..\third_party\nanopb\pb.h"> <Filter>third_party\nanopb</Filter> @@ -941,8 +950,8 @@ <Filter Include="src\core\ext\lb_policy\grpclb\proto\grpc\lb"> <UniqueIdentifier>{21858d9d-30b5-8847-5882-6b47df0fa293}</UniqueIdentifier> </Filter> - <Filter Include="src\core\ext\lb_policy\grpclb\proto\grpc\lb\v0"> - <UniqueIdentifier>{1795a20b-3e7c-e27d-eae1-96582fa9a958}</UniqueIdentifier> + <Filter Include="src\core\ext\lb_policy\grpclb\proto\grpc\lb\v1"> + <UniqueIdentifier>{e9256e96-ea3d-c1fd-6426-9d53d9f08f66}</UniqueIdentifier> </Filter> <Filter Include="src\core\ext\lb_policy\pick_first"> <UniqueIdentifier>{e27f9ecf-97bb-1a2e-3135-a41f732dcf55}</UniqueIdentifier> diff --git a/vsprojects/vcxproj/test/codegen_test_full/codegen_test_full.vcxproj b/vsprojects/vcxproj/test/codegen_test_full/codegen_test_full.vcxproj index cd0b40c8730895a46820476516eae7dd9974b2d0..34e939cf84559a5ca7b722794c81bcc5d5189c8d 100644 --- a/vsprojects/vcxproj/test/codegen_test_full/codegen_test_full.vcxproj +++ b/vsprojects/vcxproj/test/codegen_test_full/codegen_test_full.vcxproj @@ -191,6 +191,7 @@ <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\sync_stream.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\time.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\byte_buffer.h" /> + <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\byte_buffer_reader.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\compression_types.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\connectivity_state.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\grpc_types.h" /> diff --git a/vsprojects/vcxproj/test/codegen_test_full/codegen_test_full.vcxproj.filters b/vsprojects/vcxproj/test/codegen_test_full/codegen_test_full.vcxproj.filters index 029b8ef774126c593a9f935a6bce0c9fa7d30eaf..d66236580c2b8e5d3a0bc84f57e777b7e77e2999 100644 --- a/vsprojects/vcxproj/test/codegen_test_full/codegen_test_full.vcxproj.filters +++ b/vsprojects/vcxproj/test/codegen_test_full/codegen_test_full.vcxproj.filters @@ -120,6 +120,9 @@ <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\byte_buffer.h"> <Filter>include\grpc\impl\codegen</Filter> </ClInclude> + <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\byte_buffer_reader.h"> + <Filter>include\grpc\impl\codegen</Filter> + </ClInclude> <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\compression_types.h"> <Filter>include\grpc\impl\codegen</Filter> </ClInclude> diff --git a/vsprojects/vcxproj/test/codegen_test_minimal/codegen_test_minimal.vcxproj b/vsprojects/vcxproj/test/codegen_test_minimal/codegen_test_minimal.vcxproj index 6d138fae1cb7aa1c812746b43775ee8567d56a22..890d77df22c074d3d2686a67500572c0e999dc9a 100644 --- a/vsprojects/vcxproj/test/codegen_test_minimal/codegen_test_minimal.vcxproj +++ b/vsprojects/vcxproj/test/codegen_test_minimal/codegen_test_minimal.vcxproj @@ -191,6 +191,7 @@ <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\sync_stream.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\time.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\byte_buffer.h" /> + <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\byte_buffer_reader.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\compression_types.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\connectivity_state.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\grpc_types.h" /> diff --git a/vsprojects/vcxproj/test/codegen_test_minimal/codegen_test_minimal.vcxproj.filters b/vsprojects/vcxproj/test/codegen_test_minimal/codegen_test_minimal.vcxproj.filters index dc3f0b2d0404da9c62676416cf159446248b9ef3..4e0ba656fc79217f21c54458083109c465c99981 100644 --- a/vsprojects/vcxproj/test/codegen_test_minimal/codegen_test_minimal.vcxproj.filters +++ b/vsprojects/vcxproj/test/codegen_test_minimal/codegen_test_minimal.vcxproj.filters @@ -120,6 +120,9 @@ <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\byte_buffer.h"> <Filter>include\grpc\impl\codegen</Filter> </ClInclude> + <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\byte_buffer_reader.h"> + <Filter>include\grpc\impl\codegen</Filter> + </ClInclude> <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\compression_types.h"> <Filter>include\grpc\impl\codegen</Filter> </ClInclude> diff --git a/vsprojects/vcxproj/test/grpclb_api_test/grpclb_api_test.vcxproj b/vsprojects/vcxproj/test/grpclb_api_test/grpclb_api_test.vcxproj index 1509ece9f96a82b1ac74129593f6c07794df1bb6..91b11a1f0f43ee583340dd2a7ece0a59f26f0529 100644 --- a/vsprojects/vcxproj/test/grpclb_api_test/grpclb_api_test.vcxproj +++ b/vsprojects/vcxproj/test/grpclb_api_test/grpclb_api_test.vcxproj @@ -160,13 +160,13 @@ </ItemDefinitionGroup> <ItemGroup> - <ClCompile Include="$(SolutionDir)\..\src\proto\grpc\lb\v0\load_balancer.pb.cc"> + <ClCompile Include="$(SolutionDir)\..\src\proto\grpc\lb\v1\load_balancer.pb.cc"> </ClCompile> - <ClInclude Include="$(SolutionDir)\..\src\proto\grpc\lb\v0\load_balancer.pb.h"> + <ClInclude Include="$(SolutionDir)\..\src\proto\grpc\lb\v1\load_balancer.pb.h"> </ClInclude> - <ClCompile Include="$(SolutionDir)\..\src\proto\grpc\lb\v0\load_balancer.grpc.pb.cc"> + <ClCompile Include="$(SolutionDir)\..\src\proto\grpc\lb\v1\load_balancer.grpc.pb.cc"> </ClCompile> - <ClInclude Include="$(SolutionDir)\..\src\proto\grpc\lb\v0\load_balancer.grpc.pb.h"> + <ClInclude Include="$(SolutionDir)\..\src\proto\grpc\lb\v1\load_balancer.grpc.pb.h"> </ClInclude> <ClCompile Include="$(SolutionDir)\..\test\cpp\grpclb\grpclb_api_test.cc"> </ClCompile> diff --git a/vsprojects/vcxproj/test/grpclb_api_test/grpclb_api_test.vcxproj.filters b/vsprojects/vcxproj/test/grpclb_api_test/grpclb_api_test.vcxproj.filters index 6c57b8c162a7e34d7ead3fbf32e691069a1f8b5e..50f0a3eac255764550f0b4e365a7644a3e6fb07e 100644 --- a/vsprojects/vcxproj/test/grpclb_api_test/grpclb_api_test.vcxproj.filters +++ b/vsprojects/vcxproj/test/grpclb_api_test/grpclb_api_test.vcxproj.filters @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> - <ClCompile Include="$(SolutionDir)\..\src\proto\grpc\lb\v0\load_balancer.proto"> - <Filter>src\proto\grpc\lb\v0</Filter> + <ClCompile Include="$(SolutionDir)\..\src\proto\grpc\lb\v1\load_balancer.proto"> + <Filter>src\proto\grpc\lb\v1</Filter> </ClCompile> <ClCompile Include="$(SolutionDir)\..\test\cpp\grpclb\grpclb_api_test.cc"> <Filter>test\cpp\grpclb</Filter> @@ -22,8 +22,8 @@ <Filter Include="src\proto\grpc\lb"> <UniqueIdentifier>{2981699e-c196-c599-bc17-c177770f89ee}</UniqueIdentifier> </Filter> - <Filter Include="src\proto\grpc\lb\v0"> - <UniqueIdentifier>{3d04774a-1c2f-e100-435e-08af5d539250}</UniqueIdentifier> + <Filter Include="src\proto\grpc\lb\v1"> + <UniqueIdentifier>{6cce8ddf-d9a9-1d71-0810-d1e6f8685d76}</UniqueIdentifier> </Filter> <Filter Include="test"> <UniqueIdentifier>{64736e1d-eb77-664f-34ab-6cf41263d3d8}</UniqueIdentifier> diff --git a/vsprojects/vcxproj/test/large_metadata_bad_client_test/large_metadata_bad_client_test.vcxproj b/vsprojects/vcxproj/test/large_metadata_bad_client_test/large_metadata_bad_client_test.vcxproj new file mode 100644 index 0000000000000000000000000000000000000000..0a14694b75748be2490af3c695aa78553193c23e --- /dev/null +++ b/vsprojects/vcxproj/test/large_metadata_bad_client_test/large_metadata_bad_client_test.vcxproj @@ -0,0 +1,202 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\1.0.204.1.props')" /> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{B706A9EC-7982-0DBC-495D-07B165F6CF56}</ProjectGuid> + <IgnoreWarnIntDirInTempDetected>true</IgnoreWarnIntDirInTempDetected> + <IntDir>$(SolutionDir)IntDir\$(MSBuildProjectName)\</IntDir> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(VisualStudioVersion)' == '10.0'" Label="Configuration"> + <PlatformToolset>v100</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(VisualStudioVersion)' == '11.0'" Label="Configuration"> + <PlatformToolset>v110</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(VisualStudioVersion)' == '12.0'" Label="Configuration"> + <PlatformToolset>v120</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(VisualStudioVersion)' == '14.0'" Label="Configuration"> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="$(SolutionDir)\..\vsprojects\global.props" /> + <Import Project="$(SolutionDir)\..\vsprojects\openssl.props" /> + <Import Project="$(SolutionDir)\..\vsprojects\winsock.props" /> + <Import Project="$(SolutionDir)\..\vsprojects\zlib.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup Condition="'$(Configuration)'=='Debug'"> + <TargetName>large_metadata_bad_client_test</TargetName> + <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib> + <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib> + <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl> + <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)'=='Release'"> + <TargetName>large_metadata_bad_client_test</TargetName> + <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib> + <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib> + <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl> + <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <PrecompiledHeader>NotUsing</PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <SDLCheck>true</SDLCheck> + <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> + <TreatWarningAsError>true</TreatWarningAsError> + <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat> + <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation> + <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation> + </Link> + </ItemDefinitionGroup> + + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <PrecompiledHeader>NotUsing</PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <SDLCheck>true</SDLCheck> + <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> + <TreatWarningAsError>true</TreatWarningAsError> + <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat> + <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation> + <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation> + </Link> + </ItemDefinitionGroup> + + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <PrecompiledHeader>NotUsing</PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>MaxSpeed</Optimization> + <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <TreatWarningAsError>true</TreatWarningAsError> + <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat> + <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation> + <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + </ItemDefinitionGroup> + + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <PrecompiledHeader>NotUsing</PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>MaxSpeed</Optimization> + <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <TreatWarningAsError>true</TreatWarningAsError> + <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat> + <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation> + <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + </ItemDefinitionGroup> + + <ItemGroup> + <ClCompile Include="$(SolutionDir)\..\test\core\bad_client\tests\large_metadata.c"> + </ClCompile> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\test/bad_client\bad_client_test\bad_client_test.vcxproj"> + <Project>{BA67B418-B699-E41A-9CC4-0279C49481A5}</Project> + </ProjectReference> + <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc_test_util_unsecure\grpc_test_util_unsecure.vcxproj"> + <Project>{0A7E7F92-FDEA-40F1-A9EC-3BA484F98BBF}</Project> + </ProjectReference> + <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc_unsecure\grpc_unsecure.vcxproj"> + <Project>{46CEDFFF-9692-456A-AA24-38B5D6BCF4C5}</Project> + </ProjectReference> + <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\gpr_test_util\gpr_test_util.vcxproj"> + <Project>{EAB0A629-17A9-44DB-B5FF-E91A721FE037}</Project> + </ProjectReference> + <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\gpr\gpr.vcxproj"> + <Project>{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}</Project> + </ProjectReference> + </ItemGroup> + <ItemGroup> + <None Include="packages.config" /> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" /> + <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" /> + <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" /> + <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" /> + </ImportGroup> + <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> + <PropertyGroup> + <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> + </PropertyGroup> + <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets')" /> + <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets')" /> + <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets')" /> + <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props')" /> + <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets')" /> + </Target> +</Project> + diff --git a/vsprojects/vcxproj/test/large_metadata_bad_client_test/large_metadata_bad_client_test.vcxproj.filters b/vsprojects/vcxproj/test/large_metadata_bad_client_test/large_metadata_bad_client_test.vcxproj.filters new file mode 100644 index 0000000000000000000000000000000000000000..5eb9a5e7cb9ab7f0e004e38909526033e770c0e6 --- /dev/null +++ b/vsprojects/vcxproj/test/large_metadata_bad_client_test/large_metadata_bad_client_test.vcxproj.filters @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup> + <ClCompile Include="$(SolutionDir)\..\test\core\bad_client\tests\large_metadata.c"> + <Filter>test\core\bad_client\tests</Filter> + </ClCompile> + </ItemGroup> + + <ItemGroup> + <Filter Include="test"> + <UniqueIdentifier>{6c1eb0cb-9d82-f961-7220-1f6edc913666}</UniqueIdentifier> + </Filter> + <Filter Include="test\core"> + <UniqueIdentifier>{79d5006f-93a1-aa0e-2568-37aa63eef567}</UniqueIdentifier> + </Filter> + <Filter Include="test\core\bad_client"> + <UniqueIdentifier>{dbde5995-24a0-2332-4bee-0540ed3aa848}</UniqueIdentifier> + </Filter> + <Filter Include="test\core\bad_client\tests"> + <UniqueIdentifier>{5cf4a13f-ae24-fd98-eb59-b5301f30367c}</UniqueIdentifier> + </Filter> + </ItemGroup> +</Project> + diff --git a/vsprojects/vcxproj/test/server_builder_plugin_test/server_builder_plugin_test.vcxproj b/vsprojects/vcxproj/test/server_builder_plugin_test/server_builder_plugin_test.vcxproj new file mode 100644 index 0000000000000000000000000000000000000000..0ebdd988172735901437fffe326efcedf140d07a --- /dev/null +++ b/vsprojects/vcxproj/test/server_builder_plugin_test/server_builder_plugin_test.vcxproj @@ -0,0 +1,207 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\1.0.204.1.props')" /> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{86751DC8-C8D9-57B6-2C8A-BB33021C773C}</ProjectGuid> + <IgnoreWarnIntDirInTempDetected>true</IgnoreWarnIntDirInTempDetected> + <IntDir>$(SolutionDir)IntDir\$(MSBuildProjectName)\</IntDir> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(VisualStudioVersion)' == '10.0'" Label="Configuration"> + <PlatformToolset>v100</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(VisualStudioVersion)' == '11.0'" Label="Configuration"> + <PlatformToolset>v110</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(VisualStudioVersion)' == '12.0'" Label="Configuration"> + <PlatformToolset>v120</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(VisualStudioVersion)' == '14.0'" Label="Configuration"> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="$(SolutionDir)\..\vsprojects\cpptest.props" /> + <Import Project="$(SolutionDir)\..\vsprojects\global.props" /> + <Import Project="$(SolutionDir)\..\vsprojects\openssl.props" /> + <Import Project="$(SolutionDir)\..\vsprojects\protobuf.props" /> + <Import Project="$(SolutionDir)\..\vsprojects\winsock.props" /> + <Import Project="$(SolutionDir)\..\vsprojects\zlib.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup Condition="'$(Configuration)'=='Debug'"> + <TargetName>server_builder_plugin_test</TargetName> + <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib> + <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib> + <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl> + <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)'=='Release'"> + <TargetName>server_builder_plugin_test</TargetName> + <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib> + <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib> + <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl> + <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <PrecompiledHeader>NotUsing</PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <SDLCheck>true</SDLCheck> + <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> + <TreatWarningAsError>true</TreatWarningAsError> + <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat> + <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation> + <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation> + </Link> + </ItemDefinitionGroup> + + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <PrecompiledHeader>NotUsing</PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <SDLCheck>true</SDLCheck> + <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> + <TreatWarningAsError>true</TreatWarningAsError> + <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat> + <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation> + <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation> + </Link> + </ItemDefinitionGroup> + + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <PrecompiledHeader>NotUsing</PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>MaxSpeed</Optimization> + <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <TreatWarningAsError>true</TreatWarningAsError> + <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat> + <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation> + <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + </ItemDefinitionGroup> + + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <PrecompiledHeader>NotUsing</PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>MaxSpeed</Optimization> + <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <TreatWarningAsError>true</TreatWarningAsError> + <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat> + <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation> + <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + </ItemDefinitionGroup> + + <ItemGroup> + <ClCompile Include="$(SolutionDir)\..\test\cpp\end2end\server_builder_plugin_test.cc"> + </ClCompile> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc++_test_util\grpc++_test_util.vcxproj"> + <Project>{0BE77741-552A-929B-A497-4EF7ECE17A64}</Project> + </ProjectReference> + <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc_test_util\grpc_test_util.vcxproj"> + <Project>{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}</Project> + </ProjectReference> + <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc++\grpc++.vcxproj"> + <Project>{C187A093-A0FE-489D-A40A-6E33DE0F9FEB}</Project> + </ProjectReference> + <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc\grpc.vcxproj"> + <Project>{29D16885-7228-4C31-81ED-5F9187C7F2A9}</Project> + </ProjectReference> + <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\gpr_test_util\gpr_test_util.vcxproj"> + <Project>{EAB0A629-17A9-44DB-B5FF-E91A721FE037}</Project> + </ProjectReference> + <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\gpr\gpr.vcxproj"> + <Project>{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}</Project> + </ProjectReference> + </ItemGroup> + <ItemGroup> + <None Include="packages.config" /> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" /> + <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" /> + <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" /> + <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" /> + </ImportGroup> + <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> + <PropertyGroup> + <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> + </PropertyGroup> + <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets')" /> + <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets')" /> + <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets')" /> + <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props')" /> + <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets')" /> + </Target> +</Project> + diff --git a/vsprojects/vcxproj/test/server_builder_plugin_test/server_builder_plugin_test.vcxproj.filters b/vsprojects/vcxproj/test/server_builder_plugin_test/server_builder_plugin_test.vcxproj.filters new file mode 100644 index 0000000000000000000000000000000000000000..629b913fc6e48d4cba6f88da362a94454b1fb686 --- /dev/null +++ b/vsprojects/vcxproj/test/server_builder_plugin_test/server_builder_plugin_test.vcxproj.filters @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup> + <ClCompile Include="$(SolutionDir)\..\test\cpp\end2end\server_builder_plugin_test.cc"> + <Filter>test\cpp\end2end</Filter> + </ClCompile> + </ItemGroup> + + <ItemGroup> + <Filter Include="test"> + <UniqueIdentifier>{37b2ebc1-b2f2-ecb9-37b7-f6d757bb99e3}</UniqueIdentifier> + </Filter> + <Filter Include="test\cpp"> + <UniqueIdentifier>{39400fed-f7b7-0f44-0ef3-ba3693d42011}</UniqueIdentifier> + </Filter> + <Filter Include="test\cpp\end2end"> + <UniqueIdentifier>{dab9dd19-3e5b-005e-4b5a-456de6111d71}</UniqueIdentifier> + </Filter> + </ItemGroup> +</Project> +