aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--.travis.yml3
-rw-r--r--BUILD8
-rw-r--r--Makefile81
-rw-r--r--build.json32
-rw-r--r--include/grpc/support/slice_buffer.h8
-rw-r--r--src/core/iomgr/endpoint_pair_windows.c85
-rw-r--r--src/core/iomgr/tcp_server_posix.c3
-rw-r--r--src/core/profiling/timers.c138
-rw-r--r--src/core/profiling/timers.h70
-rw-r--r--src/core/profiling/timers_preciseclock.h56
-rw-r--r--src/core/security/credentials.c71
-rw-r--r--src/core/security/credentials.h3
-rw-r--r--src/core/security/factories.c16
-rw-r--r--src/core/security/security_context.c17
-rw-r--r--src/core/security/security_context.h9
-rw-r--r--src/core/security/server_secure_chttp2.c11
-rw-r--r--src/core/support/slice_buffer.c57
-rw-r--r--src/core/support/time_win32.c20
-rw-r--r--src/core/surface/init.c7
-rw-r--r--src/core/surface/secure_channel_create.c3
-rw-r--r--src/core/transport/chttp2/stream_encoder.c84
-rw-r--r--src/core/transport/chttp2_transport.c5
-rw-r--r--src/core/transport/metadata.c45
-rw-r--r--src/core/transport/metadata.h12
-rw-r--r--src/node/examples/math_server.js40
-rw-r--r--src/node/package.json2
-rw-r--r--src/node/src/server.js8
-rw-r--r--src/node/test/math_client_test.js20
-rw-r--r--src/python/interop/interop/client.py2
-rw-r--r--src/python/interop/interop/methods.py2
-rw-r--r--src/python/src/grpc/early_adopter/implementations.py3
-rw-r--r--src/ruby/.rubocop_todo.yml34
-rw-r--r--src/ruby/CHANGELOG.md11
-rwxr-xr-xsrc/ruby/bin/apis/pubsub_demo.rb9
-rwxr-xr-xsrc/ruby/bin/interop/interop_client.rb14
-rwxr-xr-xsrc/ruby/grpc.gemspec2
-rw-r--r--src/ruby/lib/grpc/generic/client_stub.rb20
-rw-r--r--src/ruby/lib/grpc/version.rb2
-rw-r--r--src/ruby/spec/channel_spec.rb2
-rw-r--r--src/ruby/spec/client_server_spec.rb12
-rw-r--r--src/ruby/spec/generic/rpc_server_spec.rb3
-rw-r--r--src/ruby/spec/server_spec.rb2
-rw-r--r--templates/Makefile.template9
-rw-r--r--templates/tools/run_tests/tests.json.template3
-rw-r--r--templates/vsprojects/vs2013/Grpc.mak.template31
-rw-r--r--test/core/end2end/dualstack_socket_test.c2
-rw-r--r--test/core/iomgr/alarm_test.c4
-rw-r--r--test/core/profiling/timers_test.c83
-rw-r--r--test/core/transport/chttp2_transport_end2end_test.c2
-rw-r--r--test/core/util/port_posix.c35
-rw-r--r--test/core/util/port_windows.c158
-rw-r--r--test/cpp/qps/driver.cc28
-rw-r--r--test/cpp/qps/driver.h3
-rw-r--r--test/cpp/qps/qps_driver.cc4
-rw-r--r--test/cpp/qps/qps_worker.cc233
-rw-r--r--test/cpp/qps/qps_worker.h60
-rw-r--r--test/cpp/qps/smoke_test.cc8
-rwxr-xr-xtest/cpp/qps/smoke_test.sh28
-rw-r--r--test/cpp/qps/worker.cc189
-rwxr-xr-xtools/buildgen/generate_projects.sh8
-rwxr-xr-xtools/buildgen/plugins/expand_bin_attrs.py51
-rwxr-xr-xtools/gce_setup/cloud_prod_runner.sh22
-rwxr-xr-xtools/gce_setup/grpc_docker.sh32
-rwxr-xr-xtools/gce_setup/interop_test_runner.sh11
-rw-r--r--tools/gce_setup/post.html3
-rw-r--r--tools/gce_setup/pre.html1
-rwxr-xr-xtools/run_tests/jobset.py54
-rwxr-xr-xtools/run_tests/run_sanity.sh39
-rwxr-xr-xtools/run_tests/run_tests.py58
-rw-r--r--tools/run_tests/tests.json2534
-rw-r--r--vsprojects/vs2010/Grpc.mak12
-rw-r--r--vsprojects/vs2010/grpc.vcxproj6
-rw-r--r--vsprojects/vs2010/grpc.vcxproj.filters15
-rw-r--r--vsprojects/vs2010/grpc_test_util.vcxproj2
-rw-r--r--vsprojects/vs2010/grpc_unsecure.vcxproj6
-rw-r--r--vsprojects/vs2010/grpc_unsecure.vcxproj.filters15
-rw-r--r--vsprojects/vs2013/Grpc.mak189
-rw-r--r--vsprojects/vs2013/grpc.vcxproj6
-rw-r--r--vsprojects/vs2013/grpc.vcxproj.filters15
-rw-r--r--vsprojects/vs2013/grpc_test_util.vcxproj2
-rw-r--r--vsprojects/vs2013/grpc_unsecure.vcxproj6
-rw-r--r--vsprojects/vs2013/grpc_unsecure.vcxproj.filters15
82 files changed, 4015 insertions, 999 deletions
diff --git a/.travis.yml b/.travis.yml
index 165f8923c0..7d8634506c 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -4,12 +4,13 @@ before_install:
- sudo add-apt-repository ppa:h-rayflood/llvm -y
- sudo apt-get update -qq
- sudo apt-get install -qq libgtest-dev libgflags-dev python-virtualenv clang-3.5
- - sudo pip install cpp-coveralls
+ - sudo pip install cpp-coveralls mako simplejson
env:
global:
- RUBY_VERSION=2.1
- COVERALLS_PARALLEL=true
matrix:
+ - CONFIG=opt TEST=sanity
- CONFIG=dbg TEST=c
- CONFIG=dbg TEST=c++
- CONFIG=opt TEST=c
diff --git a/BUILD b/BUILD
index b42946ad8d..e25359d454 100644
--- a/BUILD
+++ b/BUILD
@@ -186,6 +186,8 @@ cc_library(
"src/core/json/json_common.h",
"src/core/json/json_reader.h",
"src/core/json/json_writer.h",
+ "src/core/profiling/timers.h",
+ "src/core/profiling/timers_preciseclock.h",
"src/core/statistics/census_interface.h",
"src/core/statistics/census_log.h",
"src/core/statistics/census_rpc_stats.h",
@@ -265,6 +267,7 @@ cc_library(
"src/core/iomgr/alarm_heap.c",
"src/core/iomgr/endpoint.c",
"src/core/iomgr/endpoint_pair_posix.c",
+ "src/core/iomgr/endpoint_pair_windows.c",
"src/core/iomgr/fd_posix.c",
"src/core/iomgr/iocp_windows.c",
"src/core/iomgr/iomgr.c",
@@ -297,6 +300,7 @@ cc_library(
"src/core/json/json_reader.c",
"src/core/json/json_string.c",
"src/core/json/json_writer.c",
+ "src/core/profiling/timers.c",
"src/core/statistics/census_init.c",
"src/core/statistics/census_log.c",
"src/core/statistics/census_rpc_stats.c",
@@ -413,6 +417,8 @@ cc_library(
"src/core/json/json_common.h",
"src/core/json/json_reader.h",
"src/core/json/json_writer.h",
+ "src/core/profiling/timers.h",
+ "src/core/profiling/timers_preciseclock.h",
"src/core/statistics/census_interface.h",
"src/core/statistics/census_log.h",
"src/core/statistics/census_rpc_stats.h",
@@ -472,6 +478,7 @@ cc_library(
"src/core/iomgr/alarm_heap.c",
"src/core/iomgr/endpoint.c",
"src/core/iomgr/endpoint_pair_posix.c",
+ "src/core/iomgr/endpoint_pair_windows.c",
"src/core/iomgr/fd_posix.c",
"src/core/iomgr/iocp_windows.c",
"src/core/iomgr/iomgr.c",
@@ -504,6 +511,7 @@ cc_library(
"src/core/json/json_reader.c",
"src/core/json/json_string.c",
"src/core/json/json_writer.c",
+ "src/core/profiling/timers.c",
"src/core/statistics/census_init.c",
"src/core/statistics/census_log.c",
"src/core/statistics/census_rpc_stats.c",
diff --git a/Makefile b/Makefile
index dfc7d62a62..0511c77fec 100644
--- a/Makefile
+++ b/Makefile
@@ -85,6 +85,15 @@ CPPFLAGS_opt = -O2
LDFLAGS_opt =
DEFINES_opt = NDEBUG
+VALID_CONFIG_latprof = 1
+CC_latprof = $(DEFAULT_CC)
+CXX_latprof = $(DEFAULT_CXX)
+LD_latprof = $(DEFAULT_CC)
+LDXX_latprof = $(DEFAULT_CXX)
+CPPFLAGS_latprof = -O2 -DGRPC_LATENCY_PROFILER
+LDFLAGS_latprof =
+DEFINES_latprof = NDEBUG
+
VALID_CONFIG_dbg = 1
CC_dbg = $(DEFAULT_CC)
CXX_dbg = $(DEFAULT_CXX)
@@ -621,6 +630,7 @@ tcp_server_posix_test: $(BINDIR)/$(CONFIG)/tcp_server_posix_test
time_averaged_stats_test: $(BINDIR)/$(CONFIG)/time_averaged_stats_test
time_test: $(BINDIR)/$(CONFIG)/time_test
timeout_encoding_test: $(BINDIR)/$(CONFIG)/timeout_encoding_test
+timers_test: $(BINDIR)/$(CONFIG)/timers_test
transport_metadata_test: $(BINDIR)/$(CONFIG)/transport_metadata_test
transport_security_test: $(BINDIR)/$(CONFIG)/transport_security_test
async_end2end_test: $(BINDIR)/$(CONFIG)/async_end2end_test
@@ -1081,7 +1091,7 @@ privatelibs_cxx: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/
buildtests: buildtests_c buildtests_cxx
-buildtests_c: privatelibs_c $(BINDIR)/$(CONFIG)/alarm_heap_test $(BINDIR)/$(CONFIG)/alarm_list_test $(BINDIR)/$(CONFIG)/alarm_test $(BINDIR)/$(CONFIG)/alpn_test $(BINDIR)/$(CONFIG)/bin_encoder_test $(BINDIR)/$(CONFIG)/census_hash_table_test $(BINDIR)/$(CONFIG)/census_statistics_multiple_writers_circular_buffer_test $(BINDIR)/$(CONFIG)/census_statistics_multiple_writers_test $(BINDIR)/$(CONFIG)/census_statistics_performance_test $(BINDIR)/$(CONFIG)/census_statistics_quick_test $(BINDIR)/$(CONFIG)/census_statistics_small_log_test $(BINDIR)/$(CONFIG)/census_stub_test $(BINDIR)/$(CONFIG)/census_window_stats_test $(BINDIR)/$(CONFIG)/chttp2_status_conversion_test $(BINDIR)/$(CONFIG)/chttp2_stream_encoder_test $(BINDIR)/$(CONFIG)/chttp2_stream_map_test $(BINDIR)/$(CONFIG)/chttp2_transport_end2end_test $(BINDIR)/$(CONFIG)/dualstack_socket_test $(BINDIR)/$(CONFIG)/echo_client $(BINDIR)/$(CONFIG)/echo_server $(BINDIR)/$(CONFIG)/echo_test $(BINDIR)/$(CONFIG)/fd_posix_test $(BINDIR)/$(CONFIG)/fling_client $(BINDIR)/$(CONFIG)/fling_server $(BINDIR)/$(CONFIG)/fling_stream_test $(BINDIR)/$(CONFIG)/fling_test $(BINDIR)/$(CONFIG)/gpr_cancellable_test $(BINDIR)/$(CONFIG)/gpr_cmdline_test $(BINDIR)/$(CONFIG)/gpr_env_test $(BINDIR)/$(CONFIG)/gpr_file_test $(BINDIR)/$(CONFIG)/gpr_histogram_test $(BINDIR)/$(CONFIG)/gpr_host_port_test $(BINDIR)/$(CONFIG)/gpr_log_test $(BINDIR)/$(CONFIG)/gpr_slice_buffer_test $(BINDIR)/$(CONFIG)/gpr_slice_test $(BINDIR)/$(CONFIG)/gpr_string_test $(BINDIR)/$(CONFIG)/gpr_sync_test $(BINDIR)/$(CONFIG)/gpr_thd_test $(BINDIR)/$(CONFIG)/gpr_time_test $(BINDIR)/$(CONFIG)/gpr_tls_test $(BINDIR)/$(CONFIG)/gpr_useful_test $(BINDIR)/$(CONFIG)/grpc_base64_test $(BINDIR)/$(CONFIG)/grpc_byte_buffer_reader_test $(BINDIR)/$(CONFIG)/grpc_channel_stack_test $(BINDIR)/$(CONFIG)/grpc_completion_queue_test $(BINDIR)/$(CONFIG)/grpc_credentials_test $(BINDIR)/$(CONFIG)/grpc_json_token_test $(BINDIR)/$(CONFIG)/grpc_stream_op_test $(BINDIR)/$(CONFIG)/hpack_parser_test $(BINDIR)/$(CONFIG)/hpack_table_test $(BINDIR)/$(CONFIG)/httpcli_format_request_test $(BINDIR)/$(CONFIG)/httpcli_parser_test $(BINDIR)/$(CONFIG)/httpcli_test $(BINDIR)/$(CONFIG)/json_rewrite $(BINDIR)/$(CONFIG)/json_rewrite_test $(BINDIR)/$(CONFIG)/json_test $(BINDIR)/$(CONFIG)/lame_client_test $(BINDIR)/$(CONFIG)/message_compress_test $(BINDIR)/$(CONFIG)/metadata_buffer_test $(BINDIR)/$(CONFIG)/multi_init_test $(BINDIR)/$(CONFIG)/murmur_hash_test $(BINDIR)/$(CONFIG)/no_server_test $(BINDIR)/$(CONFIG)/poll_kick_posix_test $(BINDIR)/$(CONFIG)/resolve_address_test $(BINDIR)/$(CONFIG)/secure_endpoint_test $(BINDIR)/$(CONFIG)/sockaddr_utils_test $(BINDIR)/$(CONFIG)/tcp_client_posix_test $(BINDIR)/$(CONFIG)/tcp_posix_test $(BINDIR)/$(CONFIG)/tcp_server_posix_test $(BINDIR)/$(CONFIG)/time_averaged_stats_test $(BINDIR)/$(CONFIG)/time_test $(BINDIR)/$(CONFIG)/timeout_encoding_test $(BINDIR)/$(CONFIG)/transport_metadata_test $(BINDIR)/$(CONFIG)/transport_security_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_no_op_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_thread_stress_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_writes_done_hangs_with_pending_read_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_after_accept_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_after_accept_and_writes_closed_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_after_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_before_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_in_a_vacuum_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_census_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_disappearing_server_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_early_server_shutdown_finishes_inflight_calls_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_early_server_shutdown_finishes_tags_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_graceful_server_shutdown_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_invoke_large_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_max_concurrent_streams_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_no_op_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_ping_pong_streaming_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_binary_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_trailing_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_with_large_metadata_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_simple_delayed_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_thread_stress_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_writes_done_hangs_with_pending_read_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_no_op_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_thread_stress_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_writes_done_hangs_with_pending_read_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_accept_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_accept_and_writes_closed_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_before_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_in_a_vacuum_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_census_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_disappearing_server_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_inflight_calls_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_tags_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_graceful_server_shutdown_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_invoke_large_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_max_concurrent_streams_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_no_op_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_ping_pong_streaming_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_binary_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_trailing_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_with_large_metadata_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_simple_delayed_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_thread_stress_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_writes_done_hangs_with_pending_read_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_no_op_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_thread_stress_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_writes_done_hangs_with_pending_read_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_after_accept_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_after_accept_and_writes_closed_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_after_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_before_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_in_a_vacuum_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_census_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_disappearing_server_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_early_server_shutdown_finishes_inflight_calls_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_early_server_shutdown_finishes_tags_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_graceful_server_shutdown_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_invoke_large_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_max_concurrent_streams_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_no_op_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_ping_pong_streaming_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_response_with_binary_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_response_with_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_response_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_response_with_trailing_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_with_large_metadata_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_simple_delayed_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_thread_stress_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_writes_done_hangs_with_pending_read_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_no_op_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_thread_stress_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_writes_done_hangs_with_pending_read_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_accept_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_accept_and_writes_closed_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_before_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_in_a_vacuum_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_census_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_disappearing_server_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_inflight_calls_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_tags_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_graceful_server_shutdown_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_invoke_large_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_max_concurrent_streams_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_no_op_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_ping_pong_streaming_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_binary_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_trailing_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_with_large_metadata_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_simple_delayed_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_thread_stress_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_writes_done_hangs_with_pending_read_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_no_op_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_thread_stress_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_writes_done_hangs_with_pending_read_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_and_writes_closed_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_before_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_in_a_vacuum_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_census_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_disappearing_server_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_inflight_calls_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_tags_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_graceful_server_shutdown_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_invoke_large_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_max_concurrent_streams_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_no_op_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_ping_pong_streaming_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_binary_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_trailing_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_with_large_metadata_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_simple_delayed_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_thread_stress_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_writes_done_hangs_with_pending_read_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_no_op_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_thread_stress_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_writes_done_hangs_with_pending_read_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_accept_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_accept_and_writes_closed_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_before_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_in_a_vacuum_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_census_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_disappearing_server_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_inflight_calls_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_tags_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_graceful_server_shutdown_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_invoke_large_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_max_concurrent_streams_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_no_op_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_ping_pong_streaming_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_binary_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_trailing_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_with_large_metadata_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_simple_delayed_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_thread_stress_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_writes_done_hangs_with_pending_read_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_no_op_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_thread_stress_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_writes_done_hangs_with_pending_read_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_and_writes_closed_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_before_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_in_a_vacuum_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_census_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_disappearing_server_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_inflight_calls_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_tags_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_graceful_server_shutdown_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_max_concurrent_streams_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_no_op_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_ping_pong_streaming_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_binary_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_trailing_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_with_large_metadata_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_simple_delayed_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_thread_stress_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_writes_done_hangs_with_pending_read_legacy_test
+buildtests_c: privatelibs_c $(BINDIR)/$(CONFIG)/alarm_heap_test $(BINDIR)/$(CONFIG)/alarm_list_test $(BINDIR)/$(CONFIG)/alarm_test $(BINDIR)/$(CONFIG)/alpn_test $(BINDIR)/$(CONFIG)/bin_encoder_test $(BINDIR)/$(CONFIG)/census_hash_table_test $(BINDIR)/$(CONFIG)/census_statistics_multiple_writers_circular_buffer_test $(BINDIR)/$(CONFIG)/census_statistics_multiple_writers_test $(BINDIR)/$(CONFIG)/census_statistics_performance_test $(BINDIR)/$(CONFIG)/census_statistics_quick_test $(BINDIR)/$(CONFIG)/census_statistics_small_log_test $(BINDIR)/$(CONFIG)/census_stub_test $(BINDIR)/$(CONFIG)/census_window_stats_test $(BINDIR)/$(CONFIG)/chttp2_status_conversion_test $(BINDIR)/$(CONFIG)/chttp2_stream_encoder_test $(BINDIR)/$(CONFIG)/chttp2_stream_map_test $(BINDIR)/$(CONFIG)/chttp2_transport_end2end_test $(BINDIR)/$(CONFIG)/dualstack_socket_test $(BINDIR)/$(CONFIG)/echo_client $(BINDIR)/$(CONFIG)/echo_server $(BINDIR)/$(CONFIG)/echo_test $(BINDIR)/$(CONFIG)/fd_posix_test $(BINDIR)/$(CONFIG)/fling_client $(BINDIR)/$(CONFIG)/fling_server $(BINDIR)/$(CONFIG)/fling_stream_test $(BINDIR)/$(CONFIG)/fling_test $(BINDIR)/$(CONFIG)/gpr_cancellable_test $(BINDIR)/$(CONFIG)/gpr_cmdline_test $(BINDIR)/$(CONFIG)/gpr_env_test $(BINDIR)/$(CONFIG)/gpr_file_test $(BINDIR)/$(CONFIG)/gpr_histogram_test $(BINDIR)/$(CONFIG)/gpr_host_port_test $(BINDIR)/$(CONFIG)/gpr_log_test $(BINDIR)/$(CONFIG)/gpr_slice_buffer_test $(BINDIR)/$(CONFIG)/gpr_slice_test $(BINDIR)/$(CONFIG)/gpr_string_test $(BINDIR)/$(CONFIG)/gpr_sync_test $(BINDIR)/$(CONFIG)/gpr_thd_test $(BINDIR)/$(CONFIG)/gpr_time_test $(BINDIR)/$(CONFIG)/gpr_tls_test $(BINDIR)/$(CONFIG)/gpr_useful_test $(BINDIR)/$(CONFIG)/grpc_base64_test $(BINDIR)/$(CONFIG)/grpc_byte_buffer_reader_test $(BINDIR)/$(CONFIG)/grpc_channel_stack_test $(BINDIR)/$(CONFIG)/grpc_completion_queue_test $(BINDIR)/$(CONFIG)/grpc_credentials_test $(BINDIR)/$(CONFIG)/grpc_json_token_test $(BINDIR)/$(CONFIG)/grpc_stream_op_test $(BINDIR)/$(CONFIG)/hpack_parser_test $(BINDIR)/$(CONFIG)/hpack_table_test $(BINDIR)/$(CONFIG)/httpcli_format_request_test $(BINDIR)/$(CONFIG)/httpcli_parser_test $(BINDIR)/$(CONFIG)/httpcli_test $(BINDIR)/$(CONFIG)/json_rewrite $(BINDIR)/$(CONFIG)/json_rewrite_test $(BINDIR)/$(CONFIG)/json_test $(BINDIR)/$(CONFIG)/lame_client_test $(BINDIR)/$(CONFIG)/message_compress_test $(BINDIR)/$(CONFIG)/metadata_buffer_test $(BINDIR)/$(CONFIG)/multi_init_test $(BINDIR)/$(CONFIG)/murmur_hash_test $(BINDIR)/$(CONFIG)/no_server_test $(BINDIR)/$(CONFIG)/poll_kick_posix_test $(BINDIR)/$(CONFIG)/resolve_address_test $(BINDIR)/$(CONFIG)/secure_endpoint_test $(BINDIR)/$(CONFIG)/sockaddr_utils_test $(BINDIR)/$(CONFIG)/tcp_client_posix_test $(BINDIR)/$(CONFIG)/tcp_posix_test $(BINDIR)/$(CONFIG)/tcp_server_posix_test $(BINDIR)/$(CONFIG)/time_averaged_stats_test $(BINDIR)/$(CONFIG)/time_test $(BINDIR)/$(CONFIG)/timeout_encoding_test $(BINDIR)/$(CONFIG)/timers_test $(BINDIR)/$(CONFIG)/transport_metadata_test $(BINDIR)/$(CONFIG)/transport_security_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_no_op_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_thread_stress_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_writes_done_hangs_with_pending_read_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_after_accept_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_after_accept_and_writes_closed_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_after_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_before_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_in_a_vacuum_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_census_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_disappearing_server_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_early_server_shutdown_finishes_inflight_calls_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_early_server_shutdown_finishes_tags_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_graceful_server_shutdown_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_invoke_large_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_max_concurrent_streams_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_no_op_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_ping_pong_streaming_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_binary_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_trailing_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_with_large_metadata_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_simple_delayed_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_thread_stress_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_writes_done_hangs_with_pending_read_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_no_op_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_thread_stress_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_writes_done_hangs_with_pending_read_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_accept_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_accept_and_writes_closed_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_before_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_in_a_vacuum_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_census_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_disappearing_server_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_inflight_calls_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_tags_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_graceful_server_shutdown_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_invoke_large_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_max_concurrent_streams_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_no_op_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_ping_pong_streaming_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_binary_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_trailing_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_with_large_metadata_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_simple_delayed_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_thread_stress_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_writes_done_hangs_with_pending_read_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_no_op_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_thread_stress_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_writes_done_hangs_with_pending_read_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_after_accept_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_after_accept_and_writes_closed_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_after_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_before_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_in_a_vacuum_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_census_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_disappearing_server_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_early_server_shutdown_finishes_inflight_calls_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_early_server_shutdown_finishes_tags_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_graceful_server_shutdown_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_invoke_large_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_max_concurrent_streams_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_no_op_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_ping_pong_streaming_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_response_with_binary_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_response_with_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_response_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_response_with_trailing_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_with_large_metadata_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_simple_delayed_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_thread_stress_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_writes_done_hangs_with_pending_read_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_no_op_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_thread_stress_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_writes_done_hangs_with_pending_read_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_accept_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_accept_and_writes_closed_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_before_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_in_a_vacuum_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_census_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_disappearing_server_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_inflight_calls_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_tags_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_graceful_server_shutdown_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_invoke_large_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_max_concurrent_streams_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_no_op_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_ping_pong_streaming_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_binary_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_trailing_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_with_large_metadata_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_simple_delayed_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_thread_stress_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_writes_done_hangs_with_pending_read_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_no_op_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_thread_stress_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_writes_done_hangs_with_pending_read_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_and_writes_closed_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_before_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_in_a_vacuum_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_census_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_disappearing_server_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_inflight_calls_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_tags_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_graceful_server_shutdown_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_invoke_large_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_max_concurrent_streams_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_no_op_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_ping_pong_streaming_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_binary_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_trailing_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_with_large_metadata_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_simple_delayed_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_thread_stress_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_writes_done_hangs_with_pending_read_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_no_op_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_thread_stress_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_writes_done_hangs_with_pending_read_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_accept_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_accept_and_writes_closed_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_before_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_in_a_vacuum_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_census_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_disappearing_server_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_inflight_calls_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_tags_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_graceful_server_shutdown_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_invoke_large_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_max_concurrent_streams_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_no_op_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_ping_pong_streaming_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_binary_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_trailing_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_with_large_metadata_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_simple_delayed_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_thread_stress_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_writes_done_hangs_with_pending_read_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_no_op_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_thread_stress_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_writes_done_hangs_with_pending_read_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_and_writes_closed_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_before_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_in_a_vacuum_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_census_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_disappearing_server_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_inflight_calls_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_tags_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_graceful_server_shutdown_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_max_concurrent_streams_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_no_op_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_ping_pong_streaming_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_binary_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_trailing_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_with_large_metadata_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_simple_delayed_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_thread_stress_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_writes_done_hangs_with_pending_read_legacy_test
buildtests_cxx: privatelibs_cxx $(BINDIR)/$(CONFIG)/async_end2end_test $(BINDIR)/$(CONFIG)/channel_arguments_test $(BINDIR)/$(CONFIG)/cli_call_test $(BINDIR)/$(CONFIG)/credentials_test $(BINDIR)/$(CONFIG)/cxx_time_test $(BINDIR)/$(CONFIG)/end2end_test $(BINDIR)/$(CONFIG)/generic_end2end_test $(BINDIR)/$(CONFIG)/grpc_cli $(BINDIR)/$(CONFIG)/interop_client $(BINDIR)/$(CONFIG)/interop_server $(BINDIR)/$(CONFIG)/interop_test $(BINDIR)/$(CONFIG)/qps_driver $(BINDIR)/$(CONFIG)/qps_smoke_test $(BINDIR)/$(CONFIG)/qps_worker $(BINDIR)/$(CONFIG)/status_test $(BINDIR)/$(CONFIG)/thread_pool_test
@@ -1220,6 +1230,8 @@ test_c: buildtests_c
$(Q) $(BINDIR)/$(CONFIG)/time_test || ( echo test time_test failed ; exit 1 )
$(E) "[RUN] Testing timeout_encoding_test"
$(Q) $(BINDIR)/$(CONFIG)/timeout_encoding_test || ( echo test timeout_encoding_test failed ; exit 1 )
+ $(E) "[RUN] Testing timers_test"
+ $(Q) $(BINDIR)/$(CONFIG)/timers_test || ( echo test timers_test failed ; exit 1 )
$(E) "[RUN] Testing transport_metadata_test"
$(Q) $(BINDIR)/$(CONFIG)/transport_metadata_test || ( echo test transport_metadata_test failed ; exit 1 )
$(E) "[RUN] Testing transport_security_test"
@@ -2597,6 +2609,7 @@ LIBGRPC_SRC = \
src/core/iomgr/alarm_heap.c \
src/core/iomgr/endpoint.c \
src/core/iomgr/endpoint_pair_posix.c \
+ src/core/iomgr/endpoint_pair_windows.c \
src/core/iomgr/fd_posix.c \
src/core/iomgr/iocp_windows.c \
src/core/iomgr/iomgr.c \
@@ -2629,6 +2642,7 @@ LIBGRPC_SRC = \
src/core/json/json_reader.c \
src/core/json/json_string.c \
src/core/json/json_writer.c \
+ src/core/profiling/timers.c \
src/core/statistics/census_init.c \
src/core/statistics/census_log.c \
src/core/statistics/census_rpc_stats.c \
@@ -2744,6 +2758,7 @@ src/core/iomgr/alarm.c: $(OPENSSL_DEP)
src/core/iomgr/alarm_heap.c: $(OPENSSL_DEP)
src/core/iomgr/endpoint.c: $(OPENSSL_DEP)
src/core/iomgr/endpoint_pair_posix.c: $(OPENSSL_DEP)
+src/core/iomgr/endpoint_pair_windows.c: $(OPENSSL_DEP)
src/core/iomgr/fd_posix.c: $(OPENSSL_DEP)
src/core/iomgr/iocp_windows.c: $(OPENSSL_DEP)
src/core/iomgr/iomgr.c: $(OPENSSL_DEP)
@@ -2776,6 +2791,7 @@ src/core/json/json.c: $(OPENSSL_DEP)
src/core/json/json_reader.c: $(OPENSSL_DEP)
src/core/json/json_string.c: $(OPENSSL_DEP)
src/core/json/json_writer.c: $(OPENSSL_DEP)
+src/core/profiling/timers.c: $(OPENSSL_DEP)
src/core/statistics/census_init.c: $(OPENSSL_DEP)
src/core/statistics/census_log.c: $(OPENSSL_DEP)
src/core/statistics/census_rpc_stats.c: $(OPENSSL_DEP)
@@ -2907,6 +2923,7 @@ $(OBJDIR)/$(CONFIG)/src/core/iomgr/alarm.o:
$(OBJDIR)/$(CONFIG)/src/core/iomgr/alarm_heap.o:
$(OBJDIR)/$(CONFIG)/src/core/iomgr/endpoint.o:
$(OBJDIR)/$(CONFIG)/src/core/iomgr/endpoint_pair_posix.o:
+$(OBJDIR)/$(CONFIG)/src/core/iomgr/endpoint_pair_windows.o:
$(OBJDIR)/$(CONFIG)/src/core/iomgr/fd_posix.o:
$(OBJDIR)/$(CONFIG)/src/core/iomgr/iocp_windows.o:
$(OBJDIR)/$(CONFIG)/src/core/iomgr/iomgr.o:
@@ -2939,6 +2956,7 @@ $(OBJDIR)/$(CONFIG)/src/core/json/json.o:
$(OBJDIR)/$(CONFIG)/src/core/json/json_reader.o:
$(OBJDIR)/$(CONFIG)/src/core/json/json_string.o:
$(OBJDIR)/$(CONFIG)/src/core/json/json_writer.o:
+$(OBJDIR)/$(CONFIG)/src/core/profiling/timers.o:
$(OBJDIR)/$(CONFIG)/src/core/statistics/census_init.o:
$(OBJDIR)/$(CONFIG)/src/core/statistics/census_log.o:
$(OBJDIR)/$(CONFIG)/src/core/statistics/census_rpc_stats.o:
@@ -2996,6 +3014,7 @@ LIBGRPC_TEST_UTIL_SRC = \
test/core/util/grpc_profiler.c \
test/core/util/parse_hexstring.c \
test/core/util/port_posix.c \
+ test/core/util/port_windows.c \
test/core/util/slice_splitter.c \
@@ -3025,6 +3044,7 @@ test/core/transport/transport_end2end_tests.c: $(OPENSSL_DEP)
test/core/util/grpc_profiler.c: $(OPENSSL_DEP)
test/core/util/parse_hexstring.c: $(OPENSSL_DEP)
test/core/util/port_posix.c: $(OPENSSL_DEP)
+test/core/util/port_windows.c: $(OPENSSL_DEP)
test/core/util/slice_splitter.c: $(OPENSSL_DEP)
endif
@@ -3058,6 +3078,7 @@ $(OBJDIR)/$(CONFIG)/test/core/transport/transport_end2end_tests.o:
$(OBJDIR)/$(CONFIG)/test/core/util/grpc_profiler.o:
$(OBJDIR)/$(CONFIG)/test/core/util/parse_hexstring.o:
$(OBJDIR)/$(CONFIG)/test/core/util/port_posix.o:
+$(OBJDIR)/$(CONFIG)/test/core/util/port_windows.o:
$(OBJDIR)/$(CONFIG)/test/core/util/slice_splitter.o:
@@ -3083,6 +3104,7 @@ LIBGRPC_UNSECURE_SRC = \
src/core/iomgr/alarm_heap.c \
src/core/iomgr/endpoint.c \
src/core/iomgr/endpoint_pair_posix.c \
+ src/core/iomgr/endpoint_pair_windows.c \
src/core/iomgr/fd_posix.c \
src/core/iomgr/iocp_windows.c \
src/core/iomgr/iomgr.c \
@@ -3115,6 +3137,7 @@ LIBGRPC_UNSECURE_SRC = \
src/core/json/json_reader.c \
src/core/json/json_string.c \
src/core/json/json_writer.c \
+ src/core/profiling/timers.c \
src/core/statistics/census_init.c \
src/core/statistics/census_log.c \
src/core/statistics/census_rpc_stats.c \
@@ -3223,6 +3246,7 @@ $(OBJDIR)/$(CONFIG)/src/core/iomgr/alarm.o:
$(OBJDIR)/$(CONFIG)/src/core/iomgr/alarm_heap.o:
$(OBJDIR)/$(CONFIG)/src/core/iomgr/endpoint.o:
$(OBJDIR)/$(CONFIG)/src/core/iomgr/endpoint_pair_posix.o:
+$(OBJDIR)/$(CONFIG)/src/core/iomgr/endpoint_pair_windows.o:
$(OBJDIR)/$(CONFIG)/src/core/iomgr/fd_posix.o:
$(OBJDIR)/$(CONFIG)/src/core/iomgr/iocp_windows.o:
$(OBJDIR)/$(CONFIG)/src/core/iomgr/iomgr.o:
@@ -3255,6 +3279,7 @@ $(OBJDIR)/$(CONFIG)/src/core/json/json.o:
$(OBJDIR)/$(CONFIG)/src/core/json/json_reader.o:
$(OBJDIR)/$(CONFIG)/src/core/json/json_string.o:
$(OBJDIR)/$(CONFIG)/src/core/json/json_writer.o:
+$(OBJDIR)/$(CONFIG)/src/core/profiling/timers.o:
$(OBJDIR)/$(CONFIG)/src/core/statistics/census_init.o:
$(OBJDIR)/$(CONFIG)/src/core/statistics/census_log.o:
$(OBJDIR)/$(CONFIG)/src/core/statistics/census_rpc_stats.o:
@@ -4054,8 +4079,13 @@ $(OBJDIR)/$(CONFIG)/examples/pubsub/subscriber.o: $(GENDIR)/examples/pubsub/
LIBQPS_SRC = \
$(GENDIR)/test/cpp/qps/qpstest.pb.cc $(GENDIR)/test/cpp/qps/qpstest.grpc.pb.cc \
+ test/cpp/qps/client_async.cc \
+ test/cpp/qps/client_sync.cc \
test/cpp/qps/driver.cc \
+ test/cpp/qps/qps_worker.cc \
test/cpp/qps/report.cc \
+ test/cpp/qps/server_async.cc \
+ test/cpp/qps/server_sync.cc \
test/cpp/qps/timer.cc \
@@ -4084,8 +4114,13 @@ ifneq ($(OPENSSL_DEP),)
# installing headers to their final destination on the drive. We need this
# otherwise parallel compilation will fail if a source is compiled first.
test/cpp/qps/qpstest.proto: $(OPENSSL_DEP)
+test/cpp/qps/client_async.cc: $(OPENSSL_DEP)
+test/cpp/qps/client_sync.cc: $(OPENSSL_DEP)
test/cpp/qps/driver.cc: $(OPENSSL_DEP)
+test/cpp/qps/qps_worker.cc: $(OPENSSL_DEP)
test/cpp/qps/report.cc: $(OPENSSL_DEP)
+test/cpp/qps/server_async.cc: $(OPENSSL_DEP)
+test/cpp/qps/server_sync.cc: $(OPENSSL_DEP)
test/cpp/qps/timer.cc: $(OPENSSL_DEP)
endif
@@ -4112,8 +4147,13 @@ endif
endif
+$(OBJDIR)/$(CONFIG)/test/cpp/qps/client_async.o: $(GENDIR)/test/cpp/qps/qpstest.pb.cc $(GENDIR)/test/cpp/qps/qpstest.grpc.pb.cc
+$(OBJDIR)/$(CONFIG)/test/cpp/qps/client_sync.o: $(GENDIR)/test/cpp/qps/qpstest.pb.cc $(GENDIR)/test/cpp/qps/qpstest.grpc.pb.cc
$(OBJDIR)/$(CONFIG)/test/cpp/qps/driver.o: $(GENDIR)/test/cpp/qps/qpstest.pb.cc $(GENDIR)/test/cpp/qps/qpstest.grpc.pb.cc
+$(OBJDIR)/$(CONFIG)/test/cpp/qps/qps_worker.o: $(GENDIR)/test/cpp/qps/qpstest.pb.cc $(GENDIR)/test/cpp/qps/qpstest.grpc.pb.cc
$(OBJDIR)/$(CONFIG)/test/cpp/qps/report.o: $(GENDIR)/test/cpp/qps/qpstest.pb.cc $(GENDIR)/test/cpp/qps/qpstest.grpc.pb.cc
+$(OBJDIR)/$(CONFIG)/test/cpp/qps/server_async.o: $(GENDIR)/test/cpp/qps/qpstest.pb.cc $(GENDIR)/test/cpp/qps/qpstest.grpc.pb.cc
+$(OBJDIR)/$(CONFIG)/test/cpp/qps/server_sync.o: $(GENDIR)/test/cpp/qps/qpstest.pb.cc $(GENDIR)/test/cpp/qps/qpstest.grpc.pb.cc
$(OBJDIR)/$(CONFIG)/test/cpp/qps/timer.o: $(GENDIR)/test/cpp/qps/qpstest.pb.cc $(GENDIR)/test/cpp/qps/qpstest.grpc.pb.cc
@@ -8268,6 +8308,37 @@ endif
endif
+TIMERS_TEST_SRC = \
+ test/core/profiling/timers_test.c \
+
+TIMERS_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(TIMERS_TEST_SRC))))
+
+ifeq ($(NO_SECURE),true)
+
+# You can't build secure targets if you don't have OpenSSL with ALPN.
+
+$(BINDIR)/$(CONFIG)/timers_test: openssl_dep_error
+
+else
+
+$(BINDIR)/$(CONFIG)/timers_test: $(TIMERS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+ $(E) "[LD] Linking $@"
+ $(Q) mkdir -p `dirname $@`
+ $(Q) $(LD) $(LDFLAGS) $(TIMERS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/timers_test
+
+endif
+
+$(OBJDIR)/$(CONFIG)/test/core/profiling/timers_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+
+deps_timers_test: $(TIMERS_TEST_OBJS:.o=.dep)
+
+ifneq ($(NO_SECURE),true)
+ifneq ($(NO_DEPS),true)
+-include $(TIMERS_TEST_OBJS:.o=.dep)
+endif
+endif
+
+
TRANSPORT_METADATA_TEST_SRC = \
test/core/transport/metadata_test.c \
@@ -9119,10 +9190,6 @@ endif
QPS_WORKER_SRC = \
- test/cpp/qps/client_async.cc \
- test/cpp/qps/client_sync.cc \
- test/cpp/qps/server_async.cc \
- test/cpp/qps/server_sync.cc \
test/cpp/qps/worker.cc \
QPS_WORKER_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(QPS_WORKER_SRC))))
@@ -9153,10 +9220,6 @@ endif
endif
-$(OBJDIR)/$(CONFIG)/test/cpp/qps/client_async.o: $(LIBDIR)/$(CONFIG)/libqps.a $(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
-$(OBJDIR)/$(CONFIG)/test/cpp/qps/client_sync.o: $(LIBDIR)/$(CONFIG)/libqps.a $(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
-$(OBJDIR)/$(CONFIG)/test/cpp/qps/server_async.o: $(LIBDIR)/$(CONFIG)/libqps.a $(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
-$(OBJDIR)/$(CONFIG)/test/cpp/qps/server_sync.o: $(LIBDIR)/$(CONFIG)/libqps.a $(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
$(OBJDIR)/$(CONFIG)/test/cpp/qps/worker.o: $(LIBDIR)/$(CONFIG)/libqps.a $(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_qps_worker: $(QPS_WORKER_OBJS:.o=.dep)
diff --git a/build.json b/build.json
index a17df3cb79..ce0726ba26 100644
--- a/build.json
+++ b/build.json
@@ -137,6 +137,8 @@
"src/core/json/json_common.h",
"src/core/json/json_reader.h",
"src/core/json/json_writer.h",
+ "src/core/profiling/timers.h",
+ "src/core/profiling/timers_preciseclock.h",
"src/core/statistics/census_interface.h",
"src/core/statistics/census_log.h",
"src/core/statistics/census_rpc_stats.h",
@@ -197,6 +199,7 @@
"src/core/iomgr/alarm_heap.c",
"src/core/iomgr/endpoint.c",
"src/core/iomgr/endpoint_pair_posix.c",
+ "src/core/iomgr/endpoint_pair_windows.c",
"src/core/iomgr/fd_posix.c",
"src/core/iomgr/iocp_windows.c",
"src/core/iomgr/iomgr.c",
@@ -229,6 +232,7 @@
"src/core/json/json_reader.c",
"src/core/json/json_string.c",
"src/core/json/json_writer.c",
+ "src/core/profiling/timers.c",
"src/core/statistics/census_init.c",
"src/core/statistics/census_log.c",
"src/core/statistics/census_rpc_stats.c",
@@ -444,6 +448,7 @@
"test/core/util/grpc_profiler.c",
"test/core/util/parse_hexstring.c",
"test/core/util/port_posix.c",
+ "test/core/util/port_windows.c",
"test/core/util/slice_splitter.c"
],
"deps": [
@@ -636,13 +641,19 @@
"language": "c++",
"headers": [
"test/cpp/qps/driver.h",
+ "test/cpp/qps/qps_worker.h",
"test/cpp/qps/report.h",
"test/cpp/qps/timer.h"
],
"src": [
"test/cpp/qps/qpstest.proto",
+ "test/cpp/qps/client_async.cc",
+ "test/cpp/qps/client_sync.cc",
"test/cpp/qps/driver.cc",
+ "test/cpp/qps/qps_worker.cc",
"test/cpp/qps/report.cc",
+ "test/cpp/qps/server_async.cc",
+ "test/cpp/qps/server_sync.cc",
"test/cpp/qps/timer.cc"
]
},
@@ -941,6 +952,9 @@
"grpc",
"gpr_test_util",
"gpr"
+ ],
+ "platforms": [
+ "posix"
]
},
{
@@ -1755,6 +1769,20 @@
]
},
{
+ "name": "timers_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/profiling/timers_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
"name": "transport_metadata_test",
"build": "test",
"language": "c",
@@ -2097,10 +2125,6 @@
"test/cpp/qps/server.h"
],
"src": [
- "test/cpp/qps/client_async.cc",
- "test/cpp/qps/client_sync.cc",
- "test/cpp/qps/server_async.cc",
- "test/cpp/qps/server_sync.cc",
"test/cpp/qps/worker.cc"
],
"deps": [
diff --git a/include/grpc/support/slice_buffer.h b/include/grpc/support/slice_buffer.h
index c7e5dbc647..1545dbfd76 100644
--- a/include/grpc/support/slice_buffer.h
+++ b/include/grpc/support/slice_buffer.h
@@ -40,6 +40,8 @@
extern "C" {
#endif
+#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 */
@@ -52,6 +54,8 @@ typedef struct {
size_t capacity;
/* the combined length of all slices in the array */
size_t length;
+ /* inlined elements to avoid allocations */
+ gpr_slice inlined[GRPC_SLICE_BUFFER_INLINE_ELEMENTS];
} gpr_slice_buffer;
/* initialize a slice buffer */
@@ -78,9 +82,11 @@ gpr_uint8 *gpr_slice_buffer_tiny_add(gpr_slice_buffer *sb, unsigned len);
void gpr_slice_buffer_pop(gpr_slice_buffer *sb);
/* clear a slice buffer, unref all elements */
void gpr_slice_buffer_reset_and_unref(gpr_slice_buffer *sb);
+/* swap the contents of two slice buffers */
+void gpr_slice_buffer_swap(gpr_slice_buffer *a, gpr_slice_buffer *b);
#ifdef __cplusplus
}
#endif
-#endif /* GRPC_SUPPORT_SLICE_BUFFER_H */
+#endif /* GRPC_SUPPORT_SLICE_BUFFER_H */
diff --git a/src/core/iomgr/endpoint_pair_windows.c b/src/core/iomgr/endpoint_pair_windows.c
new file mode 100644
index 0000000000..d78b6ea957
--- /dev/null
+++ b/src/core/iomgr/endpoint_pair_windows.c
@@ -0,0 +1,85 @@
+/*
+ *
+ * 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 <grpc/support/port_platform.h>
+
+#ifdef GPR_WINSOCK_SOCKET
+#include "src/core/iomgr/sockaddr_utils.h"
+#include "src/core/iomgr/endpoint_pair.h"
+
+#include <errno.h>
+#include <fcntl.h>
+#include <string.h>
+
+#include "src/core/iomgr/tcp_windows.h"
+#include "src/core/iomgr/socket_windows.h"
+#include <grpc/support/log.h>
+
+static void create_sockets(SOCKET sv[2]) {
+ SOCKET svr_sock = INVALID_SOCKET;
+ SOCKET lst_sock = INVALID_SOCKET;
+ SOCKET cli_sock = INVALID_SOCKET;
+ SOCKADDR_IN addr;
+ int addr_len;
+
+ lst_sock = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, WSA_FLAG_OVERLAPPED);
+ GPR_ASSERT(lst_sock != INVALID_SOCKET);
+
+ memset(&addr, 0, sizeof(addr));
+ GPR_ASSERT(bind(lst_sock, (struct sockaddr*)&addr, sizeof(addr)) != SOCKET_ERROR);
+ GPR_ASSERT(listen(lst_sock, SOMAXCONN) != SOCKET_ERROR);
+ GPR_ASSERT(getsockname(lst_sock, (struct sockaddr*)&addr, &addr_len) != SOCKET_ERROR);
+
+ cli_sock = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, WSA_FLAG_OVERLAPPED);
+ GPR_ASSERT(cli_sock != INVALID_SOCKET);
+
+ GPR_ASSERT(WSAConnect(cli_sock, (struct sockaddr*)&addr, addr_len, NULL, NULL, NULL, NULL) == 0);
+ svr_sock = accept(lst_sock, (struct sockaddr*)&addr, &addr_len);
+ GPR_ASSERT(svr_sock != INVALID_SOCKET);
+
+ closesocket(lst_sock);
+
+ sv[1] = cli_sock;
+ sv[0] = svr_sock;
+}
+
+grpc_endpoint_pair grpc_iomgr_create_endpoint_pair(size_t read_slice_size) {
+ SOCKET sv[2];
+ grpc_endpoint_pair p;
+ create_sockets(sv);
+ p.client = grpc_tcp_create(grpc_winsocket_create(sv[1]));
+ p.server = grpc_tcp_create(grpc_winsocket_create(sv[0]));
+ return p;
+}
+
+#endif
diff --git a/src/core/iomgr/tcp_server_posix.c b/src/core/iomgr/tcp_server_posix.c
index 895f85fc68..7e31f2d7a5 100644
--- a/src/core/iomgr/tcp_server_posix.c
+++ b/src/core/iomgr/tcp_server_posix.c
@@ -174,7 +174,6 @@ void grpc_tcp_server_destroy(
while (s->active_ports) {
gpr_cv_wait(&s->cv, &s->mu, gpr_inf_future);
}
- gpr_mu_unlock(&s->mu);
/* delete ALL the things */
if (s->nports) {
@@ -185,7 +184,9 @@ void grpc_tcp_server_destroy(
}
grpc_fd_orphan(sp->emfd, destroyed_port, s);
}
+ gpr_mu_unlock(&s->mu);
} else {
+ gpr_mu_unlock(&s->mu);
finish_shutdown(s);
}
}
diff --git a/src/core/profiling/timers.c b/src/core/profiling/timers.c
new file mode 100644
index 0000000000..478397d1bf
--- /dev/null
+++ b/src/core/profiling/timers.c
@@ -0,0 +1,138 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#ifdef GRPC_LATENCY_PROFILER
+
+#include "src/core/profiling/timers.h"
+#include "src/core/profiling/timers_preciseclock.h"
+
+#include <grpc/support/alloc.h>
+#include <grpc/support/log.h>
+#include <grpc/support/time.h>
+#include <grpc/support/sync.h>
+#include <stdio.h>
+
+typedef struct grpc_timer_entry {
+ grpc_precise_clock tm;
+ const char* tag;
+ int seq;
+ const char* file;
+ int line;
+} grpc_timer_entry;
+
+struct grpc_timers_log {
+ gpr_mu mu;
+ grpc_timer_entry* log;
+ int num_entries;
+ int capacity;
+ int capacity_limit;
+ FILE* fp;
+};
+
+grpc_timers_log* grpc_timers_log_global = NULL;
+
+grpc_timers_log* grpc_timers_log_create(int capacity_limit, FILE* dump) {
+ grpc_timers_log* log = gpr_malloc(sizeof(*log));
+
+ /* TODO (vpai): Allow allocation below limit */
+ log->log = gpr_malloc(capacity_limit * sizeof(*log->log));
+
+ /* TODO (vpai): Improve concurrency, do per-thread logging? */
+ gpr_mu_init(&log->mu);
+
+ log->num_entries = 0;
+ log->capacity = log->capacity_limit = capacity_limit;
+
+ log->fp = dump;
+
+ return log;
+}
+
+static void log_report_locked(grpc_timers_log* log) {
+ FILE* fp = log->fp;
+ int i;
+ for (i = 0; i < log->num_entries; i++) {
+ grpc_timer_entry* entry = &(log->log[i]);
+ fprintf(fp, "GRPC_LAT_PROF ");
+ grpc_precise_clock_print(&entry->tm, fp);
+ fprintf(fp, " %s#%d,%s:%d\n", entry->tag, entry->seq, entry->file,
+ entry->line);
+ }
+
+ /* Now clear out the log */
+ log->num_entries = 0;
+}
+
+void grpc_timers_log_destroy(grpc_timers_log* log) {
+ gpr_mu_lock(&log->mu);
+ log_report_locked(log);
+ gpr_mu_unlock(&log->mu);
+
+ gpr_free(log->log);
+ gpr_mu_destroy(&log->mu);
+
+ gpr_free(log);
+}
+
+void grpc_timers_log_add(grpc_timers_log* log, const char* tag, int seq,
+ const char* file, int line) {
+ grpc_timer_entry* entry;
+
+ /* TODO (vpai) : Improve concurrency */
+ gpr_mu_lock(&log->mu);
+ if (log->num_entries == log->capacity_limit) {
+ log_report_locked(log);
+ }
+
+ entry = &log->log[log->num_entries++];
+
+ grpc_precise_clock_now(&entry->tm);
+ entry->tag = tag;
+ entry->seq = seq;
+ entry->file = file;
+ entry->line = line;
+
+ gpr_mu_unlock(&log->mu);
+}
+
+void grpc_timers_log_global_init(void) {
+ grpc_timers_log_global = grpc_timers_log_create(100000, stdout);
+}
+
+void grpc_timers_log_global_destroy(void) {
+ grpc_timers_log_destroy(grpc_timers_log_global);
+}
+#else /* !GRPC_LATENCY_PROFILER */
+void grpc_timers_log_global_init(void) {}
+void grpc_timers_log_global_destroy(void) {}
+#endif /* GRPC_LATENCY_PROFILER */
diff --git a/src/core/profiling/timers.h b/src/core/profiling/timers.h
new file mode 100644
index 0000000000..ef4cad112a
--- /dev/null
+++ b/src/core/profiling/timers.h
@@ -0,0 +1,70 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#ifndef GRPC_CORE_PROFILING_TIMERS_H
+#define GRPC_CORE_PROFILING_TIMERS_H
+
+#include <stdio.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef GRPC_LATENCY_PROFILER
+
+typedef struct grpc_timers_log grpc_timers_log;
+
+grpc_timers_log *grpc_timers_log_create(int capacity_limit, FILE *dump);
+void grpc_timers_log_add(grpc_timers_log *, const char *tag, int seq,
+ const char *file, int line);
+void grpc_timers_log_destroy(grpc_timers_log *);
+
+extern grpc_timers_log *grpc_timers_log_global;
+
+#define GRPC_TIMER_MARK(x, s) \
+ grpc_timers_log_add(grpc_timers_log_global, #x, s, __FILE__, __LINE__)
+
+#else /* !GRPC_LATENCY_PROFILER */
+#define GRPC_TIMER_MARK(x, s) \
+ do { \
+ } while (0)
+#endif /* GRPC_LATENCY_PROFILER */
+
+void grpc_timers_log_global_init(void);
+void grpc_timers_log_global_destroy(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRPC_CORE_PROFILING_TIMERS_H */
diff --git a/src/core/profiling/timers_preciseclock.h b/src/core/profiling/timers_preciseclock.h
new file mode 100644
index 0000000000..bf4a0eab8a
--- /dev/null
+++ b/src/core/profiling/timers_preciseclock.h
@@ -0,0 +1,56 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#ifndef GRPC_CORE_PROFILING_TIMERS_PRECISECLOCK_H
+#define GRPC_CORE_PROFILING_TIMERS_PRECISECLOCK_H
+
+#include <grpc/support/time.h>
+#include <stdio.h>
+
+typedef struct grpc_precise_clock grpc_precise_clock;
+
+#ifdef GRPC_TIMERS_RDTSC
+#error RDTSC timers not currently supported
+#else
+struct grpc_precise_clock {
+ gpr_timespec clock;
+};
+static void grpc_precise_clock_now(grpc_precise_clock* clk) {
+ clk->clock = gpr_now();
+}
+static void grpc_precise_clock_print(const grpc_precise_clock* clk, FILE* fp) {
+ fprintf(fp, "%ld.%09d", clk->clock.tv_sec, clk->clock.tv_nsec);
+}
+#endif /* GRPC_TIMERS_RDTSC */
+
+#endif /* GRPC_CORE_PROFILING_TIMERS_PRECISECLOCK_H */
diff --git a/src/core/security/credentials.c b/src/core/security/credentials.c
index 698e099134..e6d2e9e332 100644
--- a/src/core/security/credentials.c
+++ b/src/core/security/credentials.c
@@ -111,6 +111,11 @@ void grpc_credentials_get_request_metadata(grpc_credentials *creds,
creds->vtable->get_request_metadata(creds, service_url, cb, user_data);
}
+grpc_mdctx *grpc_credentials_get_metadata_context(grpc_credentials *creds) {
+ if (creds == NULL) return NULL;
+ return creds->vtable->get_metadata_context(creds);
+}
+
void grpc_server_credentials_release(grpc_server_credentials *creds) {
if (creds == NULL) return;
creds->vtable->destroy(creds);
@@ -167,8 +172,13 @@ static int ssl_has_request_metadata_only(const grpc_credentials *creds) {
return 0;
}
+static grpc_mdctx *ssl_get_metadata_context(grpc_credentials *creds) {
+ return NULL;
+}
+
static grpc_credentials_vtable ssl_vtable = {
- ssl_destroy, ssl_has_request_metadata, ssl_has_request_metadata_only, NULL};
+ ssl_destroy, ssl_has_request_metadata, ssl_has_request_metadata_only,
+ ssl_get_metadata_context, NULL};
static grpc_server_credentials_vtable ssl_server_vtable = {ssl_server_destroy};
@@ -371,9 +381,14 @@ static void jwt_get_request_metadata(grpc_credentials *creds,
}
}
+static grpc_mdctx *jwt_get_metadata_context(grpc_credentials *creds) {
+ grpc_jwt_credentials *c = (grpc_jwt_credentials *)creds;
+ return c->md_ctx;
+}
+
static grpc_credentials_vtable jwt_vtable = {
jwt_destroy, jwt_has_request_metadata, jwt_has_request_metadata_only,
- jwt_get_request_metadata};
+ jwt_get_metadata_context, jwt_get_request_metadata};
grpc_credentials *grpc_jwt_credentials_create(const char *json_key,
gpr_timespec token_lifetime) {
@@ -585,11 +600,19 @@ static void init_oauth2_token_fetcher(grpc_oauth2_token_fetcher_credentials *c,
c->fetch_func = fetch_func;
}
+static grpc_mdctx *oauth2_token_fetcher_get_metadata_context(
+ grpc_credentials *creds) {
+ grpc_oauth2_token_fetcher_credentials *c =
+ (grpc_oauth2_token_fetcher_credentials *)creds;
+ return c->md_ctx;
+}
+
/* -- ComputeEngine credentials. -- */
static grpc_credentials_vtable compute_engine_vtable = {
oauth2_token_fetcher_destroy, oauth2_token_fetcher_has_request_metadata,
oauth2_token_fetcher_has_request_metadata_only,
+ oauth2_token_fetcher_get_metadata_context,
oauth2_token_fetcher_get_request_metadata};
static void compute_engine_fetch_oauth2(
@@ -633,6 +656,7 @@ static void service_account_destroy(grpc_credentials *creds) {
static grpc_credentials_vtable service_account_vtable = {
service_account_destroy, oauth2_token_fetcher_has_request_metadata,
oauth2_token_fetcher_has_request_metadata_only,
+ oauth2_token_fetcher_get_metadata_context,
oauth2_token_fetcher_get_request_metadata};
static void service_account_fetch_oauth2(
@@ -706,6 +730,7 @@ static void refresh_token_destroy(grpc_credentials *creds) {
static grpc_credentials_vtable refresh_token_vtable = {
refresh_token_destroy, oauth2_token_fetcher_has_request_metadata,
oauth2_token_fetcher_has_request_metadata_only,
+ oauth2_token_fetcher_get_metadata_context,
oauth2_token_fetcher_get_request_metadata};
static void refresh_token_fetch_oauth2(
@@ -801,9 +826,15 @@ static void fake_oauth2_get_request_metadata(grpc_credentials *creds,
}
}
+static grpc_mdctx *fake_oauth2_get_metadata_context(grpc_credentials *creds) {
+ grpc_fake_oauth2_credentials *c = (grpc_fake_oauth2_credentials *)creds;
+ return c->md_ctx;
+}
+
static grpc_credentials_vtable fake_oauth2_vtable = {
fake_oauth2_destroy, fake_oauth2_has_request_metadata,
- fake_oauth2_has_request_metadata_only, fake_oauth2_get_request_metadata};
+ fake_oauth2_has_request_metadata_only, fake_oauth2_get_metadata_context,
+ fake_oauth2_get_request_metadata};
grpc_credentials *grpc_fake_oauth2_credentials_create(
const char *token_md_value, int is_async) {
@@ -842,10 +873,16 @@ static int fake_transport_security_has_request_metadata_only(
return 0;
}
+static grpc_mdctx *fake_transport_security_get_metadata_context(
+ grpc_credentials *c) {
+ return NULL;
+}
+
static grpc_credentials_vtable fake_transport_security_credentials_vtable = {
fake_transport_security_credentials_destroy,
fake_transport_security_has_request_metadata,
- fake_transport_security_has_request_metadata_only, NULL};
+ fake_transport_security_has_request_metadata_only,
+ fake_transport_security_get_metadata_context, NULL};
static grpc_server_credentials_vtable
fake_transport_security_server_credentials_vtable = {
@@ -995,9 +1032,26 @@ static void composite_get_request_metadata(grpc_credentials *creds,
GPR_ASSERT(0); /* Should have exited before. */
}
+static grpc_mdctx *composite_get_metadata_context(grpc_credentials *creds) {
+ grpc_composite_credentials *c = (grpc_composite_credentials *)creds;
+ grpc_mdctx *ctx = NULL;
+ size_t i;
+ for (i = 0; i < c->inner.num_creds; i++) {
+ grpc_credentials *inner_creds = c->inner.creds_array[i];
+ grpc_mdctx *inner_ctx = grpc_credentials_get_metadata_context(inner_creds);
+ if (inner_ctx) {
+ GPR_ASSERT(ctx == NULL &&
+ "can only have one metadata context per composite credential");
+ ctx = inner_ctx;
+ }
+ }
+ return ctx;
+}
+
static grpc_credentials_vtable composite_credentials_vtable = {
composite_destroy, composite_has_request_metadata,
- composite_has_request_metadata_only, composite_get_request_metadata};
+ composite_has_request_metadata_only, composite_get_metadata_context,
+ composite_get_request_metadata};
static grpc_credentials_array get_creds_array(grpc_credentials **creds_addr) {
grpc_credentials_array result;
@@ -1102,9 +1156,14 @@ static void iam_get_request_metadata(grpc_credentials *creds,
cb(user_data, md_array, 2, GRPC_CREDENTIALS_OK);
}
+static grpc_mdctx *iam_get_metadata_context(grpc_credentials *creds) {
+ grpc_iam_credentials *c = (grpc_iam_credentials *)creds;
+ return c->md_ctx;
+}
+
static grpc_credentials_vtable iam_vtable = {
iam_destroy, iam_has_request_metadata, iam_has_request_metadata_only,
- iam_get_request_metadata};
+ iam_get_metadata_context, iam_get_request_metadata};
grpc_credentials *grpc_iam_credentials_create(const char *token,
const char *authority_selector) {
diff --git a/src/core/security/credentials.h b/src/core/security/credentials.h
index 0f70670ced..562b3faa33 100644
--- a/src/core/security/credentials.h
+++ b/src/core/security/credentials.h
@@ -94,6 +94,7 @@ typedef struct {
void (*destroy)(grpc_credentials *c);
int (*has_request_metadata)(const grpc_credentials *c);
int (*has_request_metadata_only)(const grpc_credentials *c);
+ grpc_mdctx *(*get_metadata_context)(grpc_credentials *c);
void (*get_request_metadata)(grpc_credentials *c,
const char *service_url,
grpc_credentials_metadata_cb cb,
@@ -114,6 +115,8 @@ void grpc_credentials_get_request_metadata(grpc_credentials *creds,
const char *service_url,
grpc_credentials_metadata_cb cb,
void *user_data);
+grpc_mdctx *grpc_credentials_get_metadata_context(grpc_credentials *creds);
+
typedef struct {
unsigned char *pem_private_key;
size_t pem_private_key_size;
diff --git a/src/core/security/factories.c b/src/core/security/factories.c
index 02267d5545..3d9216aac4 100644
--- a/src/core/security/factories.c
+++ b/src/core/security/factories.c
@@ -50,3 +50,19 @@ grpc_channel *grpc_secure_channel_create(grpc_credentials *creds,
return grpc_secure_channel_create_with_factories(
factories, GPR_ARRAY_SIZE(factories), creds, target, args);
}
+
+grpc_security_status grpc_server_security_context_create(
+ grpc_server_credentials *creds, grpc_security_context **ctx) {
+ grpc_security_status status = GRPC_SECURITY_ERROR;
+
+ *ctx = NULL;
+ if (strcmp(creds->type, GRPC_CREDENTIALS_TYPE_SSL) == 0) {
+ status = grpc_ssl_server_security_context_create(
+ grpc_ssl_server_credentials_get_config(creds), ctx);
+ } else if (strcmp(creds->type,
+ GRPC_CREDENTIALS_TYPE_FAKE_TRANSPORT_SECURITY) == 0) {
+ *ctx = grpc_fake_server_security_context_create();
+ status = GRPC_SECURITY_OK;
+ }
+ return status;
+}
diff --git a/src/core/security/security_context.c b/src/core/security/security_context.c
index e180cad52b..08137803a3 100644
--- a/src/core/security/security_context.c
+++ b/src/core/security/security_context.c
@@ -165,6 +165,16 @@ static int check_request_metadata_creds(grpc_credentials *creds) {
return 1;
}
+static grpc_mdctx *get_or_create_mdctx(grpc_credentials *creds) {
+ grpc_mdctx *mdctx = grpc_credentials_get_metadata_context(creds);
+ if (mdctx == NULL) {
+ mdctx = grpc_mdctx_create();
+ } else {
+ grpc_mdctx_ref(mdctx);
+ }
+ return mdctx;
+}
+
/* -- Fake implementation. -- */
typedef struct {
@@ -626,7 +636,8 @@ grpc_channel *grpc_ssl_channel_create(grpc_credentials *ssl_creds,
arg.key = GRPC_ARG_HTTP2_SCHEME;
arg.value.string = "https";
new_args = grpc_channel_args_copy_and_add(args, &arg);
- channel = grpc_secure_channel_create_internal(target, new_args, ctx);
+ channel = grpc_secure_channel_create_internal(
+ target, new_args, ctx, get_or_create_mdctx(request_metadata_creds));
grpc_security_context_unref(&ctx->base);
grpc_channel_args_destroy(new_args);
return channel;
@@ -637,8 +648,8 @@ grpc_channel *grpc_fake_transport_security_channel_create(
const char *target, const grpc_channel_args *args) {
grpc_channel_security_context *ctx =
grpc_fake_channel_security_context_create(request_metadata_creds, 1);
- grpc_channel *channel =
- grpc_secure_channel_create_internal(target, args, ctx);
+ grpc_channel *channel = grpc_secure_channel_create_internal(
+ target, args, ctx, get_or_create_mdctx(request_metadata_creds));
grpc_security_context_unref(&ctx->base);
return channel;
}
diff --git a/src/core/security/security_context.h b/src/core/security/security_context.h
index 0b5821c3c0..8e7ba34cac 100644
--- a/src/core/security/security_context.h
+++ b/src/core/security/security_context.h
@@ -190,7 +190,7 @@ grpc_channel *grpc_fake_transport_security_channel_create(
grpc_channel *grpc_secure_channel_create_internal(
const char *target, const grpc_channel_args *args,
- grpc_channel_security_context *ctx);
+ grpc_channel_security_context *ctx, grpc_mdctx *mdctx);
typedef grpc_channel *(*grpc_secure_channel_factory_func)(
grpc_credentials *transport_security_creds,
@@ -206,10 +206,9 @@ grpc_channel *grpc_secure_channel_create_with_factories(
const grpc_secure_channel_factory *factories, size_t num_factories,
grpc_credentials *creds, const char *target, const grpc_channel_args *args);
-/* Secure server creation. */
+/* Secure server context creation. */
-grpc_server *grpc_secure_server_create_internal(grpc_completion_queue *cq,
- const grpc_channel_args *args,
- grpc_security_context *ctx);
+grpc_security_status grpc_server_security_context_create(
+ grpc_server_credentials *creds, grpc_security_context **ctx);
#endif /* GRPC_INTERNAL_CORE_SECURITY_SECURITY_CONTEXT_H */
diff --git a/src/core/security/server_secure_chttp2.c b/src/core/security/server_secure_chttp2.c
index 081272724c..165ed5474f 100644
--- a/src/core/security/server_secure_chttp2.c
+++ b/src/core/security/server_secure_chttp2.c
@@ -141,16 +141,7 @@ int grpc_server_add_secure_http2_port(grpc_server *server, const char *addr,
/* create security context */
if (creds == NULL) goto error;
-
- if (strcmp(creds->type, GRPC_CREDENTIALS_TYPE_SSL) == 0) {
- status = grpc_ssl_server_security_context_create(
- grpc_ssl_server_credentials_get_config(creds), &ctx);
- } else if (strcmp(creds->type,
- GRPC_CREDENTIALS_TYPE_FAKE_TRANSPORT_SECURITY) == 0) {
- ctx = grpc_fake_server_security_context_create();
- status = GRPC_SECURITY_OK;
- }
-
+ status = grpc_server_security_context_create(creds, &ctx);
if (status != GRPC_SECURITY_OK) {
gpr_log(GPR_ERROR,
"Unable to create secure server with credentials of type %s.",
diff --git a/src/core/support/slice_buffer.c b/src/core/support/slice_buffer.c
index b280e4bd02..3b1daa07c5 100644
--- a/src/core/support/slice_buffer.c
+++ b/src/core/support/slice_buffer.c
@@ -38,21 +38,34 @@
#include <grpc/support/alloc.h>
#include <grpc/support/log.h>
-/* initial allocation size (# of slices) */
-#define INITIAL_CAPACITY 4
-/* grow a buffer; requires INITIAL_CAPACITY > 1 */
+/* grow a buffer; requires GRPC_SLICE_BUFFER_INLINE_ELEMENTS > 1 */
#define GROW(x) (3 * (x) / 2)
+static void maybe_embiggen(gpr_slice_buffer *sb) {
+ if (sb->count == sb->capacity) {
+ sb->capacity = GROW(sb->capacity);
+ GPR_ASSERT(sb->capacity > sb->count);
+ if (sb->slices == sb->inlined) {
+ sb->slices = gpr_malloc(sb->capacity * sizeof(gpr_slice));
+ memcpy(sb->slices, sb->inlined, sb->count * sizeof(gpr_slice));
+ } else {
+ sb->slices = gpr_realloc(sb->slices, sb->capacity * sizeof(gpr_slice));
+ }
+ }
+}
+
void gpr_slice_buffer_init(gpr_slice_buffer *sb) {
sb->count = 0;
sb->length = 0;
- sb->capacity = INITIAL_CAPACITY;
- sb->slices = gpr_malloc(sizeof(gpr_slice) * INITIAL_CAPACITY);
+ sb->capacity = GRPC_SLICE_BUFFER_INLINE_ELEMENTS;
+ sb->slices = sb->inlined;
}
void gpr_slice_buffer_destroy(gpr_slice_buffer *sb) {
gpr_slice_buffer_reset_and_unref(sb);
- gpr_free(sb->slices);
+ if (sb->slices != sb->inlined) {
+ gpr_free(sb->slices);
+ }
}
gpr_uint8 *gpr_slice_buffer_tiny_add(gpr_slice_buffer *sb, unsigned n) {
@@ -71,11 +84,7 @@ gpr_uint8 *gpr_slice_buffer_tiny_add(gpr_slice_buffer *sb, unsigned n) {
return out;
add_new:
- if (sb->count == sb->capacity) {
- sb->capacity = GROW(sb->capacity);
- GPR_ASSERT(sb->capacity > sb->count);
- sb->slices = gpr_realloc(sb->slices, sb->capacity * sizeof(gpr_slice));
- }
+ maybe_embiggen(sb);
back = &sb->slices[sb->count];
sb->count++;
back->refcount = NULL;
@@ -85,11 +94,7 @@ add_new:
size_t gpr_slice_buffer_add_indexed(gpr_slice_buffer *sb, gpr_slice s) {
size_t out = sb->count;
- if (out == sb->capacity) {
- sb->capacity = GROW(sb->capacity);
- GPR_ASSERT(sb->capacity > sb->count);
- sb->slices = gpr_realloc(sb->slices, sb->capacity * sizeof(gpr_slice));
- }
+ maybe_embiggen(sb);
sb->slices[out] = s;
sb->length += GPR_SLICE_LENGTH(s);
sb->count = out + 1;
@@ -116,12 +121,7 @@ void gpr_slice_buffer_add(gpr_slice_buffer *sb, gpr_slice s) {
memcpy(back->data.inlined.bytes + back->data.inlined.length,
s.data.inlined.bytes, cp1);
back->data.inlined.length = GPR_SLICE_INLINED_SIZE;
- if (n == sb->capacity) {
- sb->capacity = GROW(sb->capacity);
- GPR_ASSERT(sb->capacity > sb->count);
- sb->slices =
- gpr_realloc(sb->slices, sb->capacity * sizeof(gpr_slice));
- }
+ maybe_embiggen(sb);
back = &sb->slices[n];
sb->count = n + 1;
back->refcount = NULL;
@@ -160,3 +160,16 @@ void gpr_slice_buffer_reset_and_unref(gpr_slice_buffer *sb) {
sb->count = 0;
sb->length = 0;
}
+
+void gpr_slice_buffer_swap(gpr_slice_buffer *a, gpr_slice_buffer *b) {
+ gpr_slice_buffer temp = *a;
+ *a = *b;
+ *b = temp;
+
+ if (a->slices == b->inlined) {
+ a->slices = a->inlined;
+ }
+ if (b->slices == a->inlined) {
+ b->slices = b->inlined;
+ }
+}
diff --git a/src/core/support/time_win32.c b/src/core/support/time_win32.c
index f221cb5790..539470bccf 100644
--- a/src/core/support/time_win32.c
+++ b/src/core/support/time_win32.c
@@ -39,6 +39,7 @@
#include <grpc/support/time.h>
#include <sys/timeb.h>
+#include <windows.h>
gpr_timespec gpr_now(void) {
gpr_timespec now_tv;
@@ -49,4 +50,23 @@ gpr_timespec gpr_now(void) {
return now_tv;
}
+void gpr_sleep_until(gpr_timespec until) {
+ gpr_timespec now;
+ gpr_timespec delta;
+ DWORD sleep_millis;
+
+ for (;;) {
+ /* We could simplify by using clock_nanosleep instead, but it might be
+ * slightly less portable. */
+ now = gpr_now();
+ if (gpr_time_cmp(until, now) <= 0) {
+ return;
+ }
+
+ delta = gpr_time_sub(until, now);
+ sleep_millis = delta.tv_sec * GPR_MS_PER_SEC + delta.tv_nsec / GPR_NS_PER_MS;
+ Sleep(sleep_millis);
+ }
+}
+
#endif /* GPR_WIN32 */
diff --git a/src/core/surface/init.c b/src/core/surface/init.c
index d4f0eb40e8..4de51a666f 100644
--- a/src/core/surface/init.c
+++ b/src/core/surface/init.c
@@ -32,10 +32,11 @@
*/
#include <grpc/grpc.h>
-#include "src/core/iomgr/iomgr.h"
+#include "src/core/channel/channel_stack.h"
#include "src/core/debug/trace.h"
+#include "src/core/iomgr/iomgr.h"
#include "src/core/statistics/census_interface.h"
-#include "src/core/channel/channel_stack.h"
+#include "src/core/profiling/timers.h"
#include "src/core/surface/call.h"
#include "src/core/surface/init.h"
#include "src/core/surface/surface_trace.h"
@@ -63,6 +64,7 @@ void grpc_init(void) {
grpc_tracer_init("GRPC_TRACE");
grpc_iomgr_init();
census_init();
+ grpc_timers_log_global_init();
}
gpr_mu_unlock(&g_init_mu);
}
@@ -72,6 +74,7 @@ void grpc_shutdown(void) {
if (--g_initializations == 0) {
grpc_iomgr_shutdown();
census_shutdown();
+ grpc_timers_log_global_destroy();
}
gpr_mu_unlock(&g_init_mu);
}
diff --git a/src/core/surface/secure_channel_create.c b/src/core/surface/secure_channel_create.c
index 8e56868d42..96b2fe04fa 100644
--- a/src/core/surface/secure_channel_create.c
+++ b/src/core/surface/secure_channel_create.c
@@ -205,12 +205,11 @@ static grpc_transport_setup_result complete_setup(void *channel_stack,
- perform handshakes */
grpc_channel *grpc_secure_channel_create_internal(
const char *target, const grpc_channel_args *args,
- grpc_channel_security_context *context) {
+ grpc_channel_security_context *context, grpc_mdctx *mdctx) {
setup *s;
grpc_channel *channel;
grpc_arg context_arg;
grpc_channel_args *args_copy;
- grpc_mdctx *mdctx = grpc_mdctx_create();
#define MAX_FILTERS 3
const grpc_channel_filter *filters[MAX_FILTERS];
int n = 0;
diff --git a/src/core/transport/chttp2/stream_encoder.c b/src/core/transport/chttp2/stream_encoder.c
index 79cce553fa..708bb06c7f 100644
--- a/src/core/transport/chttp2/stream_encoder.c
+++ b/src/core/transport/chttp2/stream_encoder.c
@@ -171,13 +171,15 @@ static gpr_uint8 *add_tiny_header_data(framer_state *st, int len) {
return gpr_slice_buffer_tiny_add(st->output, len);
}
-static void add_elem(grpc_chttp2_hpack_compressor *c, grpc_mdelem *elem) {
+/* add an element to the decoder table: returns metadata element to unref */
+static grpc_mdelem *add_elem(grpc_chttp2_hpack_compressor *c,
+ grpc_mdelem *elem) {
gpr_uint32 key_hash = elem->key->hash;
gpr_uint32 elem_hash = GRPC_MDSTR_KV_HASH(key_hash, elem->value->hash);
gpr_uint32 new_index = c->tail_remote_index + c->table_elems + 1;
gpr_uint32 elem_size = 32 + GPR_SLICE_LENGTH(elem->key->slice) +
GPR_SLICE_LENGTH(elem->value->slice);
- int drop_ref;
+ grpc_mdelem *elem_to_unref;
/* Reserve space for this element in the remote table: if this overflows
the current table, drop elements until it fits, matching the decompressor
@@ -204,34 +206,32 @@ static void add_elem(grpc_chttp2_hpack_compressor *c, grpc_mdelem *elem) {
if (c->entries_elems[HASH_FRAGMENT_2(elem_hash)] == elem) {
/* already there: update with new index */
c->indices_elems[HASH_FRAGMENT_2(elem_hash)] = new_index;
- drop_ref = 1;
+ elem_to_unref = elem;
} else if (c->entries_elems[HASH_FRAGMENT_3(elem_hash)] == elem) {
/* already there (cuckoo): update with new index */
c->indices_elems[HASH_FRAGMENT_3(elem_hash)] = new_index;
- drop_ref = 1;
+ elem_to_unref = elem;
} else if (c->entries_elems[HASH_FRAGMENT_2(elem_hash)] == NULL) {
/* not there, but a free element: add */
c->entries_elems[HASH_FRAGMENT_2(elem_hash)] = elem;
c->indices_elems[HASH_FRAGMENT_2(elem_hash)] = new_index;
- drop_ref = 0;
+ elem_to_unref = NULL;
} else if (c->entries_elems[HASH_FRAGMENT_3(elem_hash)] == NULL) {
/* not there (cuckoo), but a free element: add */
c->entries_elems[HASH_FRAGMENT_3(elem_hash)] = elem;
c->indices_elems[HASH_FRAGMENT_3(elem_hash)] = new_index;
- drop_ref = 0;
+ elem_to_unref = NULL;
} else if (c->indices_elems[HASH_FRAGMENT_2(elem_hash)] <
c->indices_elems[HASH_FRAGMENT_3(elem_hash)]) {
/* not there: replace oldest */
- grpc_mdelem_unref(c->entries_elems[HASH_FRAGMENT_2(elem_hash)]);
+ elem_to_unref = c->entries_elems[HASH_FRAGMENT_2(elem_hash)];
c->entries_elems[HASH_FRAGMENT_2(elem_hash)] = elem;
c->indices_elems[HASH_FRAGMENT_2(elem_hash)] = new_index;
- drop_ref = 0;
} else {
/* not there: replace oldest */
- grpc_mdelem_unref(c->entries_elems[HASH_FRAGMENT_3(elem_hash)]);
+ elem_to_unref = c->entries_elems[HASH_FRAGMENT_3(elem_hash)];
c->entries_elems[HASH_FRAGMENT_3(elem_hash)] = elem;
c->indices_elems[HASH_FRAGMENT_3(elem_hash)] = new_index;
- drop_ref = 0;
}
/* do exactly the same for the key (so we can find by that again too) */
@@ -257,9 +257,7 @@ static void add_elem(grpc_chttp2_hpack_compressor *c, grpc_mdelem *elem) {
c->indices_keys[HASH_FRAGMENT_3(key_hash)] = new_index;
}
- if (drop_ref) {
- grpc_mdelem_unref(elem);
- }
+ return elem_to_unref;
}
static void emit_indexed(grpc_chttp2_hpack_compressor *c, gpr_uint32 index,
@@ -348,9 +346,9 @@ static gpr_uint32 dynidx(grpc_chttp2_hpack_compressor *c, gpr_uint32 index) {
c->table_elems - index;
}
-/* encode an mdelem, taking ownership of it */
-static void hpack_enc(grpc_chttp2_hpack_compressor *c, grpc_mdelem *elem,
- framer_state *st) {
+/* encode an mdelem; returns metadata element to unref */
+static grpc_mdelem *hpack_enc(grpc_chttp2_hpack_compressor *c,
+ grpc_mdelem *elem, framer_state *st) {
gpr_uint32 key_hash = elem->key->hash;
gpr_uint32 elem_hash = GRPC_MDSTR_KV_HASH(key_hash, elem->value->hash);
size_t decoder_space_usage;
@@ -366,8 +364,7 @@ static void hpack_enc(grpc_chttp2_hpack_compressor *c, grpc_mdelem *elem,
/* HIT: complete element (first cuckoo hash) */
emit_indexed(c, dynidx(c, c->indices_elems[HASH_FRAGMENT_2(elem_hash)]),
st);
- grpc_mdelem_unref(elem);
- return;
+ return elem;
}
if (c->entries_elems[HASH_FRAGMENT_3(elem_hash)] == elem &&
@@ -375,8 +372,7 @@ static void hpack_enc(grpc_chttp2_hpack_compressor *c, grpc_mdelem *elem,
/* HIT: complete element (second cuckoo hash) */
emit_indexed(c, dynidx(c, c->indices_elems[HASH_FRAGMENT_3(elem_hash)]),
st);
- grpc_mdelem_unref(elem);
- return;
+ return elem;
}
/* should this elem be in the table? */
@@ -394,12 +390,12 @@ static void hpack_enc(grpc_chttp2_hpack_compressor *c, grpc_mdelem *elem,
/* HIT: key (first cuckoo hash) */
if (should_add_elem) {
emit_lithdr_incidx(c, dynidx(c, indices_key), elem, st);
- add_elem(c, elem);
+ return add_elem(c, elem);
} else {
emit_lithdr_noidx(c, dynidx(c, indices_key), elem, st);
- grpc_mdelem_unref(elem);
+ return elem;
}
- return;
+ abort();
}
indices_key = c->indices_keys[HASH_FRAGMENT_3(key_hash)];
@@ -408,23 +404,24 @@ static void hpack_enc(grpc_chttp2_hpack_compressor *c, grpc_mdelem *elem,
/* HIT: key (first cuckoo hash) */
if (should_add_elem) {
emit_lithdr_incidx(c, dynidx(c, indices_key), elem, st);
- add_elem(c, elem);
+ return add_elem(c, elem);
} else {
emit_lithdr_noidx(c, dynidx(c, indices_key), elem, st);
- grpc_mdelem_unref(elem);
+ return elem;
}
- return;
+ abort();
}
/* no elem, key in the table... fall back to literal emission */
if (should_add_elem) {
emit_lithdr_incidx_v(c, elem, st);
- add_elem(c, elem);
+ return add_elem(c, elem);
} else {
emit_lithdr_noidx_v(c, elem, st);
- grpc_mdelem_unref(elem);
+ return elem;
}
+ abort();
}
#define STRLEN_LIT(x) (sizeof(x) - 1)
@@ -433,11 +430,13 @@ static void hpack_enc(grpc_chttp2_hpack_compressor *c, grpc_mdelem *elem,
static void deadline_enc(grpc_chttp2_hpack_compressor *c, gpr_timespec deadline,
framer_state *st) {
char timeout_str[GRPC_CHTTP2_TIMEOUT_ENCODE_MIN_BUFSIZE];
+ grpc_mdelem *mdelem;
grpc_chttp2_encode_timeout(gpr_time_sub(deadline, gpr_now()), timeout_str);
- hpack_enc(c, grpc_mdelem_from_metadata_strings(
- c->mdctx, grpc_mdstr_ref(c->timeout_key_str),
- grpc_mdstr_from_string(c->mdctx, timeout_str)),
- st);
+ mdelem = grpc_mdelem_from_metadata_strings(
+ c->mdctx, grpc_mdstr_ref(c->timeout_key_str),
+ grpc_mdstr_from_string(c->mdctx, timeout_str));
+ mdelem = hpack_enc(c, mdelem, st);
+ if (mdelem) grpc_mdelem_unref(mdelem);
}
gpr_slice grpc_chttp2_data_frame_create_empty_close(gpr_uint32 id) {
@@ -542,6 +541,9 @@ void grpc_chttp2_encode(grpc_stream_op *ops, size_t ops_count, int eof,
grpc_stream_op *op;
gpr_uint32 max_take_size;
gpr_uint32 curop = 0;
+ gpr_uint32 unref_op;
+ grpc_mdctx *mdctx = compressor->mdctx;
+ int need_unref = 0;
GPR_ASSERT(stream_id != 0);
@@ -564,7 +566,12 @@ void grpc_chttp2_encode(grpc_stream_op *ops, size_t ops_count, int eof,
curop++;
break;
case GRPC_OP_METADATA:
- hpack_enc(compressor, op->data.metadata, &st);
+ /* Encode a metadata element; store the returned value, representing
+ a metadata element that needs to be unreffed back into the metadata
+ slot. THIS MAY NOT BE THE SAME ELEMENT (if a decoder table slot got
+ updated). After this loop, we'll do a batch unref of elements. */
+ op->data.metadata = hpack_enc(compressor, op->data.metadata, &st);
+ need_unref |= op->data.metadata != NULL;
curop++;
break;
case GRPC_OP_DEADLINE:
@@ -601,4 +608,15 @@ void grpc_chttp2_encode(grpc_stream_op *ops, size_t ops_count, int eof,
begin_frame(&st, DATA);
}
finish_frame(&st, 1, eof);
+
+ if (need_unref) {
+ grpc_mdctx_lock(mdctx);
+ for (unref_op = 0; unref_op < curop; unref_op++) {
+ op = &ops[unref_op];
+ if (op->type != GRPC_OP_METADATA) continue;
+ if (!op->data.metadata) continue;
+ grpc_mdctx_locked_mdelem_unref(mdctx, op->data.metadata);
+ }
+ grpc_mdctx_unlock(mdctx);
+ }
}
diff --git a/src/core/transport/chttp2_transport.c b/src/core/transport/chttp2_transport.c
index 4c0394d46f..110a4b544f 100644
--- a/src/core/transport/chttp2_transport.c
+++ b/src/core/transport/chttp2_transport.c
@@ -834,13 +834,10 @@ static void push_setting(transport *t, grpc_chttp2_setting_id id,
static int prepare_write(transport *t) {
stream *s;
- gpr_slice_buffer tempbuf;
gpr_uint32 window_delta;
/* simple writes are queued to qbuf, and flushed here */
- tempbuf = t->qbuf;
- t->qbuf = t->outbuf;
- t->outbuf = tempbuf;
+ gpr_slice_buffer_swap(&t->qbuf, &t->outbuf);
GPR_ASSERT(t->qbuf.count == 0);
if (t->dirtied_local_settings && !t->sent_local_settings) {
diff --git a/src/core/transport/metadata.c b/src/core/transport/metadata.c
index 066cc263a1..44f6591c95 100644
--- a/src/core/transport/metadata.c
+++ b/src/core/transport/metadata.c
@@ -34,10 +34,12 @@
#include "src/core/iomgr/sockaddr.h"
#include "src/core/transport/metadata.h"
+#include <assert.h>
#include <stddef.h>
#include <string.h>
#include <grpc/support/alloc.h>
+#include <grpc/support/atm.h>
#include <grpc/support/log.h>
#include "src/core/support/murmur_hash.h"
#include "src/core/transport/chttp2/bin_encoder.h"
@@ -68,11 +70,12 @@ typedef struct internal_metadata {
internal_string *key;
internal_string *value;
+ gpr_atm refcnt;
+
/* private only data */
void *user_data;
void (*destroy_user_data)(void *user_data);
- gpr_uint32 refs;
grpc_mdctx *context;
struct internal_metadata *bucket_next;
} internal_metadata;
@@ -129,8 +132,8 @@ static void unlock(grpc_mdctx *ctx) {
gpr_mu_unlock(&ctx->mu);
}
-static void ref_md(internal_metadata *md) {
- if (0 == md->refs++) {
+static void ref_md_locked(internal_metadata *md) {
+ if (0 == gpr_atm_no_barrier_fetch_add(&md->refcnt, 1)) {
md->context->mdtab_free--;
}
}
@@ -168,7 +171,7 @@ static void discard_metadata(grpc_mdctx *ctx) {
for (i = 0; i < ctx->mdtab_capacity; i++) {
cur = ctx->mdtab[i];
while (cur) {
- GPR_ASSERT(cur->refs == 0);
+ GPR_ASSERT(gpr_atm_acq_load(&cur->refcnt) == 0);
next = cur->bucket_next;
internal_string_unref(cur->key);
internal_string_unref(cur->value);
@@ -349,7 +352,7 @@ static void gc_mdtab(grpc_mdctx *ctx) {
prev_next = &ctx->mdtab[i];
for (md = ctx->mdtab[i]; md; md = next) {
next = md->bucket_next;
- if (md->refs == 0) {
+ if (gpr_atm_acq_load(&md->refcnt) == 0) {
internal_string_unref(md->key);
internal_string_unref(md->value);
if (md->user_data) {
@@ -415,7 +418,7 @@ grpc_mdelem *grpc_mdelem_from_metadata_strings(grpc_mdctx *ctx,
/* search for an existing pair */
for (md = ctx->mdtab[hash % ctx->mdtab_capacity]; md; md = md->bucket_next) {
if (md->key == key && md->value == value) {
- ref_md(md);
+ ref_md_locked(md);
internal_string_unref(key);
internal_string_unref(value);
unlock(ctx);
@@ -425,7 +428,7 @@ grpc_mdelem *grpc_mdelem_from_metadata_strings(grpc_mdctx *ctx,
/* not found: create a new pair */
md = gpr_malloc(sizeof(internal_metadata));
- md->refs = 1;
+ gpr_atm_rel_store(&md->refcnt, 1);
md->context = ctx;
md->key = key;
md->value = value;
@@ -468,10 +471,12 @@ grpc_mdelem *grpc_mdelem_from_string_and_buffer(grpc_mdctx *ctx,
grpc_mdelem *grpc_mdelem_ref(grpc_mdelem *gmd) {
internal_metadata *md = (internal_metadata *)gmd;
- grpc_mdctx *ctx = md->context;
- lock(ctx);
- ref_md(md);
- unlock(ctx);
+ /* we can assume the ref count is >= 1 as the application is calling
+ this function - meaning that no adjustment to mdtab_free is necessary,
+ simplifying the logic here to be just an atomic increment */
+ /* use C assert to have this removed in opt builds */
+ assert(gpr_atm_no_barrier_load(&md->refcnt) >= 1);
+ gpr_atm_no_barrier_fetch_add(&md->refcnt, 1);
return gmd;
}
@@ -479,8 +484,8 @@ void grpc_mdelem_unref(grpc_mdelem *gmd) {
internal_metadata *md = (internal_metadata *)gmd;
grpc_mdctx *ctx = md->context;
lock(ctx);
- GPR_ASSERT(md->refs);
- if (0 == --md->refs) {
+ assert(gpr_atm_no_barrier_load(&md->refcnt) >= 1);
+ if (1 == gpr_atm_full_fetch_add(&md->refcnt, -1)) {
ctx->mdtab_free++;
}
unlock(ctx);
@@ -550,3 +555,17 @@ gpr_slice grpc_mdstr_as_base64_encoded_and_huffman_compressed(grpc_mdstr *gs) {
unlock(ctx);
return slice;
}
+
+void grpc_mdctx_lock(grpc_mdctx *ctx) { lock(ctx); }
+
+void grpc_mdctx_locked_mdelem_unref(grpc_mdctx *ctx, grpc_mdelem *gmd) {
+ internal_metadata *md = (internal_metadata *)gmd;
+ grpc_mdctx *elem_ctx = md->context;
+ GPR_ASSERT(ctx == elem_ctx);
+ assert(gpr_atm_no_barrier_load(&md->refcnt) >= 1);
+ if (1 == gpr_atm_full_fetch_add(&md->refcnt, -1)) {
+ ctx->mdtab_free++;
+ }
+}
+
+void grpc_mdctx_unlock(grpc_mdctx *ctx) { unlock(ctx); }
diff --git a/src/core/transport/metadata.h b/src/core/transport/metadata.h
index b8afbeb1e3..21b8ae2b78 100644
--- a/src/core/transport/metadata.h
+++ b/src/core/transport/metadata.h
@@ -135,6 +135,18 @@ void grpc_mdelem_unref(grpc_mdelem *md);
Does not promise that the returned string has no embedded nulls however. */
const char *grpc_mdstr_as_c_string(grpc_mdstr *s);
+/* Batch mode metadata functions.
+ These API's have equivalents above, but allow taking the mdctx just once,
+ performing a bunch of work, and then leaving the mdctx. */
+
+/* Lock the metadata context: it's only safe to call _locked_ functions against
+ this context from the calling thread until grpc_mdctx_unlock is called */
+void grpc_mdctx_lock(grpc_mdctx *ctx);
+/* Unref a metadata element */
+void grpc_mdctx_locked_mdelem_unref(grpc_mdctx *ctx, grpc_mdelem *elem);
+/* Unlock the metadata context */
+void grpc_mdctx_unlock(grpc_mdctx *ctx);
+
#define GRPC_MDSTR_KV_HASH(k_hash, v_hash) (GPR_ROTL((k_hash), 2) ^ (v_hash))
#endif /* GRPC_INTERNAL_CORE_TRANSPORT_METADATA_H */
diff --git a/src/node/examples/math_server.js b/src/node/examples/math_server.js
index ae548c89e4..3fac193d64 100644
--- a/src/node/examples/math_server.js
+++ b/src/node/examples/math_server.js
@@ -33,10 +33,6 @@
'use strict';
-var util = require('util');
-
-var Transform = require('stream').Transform;
-
var grpc = require('..');
var math = grpc.load(__dirname + '/math.proto').math;
@@ -54,11 +50,12 @@ function mathDiv(call, cb) {
// Unary + is explicit coersion to integer
if (+req.divisor === 0) {
cb(new Error('cannot divide by zero'));
+ } else {
+ cb(null, {
+ quotient: req.dividend / req.divisor,
+ remainder: req.dividend % req.divisor
+ });
}
- cb(null, {
- quotient: req.dividend / req.divisor,
- remainder: req.dividend % req.divisor
- });
}
/**
@@ -97,24 +94,19 @@ function mathSum(call, cb) {
}
function mathDivMany(stream) {
- // Here, call is a standard duplex Node object Stream
- util.inherits(DivTransform, Transform);
- function DivTransform() {
- var options = {objectMode: true};
- Transform.call(this, options);
- }
- DivTransform.prototype._transform = function(div_args, encoding, callback) {
+ stream.on('data', function(div_args) {
if (+div_args.divisor === 0) {
- callback(new Error('cannot divide by zero'));
+ stream.emit('error', new Error('cannot divide by zero'));
+ } else {
+ stream.write({
+ quotient: div_args.dividend / div_args.divisor,
+ remainder: div_args.dividend % div_args.divisor
+ });
}
- callback(null, {
- quotient: div_args.dividend / div_args.divisor,
- remainder: div_args.dividend % div_args.divisor
- });
- };
- var transform = new DivTransform();
- stream.pipe(transform);
- transform.pipe(stream);
+ });
+ stream.on('end', function() {
+ stream.end();
+ });
}
var server = new Server({
diff --git a/src/node/package.json b/src/node/package.json
index 9f52f8c988..fc3ca1f103 100644
--- a/src/node/package.json
+++ b/src/node/package.json
@@ -1,6 +1,6 @@
{
"name": "grpc",
- "version": "0.6.0",
+ "version": "0.6.1",
"author": "Google Inc.",
"description": "gRPC Library for Node",
"homepage": "http://www.grpc.io/",
diff --git a/src/node/src/server.js b/src/node/src/server.js
index 05de16294d..eef705c44c 100644
--- a/src/node/src/server.js
+++ b/src/node/src/server.js
@@ -360,7 +360,9 @@ function handleUnary(call, handler, metadata) {
}
handler.func(emitter, function sendUnaryData(err, value, trailer) {
if (err) {
- err.metadata = trailer;
+ if (trailer) {
+ err.metadata = trailer;
+ }
handleError(call, err);
} else {
sendUnaryResponse(call, value, handler.serialize, trailer);
@@ -406,7 +408,9 @@ function handleClientStreaming(call, handler, metadata) {
handler.func(stream, function(err, value, trailer) {
stream.terminate();
if (err) {
- err.metadata = trailer;
+ if (trailer) {
+ err.metadata = trailer;
+ }
handleError(call, err);
} else {
sendUnaryResponse(call, value, handler.serialize, trailer);
diff --git a/src/node/test/math_client_test.js b/src/node/test/math_client_test.js
index d83f64116f..79df97871b 100644
--- a/src/node/test/math_client_test.js
+++ b/src/node/test/math_client_test.js
@@ -68,6 +68,13 @@ describe('Math client', function() {
done();
});
});
+ it('should handle an error from a unary request', function(done) {
+ var arg = {dividend: 7, divisor: 0};
+ math_client.div(arg, function handleDivResult(err, value) {
+ assert(err);
+ done();
+ });
+ });
it('should handle a server streaming request', function(done) {
var call = math_client.fib({limit: 7});
var expected_results = [1, 1, 2, 3, 5, 8, 13];
@@ -115,4 +122,17 @@ describe('Math client', function() {
done();
});
});
+ it('should handle an error from a bidi request', function(done) {
+ var call = math_client.divMany();
+ call.on('data', function(value) {
+ assert.fail(value, undefined, 'Unexpected data response on failing call',
+ '!=');
+ });
+ call.write({dividend: 7, divisor: 0});
+ call.end();
+ call.on('status', function checkStatus(status) {
+ assert.notEqual(status.code, grpc.status.OK);
+ done();
+ });
+ });
});
diff --git a/src/python/interop/interop/client.py b/src/python/interop/interop/client.py
index bae5e17460..41f0d94539 100644
--- a/src/python/interop/interop/client.py
+++ b/src/python/interop/interop/client.py
@@ -64,7 +64,7 @@ def _args():
return parser.parse_args()
def _oauth_access_token(args):
- credentials = client.GoogleCredentials.get_application_default()
+ credentials = oauth2client_client.GoogleCredentials.get_application_default()
scoped_credentials = credentials.create_scoped([args.oauth_scope])
return scoped_credentials.get_access_token().access_token
diff --git a/src/python/interop/interop/methods.py b/src/python/interop/interop/methods.py
index c69771dff1..909b738bd1 100644
--- a/src/python/interop/interop/methods.py
+++ b/src/python/interop/interop/methods.py
@@ -292,7 +292,7 @@ def _service_account_creds(stub, args):
if wanted_email != response.username:
raise ValueError(
'expected username %s, got %s' % (wanted_email, response.username))
- if response.oauth_scope in args.oauth_scope:
+ if args.oauth_scope.find(response.oauth_scope) == -1:
raise ValueError(
'expected to find oauth scope "%s" in received "%s"' %
(response.oauth_scope, args.oauth_scope))
diff --git a/src/python/src/grpc/early_adopter/implementations.py b/src/python/src/grpc/early_adopter/implementations.py
index 35456d38c6..f3f2a043eb 100644
--- a/src/python/src/grpc/early_adopter/implementations.py
+++ b/src/python/src/grpc/early_adopter/implementations.py
@@ -223,7 +223,8 @@ def stub(
breakdown = _face_utilities.break_down_invocation(service_name, methods)
return _Stub(
breakdown, host, port, secure, root_certificates, private_key,
- certificate_chain, server_host_override=server_host_override)
+ certificate_chain, server_host_override=server_host_override,
+ metadata_transformer=metadata_transformer)
def server(
diff --git a/src/ruby/.rubocop_todo.yml b/src/ruby/.rubocop_todo.yml
index d5bb55e5a8..d9fe0a5835 100644
--- a/src/ruby/.rubocop_todo.yml
+++ b/src/ruby/.rubocop_todo.yml
@@ -1,42 +1,30 @@
# This configuration was generated by `rubocop --auto-gen-config`
-# on 2015-01-16 02:30:04 -0800 using RuboCop version 0.28.0.
+# on 2015-04-14 09:35:44 -0700 using RuboCop version 0.29.1.
# The point is for the user to remove these configuration records
# one by one as the offenses are removed from the code base.
# Note that changes in the inspected code, or installation of new
# versions of RuboCop, may require this file to be generated again.
-# Offense count: 3
-# Lint/UselessAssignment:
-# Enabled: false
-
-# Offense count: 33
+# Offense count: 32
Metrics/AbcSize:
- Max: 39
+ Max: 36
-# Offense count: 3
+# Offense count: 2
# Configuration parameters: CountComments.
Metrics/ClassLength:
- Max: 231
-
-# Offense count: 2
-Metrics/CyclomaticComplexity:
- Max: 8
+ Max: 183
-# Offense count: 36
+# Offense count: 35
# Configuration parameters: CountComments.
Metrics/MethodLength:
- Max: 37
+ Max: 36
-# Offense count: 8
+# Offense count: 7
# Configuration parameters: CountKeywordArgs.
Metrics/ParameterLists:
Max: 8
-# Offense count: 2
-Metrics/PerceivedComplexity:
- Max: 10
-
-# Offense count: 7
+# Offense count: 6
# Configuration parameters: AllowedVariables.
Style/GlobalVars:
Enabled: false
@@ -50,3 +38,7 @@ Style/Next:
# Configuration parameters: Methods.
Style/SingleLineBlockParams:
Enabled: false
+
+# Offense count: 1
+Style/StructInheritance:
+ Enabled: false
diff --git a/src/ruby/CHANGELOG.md b/src/ruby/CHANGELOG.md
new file mode 100644
index 0000000000..8ec6e3cfdb
--- /dev/null
+++ b/src/ruby/CHANGELOG.md
@@ -0,0 +1,11 @@
+## 0.6.1 (2015-04-14)
+
+### Changes
+
+* Begins this ChangeLog ([@tbetbetbe][])
+* Updates to version 0.4 of googleauth. ([@tbetbetbe][])
+* Switch the extension to use the call API. ([@tbetbetbe][])
+* Refactor the C extension to avoid identifiers used by ruby ([@yugui][])
+
+[@tbetbetbe]: https://github.com/tbetbetbe
+[@yugui]: https://github.com/yugui
diff --git a/src/ruby/bin/apis/pubsub_demo.rb b/src/ruby/bin/apis/pubsub_demo.rb
index 9bb324ff64..6d69b0f21e 100755
--- a/src/ruby/bin/apis/pubsub_demo.rb
+++ b/src/ruby/bin/apis/pubsub_demo.rb
@@ -71,7 +71,7 @@ end
# Builds the metadata authentication update proc.
def auth_proc(opts)
- auth_creds = Google::Auth.get_application_default(opts.oauth_scope)
+ auth_creds = Google::Auth.get_application_default
return auth_creds.updater_proc
end
@@ -213,17 +213,14 @@ class NamedActions
end
# Args is used to hold the command line info.
-Args = Struct.new(:host, :oauth_scope, :port, :action, :project_id, :topic_name,
+Args = Struct.new(:host, :port, :action, :project_id, :topic_name,
:sub_name)
# validates the the command line options, returning them as an Arg.
def parse_args
args = Args.new('pubsub-staging.googleapis.com',
- 'https://www.googleapis.com/auth/pubsub',
443, 'list_some_topics', 'stoked-keyword-656')
OptionParser.new do |opts|
- opts.on('--oauth_scope scope',
- 'Scope for OAuth tokens') { |v| args['oauth_scope'] = v }
opts.on('--server_host SERVER_HOST', 'server hostname') do |v|
args.host = v
end
@@ -250,7 +247,7 @@ def parse_args
end
def _check_args(args)
- %w(host port action oauth_scope).each do |a|
+ %w(host port action).each do |a|
if args[a].nil?
raise OptionParser::MissingArgument.new("please specify --#{a}")
end
diff --git a/src/ruby/bin/interop/interop_client.rb b/src/ruby/bin/interop/interop_client.rb
index b2a8711c79..af7a1d5b15 100755
--- a/src/ruby/bin/interop/interop_client.rb
+++ b/src/ruby/bin/interop/interop_client.rb
@@ -110,6 +110,11 @@ def create_stub(opts)
end
end
+ if opts.test_case == 'jwt_token_creds' # don't use a scope
+ auth_creds = Google::Auth.get_application_default
+ stub_opts[:update_metadata] = auth_creds.updater_proc
+ end
+
logger.info("... connecting securely to #{address}")
Grpc::Testing::TestService::Stub.new(address, **stub_opts)
else
@@ -201,6 +206,15 @@ class NamedTests
p 'OK: service_account_creds'
end
+ def jwt_token_creds
+ json_key = File.read(ENV[AUTH_ENV])
+ wanted_email = MultiJson.load(json_key)['client_email']
+ resp = perform_large_unary(fill_username: true)
+ assert_equal(wanted_email, resp.username,
+ 'service_account_creds: incorrect username')
+ p 'OK: jwt_token_creds'
+ end
+
def compute_engine_creds
resp = perform_large_unary(fill_username: true,
fill_oauth_scope: true)
diff --git a/src/ruby/grpc.gemspec b/src/ruby/grpc.gemspec
index 45cbacfeb0..a50d0351da 100755
--- a/src/ruby/grpc.gemspec
+++ b/src/ruby/grpc.gemspec
@@ -22,7 +22,7 @@ Gem::Specification.new do |s|
s.platform = Gem::Platform::RUBY
s.add_dependency 'google-protobuf', '~> 3.0.0alpha.1.1'
- s.add_dependency 'googleauth', '~> 0.1'
+ s.add_dependency 'googleauth', '~> 0.4'
s.add_dependency 'logging', '~> 1.8'
s.add_dependency 'minitest', '~> 5.4' # reqd for interop tests
s.add_dependency 'xray', '~> 1.1'
diff --git a/src/ruby/lib/grpc/generic/client_stub.rb b/src/ruby/lib/grpc/generic/client_stub.rb
index 6547a1499e..dc7672d359 100644
--- a/src/ruby/lib/grpc/generic/client_stub.rb
+++ b/src/ruby/lib/grpc/generic/client_stub.rb
@@ -52,6 +52,14 @@ module GRPC
Core::Channel.new(host, kw, creds)
end
+ def self.update_with_jwt_aud_uri(a_hash, host, method)
+ last_slash_idx, res = method.rindex('/'), a_hash.clone
+ return res if last_slash_idx.nil?
+ service_name = method[0..(last_slash_idx - 1)]
+ res[:jwt_aud_uri] = "https://#{host}#{service_name}"
+ res
+ end
+
# check_update_metadata is used by #initialize verify that it's a Proc.
def self.check_update_metadata(update_metadata)
return update_metadata if update_metadata.nil?
@@ -147,7 +155,8 @@ module GRPC
def request_response(method, req, marshal, unmarshal, timeout = nil,
return_op: false, **kw)
c = new_active_call(method, marshal, unmarshal, timeout)
- md = @update_metadata.nil? ? kw : @update_metadata.call(kw.clone)
+ kw_with_jwt_uri = self.class.update_with_jwt_aud_uri(kw, @host, method)
+ md = @update_metadata.nil? ? kw : @update_metadata.call(kw_with_jwt_uri)
return c.request_response(req, **md) unless return_op
# return the operation view of the active_call; define #execute as a
@@ -204,7 +213,8 @@ module GRPC
def client_streamer(method, requests, marshal, unmarshal, timeout = nil,
return_op: false, **kw)
c = new_active_call(method, marshal, unmarshal, timeout)
- md = @update_metadata.nil? ? kw : @update_metadata.call(kw.clone)
+ kw_with_jwt_uri = self.class.update_with_jwt_aud_uri(kw, @host, method)
+ md = @update_metadata.nil? ? kw : @update_metadata.call(kw_with_jwt_uri)
return c.client_streamer(requests, **md) unless return_op
# return the operation view of the active_call; define #execute as a
@@ -270,7 +280,8 @@ module GRPC
def server_streamer(method, req, marshal, unmarshal, timeout = nil,
return_op: false, **kw, &blk)
c = new_active_call(method, marshal, unmarshal, timeout)
- md = @update_metadata.nil? ? kw : @update_metadata.call(kw.clone)
+ kw_with_jwt_uri = self.class.update_with_jwt_aud_uri(kw, @host, method)
+ md = @update_metadata.nil? ? kw : @update_metadata.call(kw_with_jwt_uri)
return c.server_streamer(req, **md, &blk) unless return_op
# return the operation view of the active_call; define #execute
@@ -375,7 +386,8 @@ module GRPC
def bidi_streamer(method, requests, marshal, unmarshal, timeout = nil,
return_op: false, **kw, &blk)
c = new_active_call(method, marshal, unmarshal, timeout)
- md = @update_metadata.nil? ? kw : @update_metadata.call(kw.clone)
+ kw_with_jwt_uri = self.class.update_with_jwt_aud_uri(kw, @host, method)
+ md = @update_metadata.nil? ? kw : @update_metadata.call(kw_with_jwt_uri)
return c.bidi_streamer(requests, **md, &blk) unless return_op
# return the operation view of the active_call; define #execute
diff --git a/src/ruby/lib/grpc/version.rb b/src/ruby/lib/grpc/version.rb
index bfd0cbb393..072fb9b1aa 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.6.0'
+ VERSION = '0.6.1'
end
diff --git a/src/ruby/spec/channel_spec.rb b/src/ruby/spec/channel_spec.rb
index 31e38d71b8..d471ff5db6 100644
--- a/src/ruby/spec/channel_spec.rb
+++ b/src/ruby/spec/channel_spec.rb
@@ -58,7 +58,7 @@ describe GRPC::Core::Channel do
it 'does not take a hash with bad values as channel args' do
blk = construct_with_args(symbol: Object.new)
expect(&blk).to raise_error TypeError
- blk = construct_with_args('1' => Hash.new)
+ blk = construct_with_args('1' => {})
expect(&blk).to raise_error TypeError
end
diff --git a/src/ruby/spec/client_server_spec.rb b/src/ruby/spec/client_server_spec.rb
index 1a2afbe1f9..68af79f907 100644
--- a/src/ruby/spec/client_server_spec.rb
+++ b/src/ruby/spec/client_server_spec.rb
@@ -192,11 +192,11 @@ shared_examples 'GRPC metadata delivery works OK' do
describe 'from client => server' do
before(:example) do
n = 7 # arbitrary number of metadata
- diff_keys_fn = proc { |i| [sprintf('k%d', i), sprintf('v%d', i)] }
+ diff_keys_fn = proc { |i| [format('k%d', i), format('v%d', i)] }
diff_keys = Hash[n.times.collect { |x| diff_keys_fn.call x }]
- null_vals_fn = proc { |i| [sprintf('k%d', i), sprintf('v\0%d', i)] }
+ null_vals_fn = proc { |i| [format('k%d', i), format('v\0%d', i)] }
null_vals = Hash[n.times.collect { |x| null_vals_fn.call x }]
- same_keys_fn = proc { |i| [sprintf('k%d', i), [sprintf('v%d', i)] * n] }
+ same_keys_fn = proc { |i| [format('k%d', i), [format('v%d', i)] * n] }
same_keys = Hash[n.times.collect { |x| same_keys_fn.call x }]
symbol_key = { a_key: 'a val' }
@valid_metadata = [diff_keys, same_keys, null_vals, symbol_key]
@@ -242,11 +242,11 @@ shared_examples 'GRPC metadata delivery works OK' do
describe 'from server => client' do
before(:example) do
n = 7 # arbitrary number of metadata
- diff_keys_fn = proc { |i| [sprintf('k%d', i), sprintf('v%d', i)] }
+ diff_keys_fn = proc { |i| [format('k%d', i), format('v%d', i)] }
diff_keys = Hash[n.times.collect { |x| diff_keys_fn.call x }]
- null_vals_fn = proc { |i| [sprintf('k%d', i), sprintf('v\0%d', i)] }
+ null_vals_fn = proc { |i| [format('k%d', i), format('v\0%d', i)] }
null_vals = Hash[n.times.collect { |x| null_vals_fn.call x }]
- same_keys_fn = proc { |i| [sprintf('k%d', i), [sprintf('v%d', i)] * n] }
+ same_keys_fn = proc { |i| [format('k%d', i), [format('v%d', i)] * n] }
same_keys = Hash[n.times.collect { |x| same_keys_fn.call x }]
symbol_key = { a_key: 'a val' }
@valid_metadata = [diff_keys, same_keys, null_vals, symbol_key]
diff --git a/src/ruby/spec/generic/rpc_server_spec.rb b/src/ruby/spec/generic/rpc_server_spec.rb
index f409d73e2f..245999ea03 100644
--- a/src/ruby/spec/generic/rpc_server_spec.rb
+++ b/src/ruby/spec/generic/rpc_server_spec.rb
@@ -400,7 +400,8 @@ describe GRPC::RpcServer do
end
stub = EchoStub.new(@host, **@client_opts)
expect(stub.an_rpc(req, k1: 'v1', k2: 'v2')).to be_a(EchoMsg)
- wanted_md = [{ 'k1' => 'updated-v1', 'k2' => 'v2' }]
+ wanted_md = [{ 'k1' => 'updated-v1', 'k2' => 'v2',
+ 'jwt_aud_uri' => "https://#{@host}/EchoService" }]
expect(service.received_md).to eq(wanted_md)
@srv.stop
t.join
diff --git a/src/ruby/spec/server_spec.rb b/src/ruby/spec/server_spec.rb
index a47e484f97..bb566d1b1f 100644
--- a/src/ruby/spec/server_spec.rb
+++ b/src/ruby/spec/server_spec.rb
@@ -152,7 +152,7 @@ describe Server do
it 'does not take a hash with bad values as channel args' do
blk = construct_with_args(symbol: Object.new)
expect(&blk).to raise_error TypeError
- blk = construct_with_args('1' => Hash.new)
+ blk = construct_with_args('1' => {})
expect(&blk).to raise_error TypeError
end
diff --git a/templates/Makefile.template b/templates/Makefile.template
index 331141fb24..73f7945074 100644
--- a/templates/Makefile.template
+++ b/templates/Makefile.template
@@ -96,6 +96,15 @@ CPPFLAGS_opt = -O2
LDFLAGS_opt =
DEFINES_opt = NDEBUG
+VALID_CONFIG_latprof = 1
+CC_latprof = $(DEFAULT_CC)
+CXX_latprof = $(DEFAULT_CXX)
+LD_latprof = $(DEFAULT_CC)
+LDXX_latprof = $(DEFAULT_CXX)
+CPPFLAGS_latprof = -O2 -DGRPC_LATENCY_PROFILER
+LDFLAGS_latprof =
+DEFINES_latprof = NDEBUG
+
VALID_CONFIG_dbg = 1
CC_dbg = $(DEFAULT_CC)
CXX_dbg = $(DEFAULT_CXX)
diff --git a/templates/tools/run_tests/tests.json.template b/templates/tools/run_tests/tests.json.template
index 6d7520bc0f..337858d9f1 100644
--- a/templates/tools/run_tests/tests.json.template
+++ b/templates/tools/run_tests/tests.json.template
@@ -4,7 +4,8 @@ import json
${json.dumps([{"name": tgt.name,
"language": tgt.language,
- "flaky": tgt.get("flaky", False)}
+ "platforms": tgt.platforms,
+ "flaky": tgt.flaky}
for tgt in targets
if tgt.get('run', True) and tgt.build == 'test'],
sort_keys=True, indent=2)}
diff --git a/templates/vsprojects/vs2013/Grpc.mak.template b/templates/vsprojects/vs2013/Grpc.mak.template
index 8e1b33bba7..c1c15df5c6 100644
--- a/templates/vsprojects/vs2013/Grpc.mak.template
+++ b/templates/vsprojects/vs2013/Grpc.mak.template
@@ -32,8 +32,12 @@
<%def name="to_windows_path(path)">${path.replace('/','\\')}</%def>\
<%
allowed_dependencies = set(['gpr', 'grpc', 'gpr_test_util', 'grpc_test_util'])
- buildable_targets = [ target for target in targets if set(target.deps).issubset(allowed_dependencies) and all([src.endswith('.c') for src in target.src])]
- test_targets = [ target for target in buildable_targets if target.name.endswith('_test') ]
+ buildable_targets = [ target for target in targets
+ if set(target.deps).issubset(allowed_dependencies) and
+ all([src.endswith('.c') for src in target.src]) and
+ 'windows' in target.platforms ]
+ c_test_targets = [ target for target in buildable_targets if target.build == 'test' and not target.language == 'c++' ]
+ cxx_test_targets = [ target for target in buildable_targets if target.build == 'test' and target.language == 'c++' ]
%>\
# NMake file to build secondary gRPC targets on Windows.
# Use grpc.sln to solution to build the gRPC libraries.
@@ -62,29 +66,24 @@ grpc_test_util:
$(OUT_DIR):
mkdir $(OUT_DIR)
-buildtests: \
-% for target in test_targets:
+buildtests: buildtests_c buildtests_cxx
+
+buildtests_c: \
+% for target in c_test_targets:
${target.name}.exe \
% endfor
echo All tests built.
-test: \
-% for target in test_targets:
-${target.name} \
-% endfor
-
- echo All tests ran.
-
-test_gpr: \
-% for target in [ tgt for tgt in test_targets if tgt.name.startswith('gpr_')]:
-${target.name} \
+buildtests_cxx: \
+% for target in cxx_test_targets:
+${target.name}.exe \
% endfor
- echo All tests ran.
+ echo All tests built.
% for target in buildable_targets:
-${target.name}.exe: grpc_test_util
+${target.name}.exe: grpc_test_util $(OUT_DIR)
echo Building ${target.name}
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ \
%for source in target.src:
diff --git a/test/core/end2end/dualstack_socket_test.c b/test/core/end2end/dualstack_socket_test.c
index 66b76dc052..29097661bc 100644
--- a/test/core/end2end/dualstack_socket_test.c
+++ b/test/core/end2end/dualstack_socket_test.c
@@ -192,7 +192,7 @@ int main(int argc, char **argv) {
do_ipv6 = 0;
}
- /* For coverage, test with and without dualstack sockets. */
+ /* For coverage, test with and without dualstack sockets. */
for (grpc_forbid_dualstack_sockets_for_testing = 0;
grpc_forbid_dualstack_sockets_for_testing <= 1;
grpc_forbid_dualstack_sockets_for_testing++) {
diff --git a/test/core/iomgr/alarm_test.c b/test/core/iomgr/alarm_test.c
index 8d49332fa6..e677ba30dd 100644
--- a/test/core/iomgr/alarm_test.c
+++ b/test/core/iomgr/alarm_test.c
@@ -37,13 +37,9 @@
#include <ctype.h>
#include <errno.h>
#include <fcntl.h>
-#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include <sys/socket.h>
-#include <sys/time.h>
-#include <unistd.h>
#include <grpc/support/alloc.h>
#include <grpc/support/log.h>
diff --git a/test/core/profiling/timers_test.c b/test/core/profiling/timers_test.c
new file mode 100644
index 0000000000..55e59c969e
--- /dev/null
+++ b/test/core/profiling/timers_test.c
@@ -0,0 +1,83 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include "src/core/profiling/timers.h"
+#include <stdlib.h>
+#include "test/core/util/test_config.h"
+
+void test_log_events(int num_seqs) {
+ int start = 0;
+ int *state;
+ state = calloc(num_seqs, sizeof(state[0]));
+ while (start < num_seqs) {
+ int i;
+ int row;
+ if (state[start] == 3) { /* Already done with this posn */
+ start++;
+ continue;
+ }
+
+ row = rand() % 10; /* how many in a row */
+ for (i = start; (i < start + row) && (i < num_seqs); i++) {
+ int j;
+ int advance = 1 + rand() % 3; /* how many to advance by */
+ for (j = 0; j < advance; j++) {
+ switch (state[i]) {
+ case 0:
+ GRPC_TIMER_MARK(STATE_0, i);
+ state[i]++;
+ break;
+ case 1:
+ GRPC_TIMER_MARK(STATE_1, i);
+ state[i]++;
+ break;
+ case 2:
+ GRPC_TIMER_MARK(STATE_2, i);
+ state[i]++;
+ break;
+ case 3:
+ break;
+ }
+ }
+ }
+ }
+ free(state);
+}
+
+int main(int argc, char **argv) {
+ grpc_test_init(argc, argv);
+ grpc_timers_log_global_init();
+ test_log_events(1000000);
+ grpc_timers_log_global_destroy();
+ return 0;
+}
diff --git a/test/core/transport/chttp2_transport_end2end_test.c b/test/core/transport/chttp2_transport_end2end_test.c
index b90fe22999..766fd19960 100644
--- a/test/core/transport/chttp2_transport_end2end_test.c
+++ b/test/core/transport/chttp2_transport_end2end_test.c
@@ -38,8 +38,6 @@
#include <string.h>
#include <signal.h>
#include <sys/types.h>
-#include <sys/socket.h>
-#include <unistd.h>
#include "test/core/util/test_config.h"
#include "src/core/iomgr/iomgr.h"
diff --git a/test/core/util/port_posix.c b/test/core/util/port_posix.c
index 7467c2f9ea..b07df391f9 100644
--- a/test/core/util/port_posix.c
+++ b/test/core/util/port_posix.c
@@ -44,10 +44,37 @@
#include <string.h>
#include <unistd.h>
+#include <grpc/support/alloc.h>
#include <grpc/support/log.h>
#define NUM_RANDOM_PORTS_TO_PICK 100
+static int *chosen_ports = NULL;
+static size_t num_chosen_ports = 0;
+
+static int has_port_been_chosen(int port) {
+ size_t i;
+ for (i = 0; i < num_chosen_ports; i++) {
+ if (chosen_ports[i] == port) {
+ return 1;
+ }
+ }
+ return 0;
+}
+
+static void free_chosen_ports() {
+ gpr_free(chosen_ports);
+}
+
+static void chose_port(int port) {
+ if (chosen_ports == NULL) {
+ atexit(free_chosen_ports);
+ }
+ num_chosen_ports++;
+ chosen_ports = gpr_realloc(chosen_ports, sizeof(int) * num_chosen_ports);
+ chosen_ports[num_chosen_ports - 1] = port;
+}
+
static int is_port_available(int *port, int is_tcp) {
const int proto = is_tcp ? IPPROTO_TCP : 0;
const int fd = socket(AF_INET, is_tcp ? SOCK_STREAM : SOCK_DGRAM, proto);
@@ -127,6 +154,10 @@ int grpc_pick_unused_port(void) {
port = 0;
}
+ if (has_port_been_chosen(port)) {
+ continue;
+ }
+
if (!is_port_available(&port, is_tcp)) {
continue;
}
@@ -140,9 +171,7 @@ int grpc_pick_unused_port(void) {
continue;
}
- /* TODO(ctiller): consider caching this port in some structure, to avoid
- handing it out again */
-
+ chose_port(port);
return port;
}
diff --git a/test/core/util/port_windows.c b/test/core/util/port_windows.c
new file mode 100644
index 0000000000..17058c3353
--- /dev/null
+++ b/test/core/util/port_windows.c
@@ -0,0 +1,158 @@
+/*
+ *
+ * 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 <grpc/support/port_platform.h>
+#include "test/core/util/test_config.h"
+#if defined(GPR_WINSOCK_SOCKET) && defined(GRPC_TEST_PICK_PORT)
+
+#include "src/core/iomgr/sockaddr_utils.h"
+#include "test/core/util/port.h"
+
+#include <process.h>
+#include <stdio.h>
+#include <errno.h>
+#include <string.h>
+
+#include <grpc/support/log.h>
+
+#define NUM_RANDOM_PORTS_TO_PICK 100
+
+static int is_port_available(int *port, int is_tcp) {
+ const int proto = is_tcp ? IPPROTO_TCP : 0;
+ const SOCKET fd = socket(AF_INET, is_tcp ? SOCK_STREAM : SOCK_DGRAM, proto);
+ int one = 1;
+ struct sockaddr_in addr;
+ socklen_t alen = sizeof(addr);
+ int actual_port;
+
+ GPR_ASSERT(*port >= 0);
+ GPR_ASSERT(*port <= 65535);
+ if (fd < 0) {
+ gpr_log(GPR_ERROR, "socket() failed: %s", strerror(errno));
+ return 0;
+ }
+
+ /* Reuseaddr lets us start up a server immediately after it exits */
+ if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (const char*)&one, sizeof(one)) < 0) {
+ gpr_log(GPR_ERROR, "setsockopt() failed: %s", strerror(errno));
+ closesocket(fd);
+ return 0;
+ }
+
+ /* Try binding to port */
+ addr.sin_family = AF_INET;
+ addr.sin_addr.s_addr = INADDR_ANY;
+ addr.sin_port = htons(*port);
+ if (bind(fd, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
+ gpr_log(GPR_DEBUG, "bind(port=%d) failed: %s", *port, strerror(errno));
+ closesocket(fd);
+ return 0;
+ }
+
+ /* Get the bound port number */
+ if (getsockname(fd, (struct sockaddr *)&addr, &alen) < 0) {
+ gpr_log(GPR_ERROR, "getsockname() failed: %s", strerror(errno));
+ closesocket(fd);
+ return 0;
+ }
+ GPR_ASSERT(alen <= sizeof(addr));
+ actual_port = ntohs(addr.sin_port);
+ GPR_ASSERT(actual_port > 0);
+ if (*port == 0) {
+ *port = actual_port;
+ } else {
+ GPR_ASSERT(*port == actual_port);
+ }
+
+ closesocket(fd);
+ return 1;
+}
+
+int grpc_pick_unused_port(void) {
+ /* We repeatedly pick a port and then see whether or not it is
+ available for use both as a TCP socket and a UDP socket. First, we
+ pick a random large port number. For subsequent
+ iterations, we bind to an anonymous port and let the OS pick the
+ port number. The random port picking reduces the probability of
+ races with other processes on kernels that want to reuse the same
+ port numbers over and over. */
+
+ /* In alternating iterations we try UDP ports before TCP ports UDP
+ ports -- it could be the case that this machine has been using up
+ UDP ports and they are scarcer. */
+
+ /* Type of port to first pick in next iteration */
+ int is_tcp = 1;
+ int try = 0;
+
+ for (;;) {
+ int port;
+ try++;
+ if (try == 1) {
+ port = _getpid() % (65536 - 30000) + 30000;
+ } else if (try <= NUM_RANDOM_PORTS_TO_PICK) {
+ port = rand() % (65536 - 30000) + 30000;
+ } else {
+ port = 0;
+ }
+
+ if (!is_port_available(&port, is_tcp)) {
+ continue;
+ }
+
+ GPR_ASSERT(port > 0);
+ /* Check that the port # is free for the other type of socket also */
+ if (!is_port_available(&port, !is_tcp)) {
+ /* In the next iteration try to bind to the other type first
+ because perhaps it is more rare. */
+ is_tcp = !is_tcp;
+ continue;
+ }
+
+ /* TODO(ctiller): consider caching this port in some structure, to avoid
+ handing it out again */
+
+ return port;
+ }
+
+ /* The port iterator reached the end without finding a suitable port. */
+ return 0;
+}
+
+int grpc_pick_unused_port_or_die(void) {
+ int port = grpc_pick_unused_port();
+ GPR_ASSERT(port > 0);
+ return port;
+}
+
+#endif /* GPR_WINSOCK_SOCKET && GRPC_TEST_PICK_PORT */
diff --git a/test/cpp/qps/driver.cc b/test/cpp/qps/driver.cc
index f44883783d..9f7d3b56a4 100644
--- a/test/cpp/qps/driver.cc
+++ b/test/cpp/qps/driver.cc
@@ -42,21 +42,25 @@
#include <grpc++/stream.h>
#include <list>
#include <thread>
+#include <deque>
#include <vector>
#include "test/cpp/qps/histogram.h"
+#include "test/cpp/qps/qps_worker.h"
+#include "test/core/util/port.h"
using std::list;
using std::thread;
using std::unique_ptr;
+using std::deque;
using std::vector;
namespace grpc {
namespace testing {
-static vector<string> get_hosts(const string& name) {
+static deque<string> get_hosts(const string& name) {
char* env = gpr_getenv(name.c_str());
- if (!env) return vector<string>();
+ if (!env) return deque<string>();
- vector<string> out;
+ deque<string> out;
char* p = env;
for (;;) {
char* comma = strchr(p, ',');
@@ -76,7 +80,8 @@ ScenarioResult RunScenario(const ClientConfig& initial_client_config,
const ServerConfig& server_config,
size_t num_servers,
int warmup_seconds,
- int benchmark_seconds) {
+ int benchmark_seconds,
+ int spawn_local_worker_count) {
// ClientContext allocator (all are destroyed at scope exit)
list<ClientContext> contexts;
auto alloc_context = [&contexts]() {
@@ -88,6 +93,21 @@ ScenarioResult RunScenario(const ClientConfig& initial_client_config,
auto workers = get_hosts("QPS_WORKERS");
ClientConfig client_config = initial_client_config;
+ // Spawn some local workers if desired
+ vector<unique_ptr<QpsWorker>> local_workers;
+ for (int i = 0; i < abs(spawn_local_worker_count); i++) {
+ int driver_port = grpc_pick_unused_port_or_die();
+ int benchmark_port = grpc_pick_unused_port_or_die();
+ local_workers.emplace_back(new QpsWorker(driver_port, benchmark_port));
+ char addr[256];
+ sprintf(addr, "localhost:%d", driver_port);
+ if (spawn_local_worker_count < 0) {
+ workers.push_front(addr);
+ } else {
+ workers.push_back(addr);
+ }
+ }
+
// TODO(ctiller): support running multiple configurations, and binpack
// client/server pairs
// to available workers
diff --git a/test/cpp/qps/driver.h b/test/cpp/qps/driver.h
index b3a8bf8cc4..eb7119a89d 100644
--- a/test/cpp/qps/driver.h
+++ b/test/cpp/qps/driver.h
@@ -56,7 +56,8 @@ ScenarioResult RunScenario(const grpc::testing::ClientConfig& client_config,
const grpc::testing::ServerConfig& server_config,
size_t num_servers,
int warmup_seconds,
- int benchmark_seconds);
+ int benchmark_seconds,
+ int spawn_local_worker_count);
} // namespace testing
} // namespace grpc
diff --git a/test/cpp/qps/qps_driver.cc b/test/cpp/qps/qps_driver.cc
index 220f826118..8959f7b97e 100644
--- a/test/cpp/qps/qps_driver.cc
+++ b/test/cpp/qps/qps_driver.cc
@@ -42,6 +42,7 @@ DEFINE_int32(num_servers, 1, "Number of server binaries");
DEFINE_int32(warmup_seconds, 5, "Warmup time (in seconds)");
DEFINE_int32(benchmark_seconds, 30, "Benchmark time (in seconds)");
+DEFINE_int32(local_workers, 0, "Number of local workers to start");
// Common config
DEFINE_bool(enable_ssl, false, "Use SSL");
@@ -102,7 +103,8 @@ int main(int argc, char** argv) {
auto result = RunScenario(client_config, FLAGS_num_clients,
server_config, FLAGS_num_servers,
- FLAGS_warmup_seconds, FLAGS_benchmark_seconds);
+ FLAGS_warmup_seconds, FLAGS_benchmark_seconds,
+ FLAGS_local_workers);
ReportQPSPerCore(result, server_config);
ReportLatency(result);
diff --git a/test/cpp/qps/qps_worker.cc b/test/cpp/qps/qps_worker.cc
new file mode 100644
index 0000000000..46d70dce52
--- /dev/null
+++ b/test/cpp/qps/qps_worker.cc
@@ -0,0 +1,233 @@
+/*
+ *
+ * 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 "qps_worker.h"
+
+#include <cassert>
+#include <memory>
+#include <mutex>
+#include <string>
+#include <thread>
+#include <vector>
+#include <sstream>
+
+#include <grpc/grpc.h>
+#include <grpc/support/alloc.h>
+#include <grpc/support/histogram.h>
+#include <grpc/support/log.h>
+#include <grpc/support/host_port.h>
+#include <grpc++/client_context.h>
+#include <grpc++/status.h>
+#include <grpc++/server.h>
+#include <grpc++/server_builder.h>
+#include <grpc++/server_credentials.h>
+#include <grpc++/stream.h>
+#include "test/core/util/grpc_profiler.h"
+#include "test/cpp/util/create_test_channel.h"
+#include "test/cpp/qps/qpstest.pb.h"
+#include "test/cpp/qps/client.h"
+#include "test/cpp/qps/server.h"
+
+namespace grpc {
+namespace testing {
+
+std::unique_ptr<Client> CreateClient(const ClientConfig& config) {
+ switch (config.client_type()) {
+ case ClientType::SYNCHRONOUS_CLIENT:
+ return (config.rpc_type() == RpcType::UNARY) ?
+ CreateSynchronousUnaryClient(config) :
+ CreateSynchronousStreamingClient(config);
+ case ClientType::ASYNC_CLIENT:
+ return (config.rpc_type() == RpcType::UNARY) ?
+ CreateAsyncUnaryClient(config) : CreateAsyncStreamingClient(config);
+ }
+ abort();
+}
+
+std::unique_ptr<Server> CreateServer(const ServerConfig& config, int server_port) {
+ switch (config.server_type()) {
+ case ServerType::SYNCHRONOUS_SERVER:
+ return CreateSynchronousServer(config, server_port);
+ case ServerType::ASYNC_SERVER:
+ return CreateAsyncServer(config, server_port);
+ }
+ abort();
+}
+
+class WorkerImpl GRPC_FINAL : public Worker::Service {
+ public:
+ explicit WorkerImpl(int server_port) : server_port_(server_port), acquired_(false) {}
+
+ Status RunTest(ServerContext* ctx,
+ ServerReaderWriter<ClientStatus, ClientArgs>* stream)
+ GRPC_OVERRIDE {
+ InstanceGuard g(this);
+ if (!g.Acquired()) {
+ return Status(RESOURCE_EXHAUSTED);
+ }
+
+ grpc_profiler_start("qps_client.prof");
+ Status ret = RunTestBody(ctx,stream);
+ grpc_profiler_stop();
+ return ret;
+ }
+
+ Status RunServer(ServerContext* ctx,
+ ServerReaderWriter<ServerStatus, ServerArgs>* stream)
+ GRPC_OVERRIDE {
+ InstanceGuard g(this);
+ if (!g.Acquired()) {
+ return Status(RESOURCE_EXHAUSTED);
+ }
+
+ grpc_profiler_start("qps_server.prof");
+ Status ret = RunServerBody(ctx,stream);
+ grpc_profiler_stop();
+ return ret;
+ }
+
+ private:
+ // Protect against multiple clients using this worker at once.
+ class InstanceGuard {
+ public:
+ InstanceGuard(WorkerImpl* impl)
+ : impl_(impl), acquired_(impl->TryAcquireInstance()) {}
+ ~InstanceGuard() {
+ if (acquired_) {
+ impl_->ReleaseInstance();
+ }
+ }
+
+ bool Acquired() const { return acquired_; }
+
+ private:
+ WorkerImpl* const impl_;
+ const bool acquired_;
+ };
+
+ bool TryAcquireInstance() {
+ std::lock_guard<std::mutex> g(mu_);
+ if (acquired_) return false;
+ acquired_ = true;
+ return true;
+ }
+
+ void ReleaseInstance() {
+ std::lock_guard<std::mutex> g(mu_);
+ GPR_ASSERT(acquired_);
+ acquired_ = false;
+ }
+
+ Status RunTestBody(ServerContext* ctx,
+ ServerReaderWriter<ClientStatus, ClientArgs>* stream) {
+ ClientArgs args;
+ if (!stream->Read(&args)) {
+ return Status(INVALID_ARGUMENT);
+ }
+ if (!args.has_setup()) {
+ return Status(INVALID_ARGUMENT);
+ }
+ auto client = CreateClient(args.setup());
+ if (!client) {
+ return Status(INVALID_ARGUMENT);
+ }
+ ClientStatus status;
+ if (!stream->Write(status)) {
+ return Status(UNKNOWN);
+ }
+ while (stream->Read(&args)) {
+ if (!args.has_mark()) {
+ return Status(INVALID_ARGUMENT);
+ }
+ *status.mutable_stats() = client->Mark();
+ stream->Write(status);
+ }
+
+ return Status::OK;
+ }
+
+ Status RunServerBody(ServerContext* ctx,
+ ServerReaderWriter<ServerStatus, ServerArgs>* stream) {
+ ServerArgs args;
+ if (!stream->Read(&args)) {
+ return Status(INVALID_ARGUMENT);
+ }
+ if (!args.has_setup()) {
+ return Status(INVALID_ARGUMENT);
+ }
+ auto server = CreateServer(args.setup(), server_port_);
+ if (!server) {
+ return Status(INVALID_ARGUMENT);
+ }
+ ServerStatus status;
+ status.set_port(server_port_);
+ if (!stream->Write(status)) {
+ return Status(UNKNOWN);
+ }
+ while (stream->Read(&args)) {
+ if (!args.has_mark()) {
+ return Status(INVALID_ARGUMENT);
+ }
+ *status.mutable_stats() = server->Mark();
+ stream->Write(status);
+ }
+
+ return Status::OK;
+ }
+
+ const int server_port_;
+
+ std::mutex mu_;
+ bool acquired_;
+};
+
+QpsWorker::QpsWorker(int driver_port, int server_port) {
+ impl_.reset(new WorkerImpl(server_port));
+
+ char* server_address = NULL;
+ gpr_join_host_port(&server_address, "::", driver_port);
+
+ ServerBuilder builder;
+ builder.AddListeningPort(server_address, InsecureServerCredentials());
+ builder.RegisterService(impl_.get());
+
+ gpr_free(server_address);
+
+ server_ = std::move(builder.BuildAndStart());
+}
+
+QpsWorker::~QpsWorker() {
+}
+
+} // namespace testing
+} // namespace grpc
diff --git a/test/cpp/qps/qps_worker.h b/test/cpp/qps/qps_worker.h
new file mode 100644
index 0000000000..861588907e
--- /dev/null
+++ b/test/cpp/qps/qps_worker.h
@@ -0,0 +1,60 @@
+/*
+ *
+ * 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 QPS_WORKER_H
+#define QPS_WORKER_H
+
+#include <memory>
+
+namespace grpc {
+
+class Server;
+
+namespace testing {
+
+class WorkerImpl;
+
+class QpsWorker {
+ public:
+ QpsWorker(int driver_port, int server_port);
+ ~QpsWorker();
+
+ private:
+ std::unique_ptr<WorkerImpl> impl_;
+ std::unique_ptr<Server> server_;
+};
+
+} // namespace testing
+} // namespace grpc
+
+#endif
diff --git a/test/cpp/qps/smoke_test.cc b/test/cpp/qps/smoke_test.cc
index c9d321f133..9531913b00 100644
--- a/test/cpp/qps/smoke_test.cc
+++ b/test/cpp/qps/smoke_test.cc
@@ -58,7 +58,7 @@ static void RunSynchronousUnaryPingPong() {
server_config.set_enable_ssl(false);
server_config.set_threads(1);
- auto result = RunScenario(client_config, 1, server_config, 1, WARMUP, BENCHMARK);
+ auto result = RunScenario(client_config, 1, server_config, 1, WARMUP, BENCHMARK, -2);
ReportQPS(result);
ReportLatency(result);
@@ -80,7 +80,7 @@ static void RunSynchronousStreamingPingPong() {
server_config.set_enable_ssl(false);
server_config.set_threads(1);
- auto result = RunScenario(client_config, 1, server_config, 1, WARMUP, BENCHMARK);
+ auto result = RunScenario(client_config, 1, server_config, 1, WARMUP, BENCHMARK, -2);
ReportQPS(result);
ReportLatency(result);
@@ -103,7 +103,7 @@ static void RunAsyncUnaryPingPong() {
server_config.set_enable_ssl(false);
server_config.set_threads(1);
- auto result = RunScenario(client_config, 1, server_config, 1, WARMUP, BENCHMARK);
+ auto result = RunScenario(client_config, 1, server_config, 1, WARMUP, BENCHMARK, -2);
ReportQPS(result);
ReportLatency(result);
@@ -126,7 +126,7 @@ static void RunQPS() {
server_config.set_enable_ssl(false);
server_config.set_threads(4);
- auto result = RunScenario(client_config, 1, server_config, 1, WARMUP, BENCHMARK);
+ auto result = RunScenario(client_config, 1, server_config, 1, WARMUP, BENCHMARK, -2);
ReportQPSPerCore(result, server_config);
ReportLatency(result);
diff --git a/test/cpp/qps/smoke_test.sh b/test/cpp/qps/smoke_test.sh
deleted file mode 100755
index ba7f0a4f27..0000000000
--- a/test/cpp/qps/smoke_test.sh
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/bin/sh
-
-# performs a single qps run with one client and one server
-
-set -ex
-
-cd $(dirname $0)/../../..
-
-killall qps_worker || true
-
-config=opt
-
-NUMCPUS=`python2.7 -c 'import multiprocessing; print multiprocessing.cpu_count()'`
-
-make CONFIG=$config qps_worker qps_smoke_test -j$NUMCPUS
-
-bins/$config/qps_worker -driver_port 10000 -server_port 10001 &
-PID1=$!
-bins/$config/qps_worker -driver_port 10010 -server_port 10011 &
-PID2=$!
-
-export QPS_WORKERS="localhost:10000,localhost:10010"
-
-bins/$config/qps_smoke_test $*
-
-kill -2 $PID1 $PID2
-wait
-
diff --git a/test/cpp/qps/worker.cc b/test/cpp/qps/worker.cc
index 101eb9f969..1ef5313b66 100644
--- a/test/cpp/qps/worker.cc
+++ b/test/cpp/qps/worker.cc
@@ -31,33 +31,15 @@
*
*/
-#include <cassert>
-#include <memory>
-#include <mutex>
-#include <string>
-#include <thread>
-#include <vector>
-#include <sstream>
-
#include <sys/signal.h>
+#include <chrono>
+#include <thread>
+
#include <grpc/grpc.h>
-#include <grpc/support/alloc.h>
-#include <grpc/support/histogram.h>
-#include <grpc/support/log.h>
-#include <grpc/support/host_port.h>
#include <gflags/gflags.h>
-#include <grpc++/client_context.h>
-#include <grpc++/status.h>
-#include <grpc++/server.h>
-#include <grpc++/server_builder.h>
-#include <grpc++/server_credentials.h>
-#include <grpc++/stream.h>
-#include "test/core/util/grpc_profiler.h"
-#include "test/cpp/util/create_test_channel.h"
-#include "test/cpp/qps/qpstest.grpc.pb.h"
-#include "test/cpp/qps/client.h"
-#include "test/cpp/qps/server.h"
+
+#include "qps_worker.h"
DEFINE_int32(driver_port, 0, "Driver server port.");
DEFINE_int32(server_port, 0, "Spawned server port.");
@@ -76,167 +58,8 @@ static void sigint_handler(int x) {got_sigint = true;}
namespace grpc {
namespace testing {
-std::unique_ptr<Client> CreateClient(const ClientConfig& config) {
- switch (config.client_type()) {
- case ClientType::SYNCHRONOUS_CLIENT:
- return (config.rpc_type() == RpcType::UNARY) ?
- CreateSynchronousUnaryClient(config) :
- CreateSynchronousStreamingClient(config);
- case ClientType::ASYNC_CLIENT:
- return (config.rpc_type() == RpcType::UNARY) ?
- CreateAsyncUnaryClient(config) : CreateAsyncStreamingClient(config);
- }
- abort();
-}
-
-std::unique_ptr<Server> CreateServer(const ServerConfig& config) {
- switch (config.server_type()) {
- case ServerType::SYNCHRONOUS_SERVER:
- return CreateSynchronousServer(config, FLAGS_server_port);
- case ServerType::ASYNC_SERVER:
- return CreateAsyncServer(config, FLAGS_server_port);
- }
- abort();
-}
-
-class WorkerImpl GRPC_FINAL : public Worker::Service {
- public:
- WorkerImpl() : acquired_(false) {}
-
- Status RunTest(ServerContext* ctx,
- ServerReaderWriter<ClientStatus, ClientArgs>* stream)
- GRPC_OVERRIDE {
- InstanceGuard g(this);
- if (!g.Acquired()) {
- return Status(RESOURCE_EXHAUSTED);
- }
-
- grpc_profiler_start("qps_client.prof");
- Status ret = RunTestBody(ctx,stream);
- grpc_profiler_stop();
- return ret;
- }
-
- Status RunServer(ServerContext* ctx,
- ServerReaderWriter<ServerStatus, ServerArgs>* stream)
- GRPC_OVERRIDE {
- InstanceGuard g(this);
- if (!g.Acquired()) {
- return Status(RESOURCE_EXHAUSTED);
- }
-
- grpc_profiler_start("qps_server.prof");
- Status ret = RunServerBody(ctx,stream);
- grpc_profiler_stop();
- return ret;
- }
-
- private:
- // Protect against multiple clients using this worker at once.
- class InstanceGuard {
- public:
- InstanceGuard(WorkerImpl* impl)
- : impl_(impl), acquired_(impl->TryAcquireInstance()) {}
- ~InstanceGuard() {
- if (acquired_) {
- impl_->ReleaseInstance();
- }
- }
-
- bool Acquired() const { return acquired_; }
-
- private:
- WorkerImpl* const impl_;
- const bool acquired_;
- };
-
- bool TryAcquireInstance() {
- std::lock_guard<std::mutex> g(mu_);
- if (acquired_) return false;
- acquired_ = true;
- return true;
- }
-
- void ReleaseInstance() {
- std::lock_guard<std::mutex> g(mu_);
- GPR_ASSERT(acquired_);
- acquired_ = false;
- }
-
- Status RunTestBody(ServerContext* ctx,
- ServerReaderWriter<ClientStatus, ClientArgs>* stream) {
- ClientArgs args;
- if (!stream->Read(&args)) {
- return Status(INVALID_ARGUMENT);
- }
- if (!args.has_setup()) {
- return Status(INVALID_ARGUMENT);
- }
- auto client = CreateClient(args.setup());
- if (!client) {
- return Status(INVALID_ARGUMENT);
- }
- ClientStatus status;
- if (!stream->Write(status)) {
- return Status(UNKNOWN);
- }
- while (stream->Read(&args)) {
- if (!args.has_mark()) {
- return Status(INVALID_ARGUMENT);
- }
- *status.mutable_stats() = client->Mark();
- stream->Write(status);
- }
-
- return Status::OK;
- }
-
- Status RunServerBody(ServerContext* ctx,
- ServerReaderWriter<ServerStatus, ServerArgs>* stream) {
- ServerArgs args;
- if (!stream->Read(&args)) {
- return Status(INVALID_ARGUMENT);
- }
- if (!args.has_setup()) {
- return Status(INVALID_ARGUMENT);
- }
- auto server = CreateServer(args.setup());
- if (!server) {
- return Status(INVALID_ARGUMENT);
- }
- ServerStatus status;
- status.set_port(FLAGS_server_port);
- if (!stream->Write(status)) {
- return Status(UNKNOWN);
- }
- while (stream->Read(&args)) {
- if (!args.has_mark()) {
- return Status(INVALID_ARGUMENT);
- }
- *status.mutable_stats() = server->Mark();
- stream->Write(status);
- }
-
- return Status::OK;
- }
-
- std::mutex mu_;
- bool acquired_;
-};
-
static void RunServer() {
- char* server_address = NULL;
- gpr_join_host_port(&server_address, "::", FLAGS_driver_port);
-
- WorkerImpl service;
-
- ServerBuilder builder;
- builder.AddListeningPort(server_address, InsecureServerCredentials());
- builder.RegisterService(&service);
-
- gpr_free(server_address);
-
- auto server = builder.BuildAndStart();
+ QpsWorker worker(FLAGS_driver_port, FLAGS_server_port);
while (!got_sigint) {
std::this_thread::sleep_for(std::chrono::seconds(5));
diff --git a/tools/buildgen/generate_projects.sh b/tools/buildgen/generate_projects.sh
index 45f08df38f..a09395c9e0 100755
--- a/tools/buildgen/generate_projects.sh
+++ b/tools/buildgen/generate_projects.sh
@@ -46,13 +46,11 @@ end2end_test_build=`mktemp /tmp/genXXXXXX`
$gen_build_json > $end2end_test_build
global_plugins=`find ./tools/buildgen/plugins -name '*.py' |
- sort | grep -v __init__ |
- while read p ; do echo -n "-p $p " ; done`
+ sort | grep -v __init__ | awk ' { printf "-p %s ", $0 } '`
for dir in . ; do
local_plugins=`find $dir/templates -name '*.py' |
- sort | grep -v __init__ |
- while read p ; do echo -n "-p $p " ; done`
+ sort | grep -v __init__ | awk ' { printf "-p %s ", $0 } '`
plugins="$global_plugins $local_plugins"
@@ -60,7 +58,7 @@ for dir in . ; do
out=${dir}/${file#$dir/templates/} # strip templates dir prefix
out=${out%.*} # strip template extension
json_files="build.json $end2end_test_build"
- data=`for i in $json_files; do echo -n "-d $i "; done`
+ data=`for i in $json_files ; do echo $i ; done | awk ' { printf "-d %s ", $0 } '`
if [ "x$TEST" = "xtrue" ] ; then
actual_out=$out
out=`mktemp /tmp/gentXXXXXX`
diff --git a/tools/buildgen/plugins/expand_bin_attrs.py b/tools/buildgen/plugins/expand_bin_attrs.py
new file mode 100755
index 0000000000..0896a5a165
--- /dev/null
+++ b/tools/buildgen/plugins/expand_bin_attrs.py
@@ -0,0 +1,51 @@
+# 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.
+
+"""Buildgen expand binary attributes plugin.
+
+This fills in any optional attributes.
+
+"""
+
+
+def mako_plugin(dictionary):
+ """The exported plugin code for expand_filegroups.
+
+ The list of libs in the build.json file can contain "filegroups" tags.
+ These refer to the filegroups in the root object. We will expand and
+ merge filegroups on the src, headers and public_headers properties.
+
+ """
+
+ targets = dictionary.get('targets')
+
+ for tgt in targets:
+ tgt['flaky'] = tgt.get('flaky', False)
+ tgt['platforms'] = tgt.get('platforms', ['windows', 'posix'])
+
diff --git a/tools/gce_setup/cloud_prod_runner.sh b/tools/gce_setup/cloud_prod_runner.sh
index e236c921ec..0389ac9dc1 100755
--- a/tools/gce_setup/cloud_prod_runner.sh
+++ b/tools/gce_setup/cloud_prod_runner.sh
@@ -32,21 +32,25 @@ thisfile=$(readlink -ne "${BASH_SOURCE[0]}")
current_time=$(date "+%Y-%m-%d-%H-%M-%S")
result_file_name=cloud_prod_result.$current_time.html
echo $result_file_name
+log_link=https://pantheon.corp.google.com/m/cloudstorage/b/stoked-keyword-656-output/o/log_history
main() {
source grpc_docker.sh
test_cases=(large_unary empty_unary ping_pong client_streaming server_streaming cancel_after_begin cancel_after_first_response)
auth_test_cases=(service_account_creds compute_engine_creds jwt_token_creds)
- clients=(cxx java go ruby node csharp_mono)
+ clients=(cxx java go ruby node csharp_mono python)
for test_case in "${test_cases[@]}"
do
for client in "${clients[@]}"
do
- if grpc_cloud_prod_test $test_case grpc-docker-testclients $client
+ log_file_name=cloud_{$test_case}_{$client}.txt
+ if grpc_cloud_prod_test $test_case grpc-docker-testclients $client > /tmp/$log_file_name 2>&1
then
- echo " ['$test_case', '$client', 'prod', true]," >> /tmp/cloud_prod_result.txt
+ gsutil cp /tmp/$log_file_name gs://stoked-keyword-656-output/log_history/$log_file_name
+ echo " ['$test_case', '$client', 'prod', true, '<a href="$log_link/$log_file_name">log</a>']," >> /tmp/cloud_prod_result.txt
else
- echo " ['$test_case', '$client', 'prod', false]," >> /tmp/cloud_prod_result.txt
+ gsutil cp /tmp/$log_file_name gs://stoked-keyword-656-output/log_history/$log_file_name
+ echo " ['$test_case', '$client', 'prod', false, '<a href="$log_link/$log_file_name">log</a>']," >> /tmp/cloud_prod_result.txt
fi
done
done
@@ -54,11 +58,14 @@ main() {
do
for client in "${clients[@]}"
do
- if grpc_cloud_prod_auth_test $test_case grpc-docker-testclients $client
+ log_file_name=cloud_{$test_case}_{$client}.txt
+ if grpc_cloud_prod_auth_test $test_case grpc-docker-testclients $client > /tmp/$log_file_name 2>&1
then
- echo " ['$test_case', '$client', 'prod', true]," >> /tmp/cloud_prod_result.txt
+ gsutil cp /tmp/$log_file_name gs://stoked-keyword-656-output/log_history/$log_file_name
+ echo " ['$test_case', '$client', 'prod', true, '<a href="$log_link/$log_file_name">log</a>']," >> /tmp/cloud_prod_result.txt
else
- echo " ['$test_case', '$client', 'prod', false]," >> /tmp/cloud_prod_result.txt
+ gsutil cp /tmp/$log_file_name gs://stoked-keyword-656-output/log_history/$log_file_name
+ echo " ['$test_case', '$client', 'prod', false, '<a href="$log_link/$log_file_name">log</a>']," >> /tmp/cloud_prod_result.txt
fi
done
done
@@ -69,6 +76,7 @@ main() {
gsutil cp /tmp/cloud_prod_result.html gs://stoked-keyword-656-output/result_history/$result_file_name
rm /tmp/cloud_prod_result.txt
rm /tmp/cloud_prod_result.html
+ rm /tmp/cloud*.txt
fi
}
diff --git a/tools/gce_setup/grpc_docker.sh b/tools/gce_setup/grpc_docker.sh
index c68903b816..c8481c4211 100755
--- a/tools/gce_setup/grpc_docker.sh
+++ b/tools/gce_setup/grpc_docker.sh
@@ -1041,6 +1041,19 @@ grpc_interop_gen_python_cmd() {
echo $the_cmd
}
+# constructs the full dockerized python interop test cmd.
+#
+# call-seq:
+# flags= .... # generic flags to include the command
+# cmd=$($grpc_gen_test_cmd $flags)
+grpc_cloud_prod_gen_python_cmd() {
+ local cmd_prefix="sudo docker run grpc/python bin/bash -l -c"
+ local gfe_flags=$(_grpc_prod_gfe_flags)
+ local env_prefix="SSL_CERT_FILE=/cacerts/roots.pem"
+ local the_cmd="$cmd_prefix '$env_prefix python -B -m interop.client --use_tls $gfe_flags $@'"
+ echo $the_cmd
+}
+
# constructs the full dockerized python service_account auth interop test cmd.
#
# call-seq:
@@ -1070,7 +1083,7 @@ grpc_cloud_prod_auth_compute_engine_creds_gen_python_cmd() {
echo $the_cmd
}
-# constructs the full dockerized java interop test cmd.
+# constructs the full dockerized ruby interop test cmd.
#
# call-seq:
# flags= .... # generic flags to include the command
@@ -1150,6 +1163,23 @@ grpc_cloud_prod_auth_compute_engine_creds_gen_ruby_cmd() {
echo $the_cmd
}
+# constructs the full dockerized ruby jwt_tokens auth interop test cmd.
+#
+# call-seq:
+# flags= .... # generic flags to include the command
+# cmd=$($grpc_gen_test_cmd $flags)
+grpc_cloud_prod_auth_jwt_token_creds_gen_ruby_cmd() {
+ local cmd_prefix="sudo docker run grpc/ruby bin/bash -l -c";
+ local test_script="/var/local/git/grpc/src/ruby/bin/interop/interop_client.rb"
+ local test_script+=" --use_tls"
+ local gfe_flags=$(_grpc_prod_gfe_flags)
+ local added_gfe_flags=$(_grpc_jwt_token_test_flags)
+ local env_prefix="SSL_CERT_FILE=/cacerts/roots.pem"
+ env_prefix+=" GOOGLE_APPLICATION_CREDENTIALS=/service_account/stubbyCloudTestingTest-7dd63462c60c.json"
+ local the_cmd="$cmd_prefix '$env_prefix ruby $test_script $gfe_flags $added_gfe_flags $@'"
+ echo $the_cmd
+}
+
# constructs the full dockerized Go interop test cmd.
#
# call-seq:
diff --git a/tools/gce_setup/interop_test_runner.sh b/tools/gce_setup/interop_test_runner.sh
index 1c6122e9ae..b9f026e545 100755
--- a/tools/gce_setup/interop_test_runner.sh
+++ b/tools/gce_setup/interop_test_runner.sh
@@ -32,6 +32,7 @@ thisfile=$(readlink -ne "${BASH_SOURCE[0]}")
current_time=$(date "+%Y-%m-%d-%H-%M-%S")
result_file_name=interop_result.$current_time.html
echo $result_file_name
+log_link=https://pantheon.corp.google.com/m/cloudstorage/b/stoked-keyword-656-output/o/log_history
main() {
source grpc_docker.sh
@@ -44,11 +45,14 @@ main() {
do
for server in "${servers[@]}"
do
- if grpc_interop_test $test_case grpc-docker-testclients $client grpc-docker-server $server
+ log_file_name=interop_{$test_case}_{$client}_{$server}.txt
+ if grpc_interop_test $test_case grpc-docker-testclients $client grpc-docker-server $server > /tmp/$log_file_name 2>&1
then
- echo " ['$test_case', '$client', '$server', true]," >> /tmp/interop_result.txt
+ gsutil cp /tmp/$log_file_name gs://stoked-keyword-656-output/log_history/$log_file_name
+ echo " ['$test_case', '$client', '$server', true, '<a href="$log_link/$log_file_name">log</a>']," >> /tmp/interop_result.txt
else
- echo " ['$test_case', '$client', '$server', false]," >> /tmp/interop_result.txt
+ gsutil cp /tmp/$log_file_name gs://stoked-keyword-656-output/log_history/$log_file_name
+ echo " ['$test_case', '$client', '$server', false, '<a href="$log_link/$log_file_name">log</a>']," >> /tmp/interop_result.txt
fi
done
done
@@ -60,6 +64,7 @@ main() {
gsutil cp /tmp/interop_result.html gs://stoked-keyword-656-output/result_history/$result_file_name
rm /tmp/interop_result.txt
rm /tmp/interop_result.html
+ rm /tmp/interop*.txt
fi
}
diff --git a/tools/gce_setup/post.html b/tools/gce_setup/post.html
index 57cbc8c369..2cea050c08 100644
--- a/tools/gce_setup/post.html
+++ b/tools/gce_setup/post.html
@@ -1,8 +1,7 @@
]);
var table = new google.visualization.Table(document.getElementById('table_div'));
-
- table.draw(data, {showRowNumber: true});
+ table.draw(data, {showRowNumber: true, allowHtml: true});
}
</script>
</head>
diff --git a/tools/gce_setup/pre.html b/tools/gce_setup/pre.html
index 74ce5ce202..79aa8fa394 100644
--- a/tools/gce_setup/pre.html
+++ b/tools/gce_setup/pre.html
@@ -11,4 +11,5 @@
data.addColumn('string', 'Client');
data.addColumn('string', 'Server');
data.addColumn('boolean', 'Pass');
+ data.addColumn('string', 'LogLink');
data.addRows([
diff --git a/tools/run_tests/jobset.py b/tools/run_tests/jobset.py
index 81cdd0e6e4..efe040aeb6 100755
--- a/tools/run_tests/jobset.py
+++ b/tools/run_tests/jobset.py
@@ -32,6 +32,7 @@
import hashlib
import multiprocessing
import os
+import platform
import random
import signal
import subprocess
@@ -43,17 +44,19 @@ import time
_DEFAULT_MAX_JOBS = 16 * multiprocessing.cpu_count()
-have_alarm = False
-def alarm_handler(unused_signum, unused_frame):
- global have_alarm
- have_alarm = False
-
-
# setup a signal handler so that signal.pause registers 'something'
# when a child finishes
# not using futures and threading to avoid a dependency on subprocess32
-signal.signal(signal.SIGCHLD, lambda unused_signum, unused_frame: None)
-signal.signal(signal.SIGALRM, alarm_handler)
+if platform.system() == "Windows":
+ pass
+else:
+ have_alarm = False
+ def alarm_handler(unused_signum, unused_frame):
+ global have_alarm
+ have_alarm = False
+
+ signal.signal(signal.SIGCHLD, lambda unused_signum, unused_frame: None)
+ signal.signal(signal.SIGALRM, alarm_handler)
def shuffle_iteratable(it):
@@ -109,6 +112,11 @@ _TAG_COLOR = {
def message(tag, message, explanatory_text=None, do_newline=False):
+ if platform.system() == 'Windows':
+ if explanatory_text:
+ print explanatory_text
+ print '%s: %s' % (tag, message)
+ return
try:
sys.stdout.write('%s%s%s\x1b[%d;%dm%s\x1b[0m: %s%s' % (
_BEGINNING_OF_LINE,
@@ -136,7 +144,7 @@ def which(filename):
class JobSpec(object):
"""Specifies what to run for a job."""
- def __init__(self, cmdline, shortname=None, environ=None, hash_targets=None):
+ def __init__(self, cmdline, shortname=None, environ=None, hash_targets=None, cwd=None):
"""
Arguments:
cmdline: a list of arguments to pass as the command line
@@ -152,6 +160,7 @@ class JobSpec(object):
self.environ = environ
self.shortname = cmdline[0] if shortname is None else shortname
self.hash_targets = hash_targets or []
+ self.cwd = cwd
def identity(self):
return '%r %r %r' % (self.cmdline, self.environ, self.hash_targets)
@@ -177,6 +186,7 @@ class Job(object):
self._process = subprocess.Popen(args=spec.cmdline,
stderr=subprocess.STDOUT,
stdout=self._tempfile,
+ cwd=spec.cwd,
env=env)
self._state = _RUNNING
self._newline_on_success = newline_on_success
@@ -241,10 +251,15 @@ class Jobset(object):
bin_hash = None
should_run = True
if should_run:
- self._running.add(Job(spec,
- bin_hash,
- self._newline_on_success,
- self._travis))
+ try:
+ self._running.add(Job(spec,
+ bin_hash,
+ self._newline_on_success,
+ self._travis))
+ except:
+ message('FAILED', spec.shortname)
+ self._cancelled = True
+ return False
return True
def reap(self):
@@ -264,11 +279,14 @@ class Jobset(object):
if (not self._travis):
message('WAITING', '%d jobs running, %d complete, %d failed' % (
len(self._running), self._completed, self._failures))
- global have_alarm
- if not have_alarm:
- have_alarm = True
- signal.alarm(10)
- signal.pause()
+ if platform.system() == 'Windows':
+ time.sleep(0.1)
+ else:
+ global have_alarm
+ if not have_alarm:
+ have_alarm = True
+ signal.alarm(10)
+ signal.pause()
def cancelled(self):
"""Poll for cancellation."""
diff --git a/tools/run_tests/run_sanity.sh b/tools/run_tests/run_sanity.sh
new file mode 100755
index 0000000000..e915af93d4
--- /dev/null
+++ b/tools/run_tests/run_sanity.sh
@@ -0,0 +1,39 @@
+#!/bin/sh
+
+# 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 -e
+
+export TEST=true
+
+cd `dirname $0`/../..
+
+./tools/buildgen/generate_projects.sh
diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py
index 14ee1790c6..a443b17a97 100755
--- a/tools/run_tests/run_tests.py
+++ b/tools/run_tests/run_tests.py
@@ -39,6 +39,7 @@ import os
import re
import sys
import time
+import platform
import jobset
import watch_dirs
@@ -101,9 +102,16 @@ class CLanguage(object):
def __init__(self, make_target, test_lang):
self.make_target = make_target
+ if platform.system() == 'Windows':
+ plat = 'windows'
+ else:
+ plat = 'posix'
with open('tools/run_tests/tests.json') as f:
js = json.load(f)
- self.binaries = [tgt for tgt in js if tgt['language'] == test_lang]
+ self.binaries = [tgt
+ for tgt in js
+ if tgt['language'] == test_lang and
+ plat in tgt['platforms']]
def test_specs(self, config, travis):
out = []
@@ -190,6 +198,7 @@ class PythonLanguage(object):
def __str__(self):
return 'python'
+
class RubyLanguage(object):
def test_specs(self, config, travis):
@@ -207,6 +216,7 @@ class RubyLanguage(object):
def __str__(self):
return 'ruby'
+
class CSharpLanguage(object):
def test_specs(self, config, travis):
@@ -224,6 +234,25 @@ class CSharpLanguage(object):
def __str__(self):
return 'csharp'
+
+class Sanity(object):
+
+ def test_specs(self, config, travis):
+ return [config.job_spec('tools/run_tests/run_sanity.sh', None)]
+
+ def make_targets(self):
+ return ['run_dep_checks']
+
+ def build_steps(self):
+ return []
+
+ def supports_multi_config(self):
+ return False
+
+ def __str__(self):
+ return 'sanity'
+
+
class Build(object):
def test_specs(self, config, travis):
@@ -267,6 +296,7 @@ _LANGUAGES = {
'python': PythonLanguage(),
'ruby': RubyLanguage(),
'csharp': CSharpLanguage(),
+ 'sanity': Sanity(),
'build': Build(),
}
@@ -314,17 +344,27 @@ if len(build_configs) > 1:
print language, 'does not support multiple build configurations'
sys.exit(1)
-build_steps = [jobset.JobSpec(['make',
- '-j', '%d' % (multiprocessing.cpu_count() + 1),
- 'EXTRA_DEFINES=GRPC_TEST_SLOWDOWN_MACHINE_FACTOR=%f' % args.slowdown,
- 'CONFIG=%s' % cfg] + list(set(
- itertools.chain.from_iterable(
- l.make_targets() for l in languages))))
- for cfg in build_configs] + list(set(
+if platform.system() == 'Windows':
+ def make_jobspec(cfg, targets):
+ return jobset.JobSpec(['nmake', '/f', 'Grpc.mak', 'CONFIG=%s' % cfg] + targets,
+ cwd='vsprojects\\vs2013')
+else:
+ def make_jobspec(cfg, targets):
+ return jobset.JobSpec(['make',
+ '-j', '%d' % (multiprocessing.cpu_count() + 1),
+ 'EXTRA_DEFINES=GRPC_TEST_SLOWDOWN_MACHINE_FACTOR=%f' %
+ args.slowdown,
+ 'CONFIG=%s' % cfg] + targets)
+
+build_steps = [make_jobspec(cfg,
+ list(set(itertools.chain.from_iterable(
+ l.make_targets() for l in languages))))
+ for cfg in build_configs]
+build_steps.extend(set(
jobset.JobSpec(cmdline, environ={'CONFIG': cfg})
for cfg in build_configs
for l in languages
- for cmdline in l.build_steps()))
+ for cmdline in l.build_steps()))
one_run = set(
spec
for config in run_configs
diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json
index 05f5e47955..e284d1790f 100644
--- a/tools/run_tests/tests.json
+++ b/tools/run_tests/tests.json
@@ -4,2107 +4,3799 @@
{
"flaky": false,
"language": "c",
- "name": "alarm_heap_test"
+ "name": "alarm_heap_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "alarm_list_test"
+ "name": "alarm_list_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "alarm_test"
+ "name": "alarm_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "alpn_test"
+ "name": "alpn_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "bin_encoder_test"
+ "name": "bin_encoder_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "census_hash_table_test"
+ "name": "census_hash_table_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": true,
"language": "c",
- "name": "census_statistics_multiple_writers_circular_buffer_test"
+ "name": "census_statistics_multiple_writers_circular_buffer_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "census_statistics_multiple_writers_test"
+ "name": "census_statistics_multiple_writers_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "census_statistics_performance_test"
+ "name": "census_statistics_performance_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "census_statistics_quick_test"
+ "name": "census_statistics_quick_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": true,
"language": "c",
- "name": "census_statistics_small_log_test"
+ "name": "census_statistics_small_log_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "census_stub_test"
+ "name": "census_stub_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "census_window_stats_test"
+ "name": "census_window_stats_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_status_conversion_test"
+ "name": "chttp2_status_conversion_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_stream_encoder_test"
+ "name": "chttp2_stream_encoder_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_stream_map_test"
+ "name": "chttp2_stream_map_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_transport_end2end_test"
+ "name": "chttp2_transport_end2end_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "dualstack_socket_test"
+ "name": "dualstack_socket_test",
+ "platforms": [
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "echo_test"
+ "name": "echo_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "fd_posix_test"
+ "name": "fd_posix_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "fling_stream_test"
+ "name": "fling_stream_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "fling_test"
+ "name": "fling_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "gpr_cancellable_test"
+ "name": "gpr_cancellable_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "gpr_cmdline_test"
+ "name": "gpr_cmdline_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "gpr_env_test"
+ "name": "gpr_env_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "gpr_file_test"
+ "name": "gpr_file_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "gpr_histogram_test"
+ "name": "gpr_histogram_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "gpr_host_port_test"
+ "name": "gpr_host_port_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "gpr_log_test"
+ "name": "gpr_log_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "gpr_slice_buffer_test"
+ "name": "gpr_slice_buffer_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "gpr_slice_test"
+ "name": "gpr_slice_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "gpr_string_test"
+ "name": "gpr_string_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "gpr_sync_test"
+ "name": "gpr_sync_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "gpr_thd_test"
+ "name": "gpr_thd_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "gpr_time_test"
+ "name": "gpr_time_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "gpr_tls_test"
+ "name": "gpr_tls_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "gpr_useful_test"
+ "name": "gpr_useful_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "grpc_base64_test"
+ "name": "grpc_base64_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "grpc_byte_buffer_reader_test"
+ "name": "grpc_byte_buffer_reader_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "grpc_channel_stack_test"
+ "name": "grpc_channel_stack_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "grpc_completion_queue_test"
+ "name": "grpc_completion_queue_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "grpc_credentials_test"
+ "name": "grpc_credentials_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "grpc_json_token_test"
+ "name": "grpc_json_token_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "grpc_stream_op_test"
+ "name": "grpc_stream_op_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "hpack_parser_test"
+ "name": "hpack_parser_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "hpack_table_test"
+ "name": "hpack_table_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "httpcli_format_request_test"
+ "name": "httpcli_format_request_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "httpcli_parser_test"
+ "name": "httpcli_parser_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "json_rewrite_test"
+ "name": "json_rewrite_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "json_test"
+ "name": "json_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "lame_client_test"
+ "name": "lame_client_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "message_compress_test"
+ "name": "message_compress_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "metadata_buffer_test"
+ "name": "metadata_buffer_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "multi_init_test"
+ "name": "multi_init_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "murmur_hash_test"
+ "name": "murmur_hash_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "no_server_test"
+ "name": "no_server_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "poll_kick_posix_test"
+ "name": "poll_kick_posix_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "resolve_address_test"
+ "name": "resolve_address_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "secure_endpoint_test"
+ "name": "secure_endpoint_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "sockaddr_utils_test"
+ "name": "sockaddr_utils_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "tcp_client_posix_test"
+ "name": "tcp_client_posix_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "tcp_posix_test"
+ "name": "tcp_posix_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "tcp_server_posix_test"
+ "name": "tcp_server_posix_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "time_averaged_stats_test"
+ "name": "time_averaged_stats_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "time_test"
+ "name": "time_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "timeout_encoding_test"
+ "name": "timeout_encoding_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "transport_metadata_test"
+ "name": "timers_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "transport_security_test"
+ "name": "transport_metadata_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
+ },
+ {
+ "flaky": false,
+ "language": "c",
+ "name": "transport_security_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c++",
- "name": "async_end2end_test"
+ "name": "async_end2end_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c++",
- "name": "channel_arguments_test"
+ "name": "channel_arguments_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c++",
- "name": "cli_call_test"
+ "name": "cli_call_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c++",
- "name": "credentials_test"
+ "name": "credentials_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c++",
- "name": "cxx_time_test"
+ "name": "cxx_time_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c++",
- "name": "end2end_test"
+ "name": "end2end_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c++",
- "name": "generic_end2end_test"
+ "name": "generic_end2end_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c++",
- "name": "interop_test"
+ "name": "interop_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c++",
- "name": "status_test"
+ "name": "status_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c++",
- "name": "thread_pool_test"
+ "name": "thread_pool_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_bad_hostname_test"
+ "name": "chttp2_fake_security_bad_hostname_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_cancel_after_accept_test"
+ "name": "chttp2_fake_security_cancel_after_accept_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_cancel_after_accept_and_writes_closed_test"
+ "name": "chttp2_fake_security_cancel_after_accept_and_writes_closed_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_cancel_after_invoke_test"
+ "name": "chttp2_fake_security_cancel_after_invoke_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_cancel_before_invoke_test"
+ "name": "chttp2_fake_security_cancel_before_invoke_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_cancel_in_a_vacuum_test"
+ "name": "chttp2_fake_security_cancel_in_a_vacuum_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_census_simple_request_test"
+ "name": "chttp2_fake_security_census_simple_request_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_disappearing_server_test"
+ "name": "chttp2_fake_security_disappearing_server_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_early_server_shutdown_finishes_inflight_calls_test"
+ "name": "chttp2_fake_security_early_server_shutdown_finishes_inflight_calls_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_early_server_shutdown_finishes_tags_test"
+ "name": "chttp2_fake_security_early_server_shutdown_finishes_tags_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_empty_batch_test"
+ "name": "chttp2_fake_security_empty_batch_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_graceful_server_shutdown_test"
+ "name": "chttp2_fake_security_graceful_server_shutdown_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_invoke_large_request_test"
+ "name": "chttp2_fake_security_invoke_large_request_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_max_concurrent_streams_test"
+ "name": "chttp2_fake_security_max_concurrent_streams_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_no_op_test"
+ "name": "chttp2_fake_security_no_op_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_ping_pong_streaming_test"
+ "name": "chttp2_fake_security_ping_pong_streaming_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_request_response_with_binary_metadata_and_payload_test"
+ "name": "chttp2_fake_security_request_response_with_binary_metadata_and_payload_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_request_response_with_metadata_and_payload_test"
+ "name": "chttp2_fake_security_request_response_with_metadata_and_payload_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_request_response_with_payload_test"
+ "name": "chttp2_fake_security_request_response_with_payload_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_request_with_large_metadata_test"
+ "name": "chttp2_fake_security_request_with_large_metadata_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_request_with_payload_test"
+ "name": "chttp2_fake_security_request_with_payload_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_simple_delayed_request_test"
+ "name": "chttp2_fake_security_simple_delayed_request_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_simple_request_test"
+ "name": "chttp2_fake_security_simple_request_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_thread_stress_test"
+ "name": "chttp2_fake_security_thread_stress_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_writes_done_hangs_with_pending_read_test"
+ "name": "chttp2_fake_security_writes_done_hangs_with_pending_read_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_cancel_after_accept_legacy_test"
+ "name": "chttp2_fake_security_cancel_after_accept_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_cancel_after_accept_and_writes_closed_legacy_test"
+ "name": "chttp2_fake_security_cancel_after_accept_and_writes_closed_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_cancel_after_invoke_legacy_test"
+ "name": "chttp2_fake_security_cancel_after_invoke_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_cancel_before_invoke_legacy_test"
+ "name": "chttp2_fake_security_cancel_before_invoke_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_cancel_in_a_vacuum_legacy_test"
+ "name": "chttp2_fake_security_cancel_in_a_vacuum_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_census_simple_request_legacy_test"
+ "name": "chttp2_fake_security_census_simple_request_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_disappearing_server_legacy_test"
+ "name": "chttp2_fake_security_disappearing_server_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_early_server_shutdown_finishes_inflight_calls_legacy_test"
+ "name": "chttp2_fake_security_early_server_shutdown_finishes_inflight_calls_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_early_server_shutdown_finishes_tags_legacy_test"
+ "name": "chttp2_fake_security_early_server_shutdown_finishes_tags_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_graceful_server_shutdown_legacy_test"
+ "name": "chttp2_fake_security_graceful_server_shutdown_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_invoke_large_request_legacy_test"
+ "name": "chttp2_fake_security_invoke_large_request_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_max_concurrent_streams_legacy_test"
+ "name": "chttp2_fake_security_max_concurrent_streams_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_no_op_legacy_test"
+ "name": "chttp2_fake_security_no_op_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_ping_pong_streaming_legacy_test"
+ "name": "chttp2_fake_security_ping_pong_streaming_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_request_response_with_binary_metadata_and_payload_legacy_test"
+ "name": "chttp2_fake_security_request_response_with_binary_metadata_and_payload_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_request_response_with_metadata_and_payload_legacy_test"
+ "name": "chttp2_fake_security_request_response_with_metadata_and_payload_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_request_response_with_payload_legacy_test"
+ "name": "chttp2_fake_security_request_response_with_payload_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_request_response_with_trailing_metadata_and_payload_legacy_test"
+ "name": "chttp2_fake_security_request_response_with_trailing_metadata_and_payload_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_request_with_large_metadata_legacy_test"
+ "name": "chttp2_fake_security_request_with_large_metadata_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_request_with_payload_legacy_test"
+ "name": "chttp2_fake_security_request_with_payload_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_simple_delayed_request_legacy_test"
+ "name": "chttp2_fake_security_simple_delayed_request_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_simple_request_legacy_test"
+ "name": "chttp2_fake_security_simple_request_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_thread_stress_legacy_test"
+ "name": "chttp2_fake_security_thread_stress_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fake_security_writes_done_hangs_with_pending_read_legacy_test"
+ "name": "chttp2_fake_security_writes_done_hangs_with_pending_read_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_bad_hostname_test"
+ "name": "chttp2_fullstack_bad_hostname_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_cancel_after_accept_test"
+ "name": "chttp2_fullstack_cancel_after_accept_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_cancel_after_accept_and_writes_closed_test"
+ "name": "chttp2_fullstack_cancel_after_accept_and_writes_closed_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_cancel_after_invoke_test"
+ "name": "chttp2_fullstack_cancel_after_invoke_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_cancel_before_invoke_test"
+ "name": "chttp2_fullstack_cancel_before_invoke_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_cancel_in_a_vacuum_test"
+ "name": "chttp2_fullstack_cancel_in_a_vacuum_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_census_simple_request_test"
+ "name": "chttp2_fullstack_census_simple_request_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_disappearing_server_test"
+ "name": "chttp2_fullstack_disappearing_server_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_early_server_shutdown_finishes_inflight_calls_test"
+ "name": "chttp2_fullstack_early_server_shutdown_finishes_inflight_calls_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_early_server_shutdown_finishes_tags_test"
+ "name": "chttp2_fullstack_early_server_shutdown_finishes_tags_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_empty_batch_test"
+ "name": "chttp2_fullstack_empty_batch_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_graceful_server_shutdown_test"
+ "name": "chttp2_fullstack_graceful_server_shutdown_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_invoke_large_request_test"
+ "name": "chttp2_fullstack_invoke_large_request_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_max_concurrent_streams_test"
+ "name": "chttp2_fullstack_max_concurrent_streams_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_no_op_test"
+ "name": "chttp2_fullstack_no_op_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_ping_pong_streaming_test"
+ "name": "chttp2_fullstack_ping_pong_streaming_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_request_response_with_binary_metadata_and_payload_test"
+ "name": "chttp2_fullstack_request_response_with_binary_metadata_and_payload_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_request_response_with_metadata_and_payload_test"
+ "name": "chttp2_fullstack_request_response_with_metadata_and_payload_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_request_response_with_payload_test"
+ "name": "chttp2_fullstack_request_response_with_payload_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_request_with_large_metadata_test"
+ "name": "chttp2_fullstack_request_with_large_metadata_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_request_with_payload_test"
+ "name": "chttp2_fullstack_request_with_payload_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_simple_delayed_request_test"
+ "name": "chttp2_fullstack_simple_delayed_request_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_simple_request_test"
+ "name": "chttp2_fullstack_simple_request_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_thread_stress_test"
+ "name": "chttp2_fullstack_thread_stress_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_writes_done_hangs_with_pending_read_test"
+ "name": "chttp2_fullstack_writes_done_hangs_with_pending_read_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_cancel_after_accept_legacy_test"
+ "name": "chttp2_fullstack_cancel_after_accept_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_cancel_after_accept_and_writes_closed_legacy_test"
+ "name": "chttp2_fullstack_cancel_after_accept_and_writes_closed_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_cancel_after_invoke_legacy_test"
+ "name": "chttp2_fullstack_cancel_after_invoke_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_cancel_before_invoke_legacy_test"
+ "name": "chttp2_fullstack_cancel_before_invoke_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_cancel_in_a_vacuum_legacy_test"
+ "name": "chttp2_fullstack_cancel_in_a_vacuum_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_census_simple_request_legacy_test"
+ "name": "chttp2_fullstack_census_simple_request_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_disappearing_server_legacy_test"
+ "name": "chttp2_fullstack_disappearing_server_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_early_server_shutdown_finishes_inflight_calls_legacy_test"
+ "name": "chttp2_fullstack_early_server_shutdown_finishes_inflight_calls_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_early_server_shutdown_finishes_tags_legacy_test"
+ "name": "chttp2_fullstack_early_server_shutdown_finishes_tags_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_graceful_server_shutdown_legacy_test"
+ "name": "chttp2_fullstack_graceful_server_shutdown_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_invoke_large_request_legacy_test"
+ "name": "chttp2_fullstack_invoke_large_request_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_max_concurrent_streams_legacy_test"
+ "name": "chttp2_fullstack_max_concurrent_streams_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_no_op_legacy_test"
+ "name": "chttp2_fullstack_no_op_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_ping_pong_streaming_legacy_test"
+ "name": "chttp2_fullstack_ping_pong_streaming_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_request_response_with_binary_metadata_and_payload_legacy_test"
+ "name": "chttp2_fullstack_request_response_with_binary_metadata_and_payload_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_request_response_with_metadata_and_payload_legacy_test"
+ "name": "chttp2_fullstack_request_response_with_metadata_and_payload_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_request_response_with_payload_legacy_test"
+ "name": "chttp2_fullstack_request_response_with_payload_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_request_response_with_trailing_metadata_and_payload_legacy_test"
+ "name": "chttp2_fullstack_request_response_with_trailing_metadata_and_payload_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_request_with_large_metadata_legacy_test"
+ "name": "chttp2_fullstack_request_with_large_metadata_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_request_with_payload_legacy_test"
+ "name": "chttp2_fullstack_request_with_payload_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_simple_delayed_request_legacy_test"
+ "name": "chttp2_fullstack_simple_delayed_request_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_simple_request_legacy_test"
+ "name": "chttp2_fullstack_simple_request_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_thread_stress_legacy_test"
+ "name": "chttp2_fullstack_thread_stress_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_writes_done_hangs_with_pending_read_legacy_test"
+ "name": "chttp2_fullstack_writes_done_hangs_with_pending_read_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_bad_hostname_test"
+ "name": "chttp2_fullstack_uds_bad_hostname_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_cancel_after_accept_test"
+ "name": "chttp2_fullstack_uds_cancel_after_accept_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_cancel_after_accept_and_writes_closed_test"
+ "name": "chttp2_fullstack_uds_cancel_after_accept_and_writes_closed_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_cancel_after_invoke_test"
+ "name": "chttp2_fullstack_uds_cancel_after_invoke_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_cancel_before_invoke_test"
+ "name": "chttp2_fullstack_uds_cancel_before_invoke_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_cancel_in_a_vacuum_test"
+ "name": "chttp2_fullstack_uds_cancel_in_a_vacuum_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_census_simple_request_test"
+ "name": "chttp2_fullstack_uds_census_simple_request_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_disappearing_server_test"
+ "name": "chttp2_fullstack_uds_disappearing_server_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_early_server_shutdown_finishes_inflight_calls_test"
+ "name": "chttp2_fullstack_uds_early_server_shutdown_finishes_inflight_calls_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_early_server_shutdown_finishes_tags_test"
+ "name": "chttp2_fullstack_uds_early_server_shutdown_finishes_tags_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_empty_batch_test"
+ "name": "chttp2_fullstack_uds_empty_batch_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_graceful_server_shutdown_test"
+ "name": "chttp2_fullstack_uds_graceful_server_shutdown_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_invoke_large_request_test"
+ "name": "chttp2_fullstack_uds_invoke_large_request_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_max_concurrent_streams_test"
+ "name": "chttp2_fullstack_uds_max_concurrent_streams_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_no_op_test"
+ "name": "chttp2_fullstack_uds_no_op_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_ping_pong_streaming_test"
+ "name": "chttp2_fullstack_uds_ping_pong_streaming_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_request_response_with_binary_metadata_and_payload_test"
+ "name": "chttp2_fullstack_uds_request_response_with_binary_metadata_and_payload_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_request_response_with_metadata_and_payload_test"
+ "name": "chttp2_fullstack_uds_request_response_with_metadata_and_payload_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_request_response_with_payload_test"
+ "name": "chttp2_fullstack_uds_request_response_with_payload_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_request_with_large_metadata_test"
+ "name": "chttp2_fullstack_uds_request_with_large_metadata_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_request_with_payload_test"
+ "name": "chttp2_fullstack_uds_request_with_payload_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_simple_delayed_request_test"
+ "name": "chttp2_fullstack_uds_simple_delayed_request_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_simple_request_test"
+ "name": "chttp2_fullstack_uds_simple_request_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_thread_stress_test"
+ "name": "chttp2_fullstack_uds_thread_stress_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_writes_done_hangs_with_pending_read_test"
+ "name": "chttp2_fullstack_uds_writes_done_hangs_with_pending_read_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_cancel_after_accept_legacy_test"
+ "name": "chttp2_fullstack_uds_cancel_after_accept_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_cancel_after_accept_and_writes_closed_legacy_test"
+ "name": "chttp2_fullstack_uds_cancel_after_accept_and_writes_closed_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_cancel_after_invoke_legacy_test"
+ "name": "chttp2_fullstack_uds_cancel_after_invoke_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_cancel_before_invoke_legacy_test"
+ "name": "chttp2_fullstack_uds_cancel_before_invoke_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_cancel_in_a_vacuum_legacy_test"
+ "name": "chttp2_fullstack_uds_cancel_in_a_vacuum_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_census_simple_request_legacy_test"
+ "name": "chttp2_fullstack_uds_census_simple_request_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_disappearing_server_legacy_test"
+ "name": "chttp2_fullstack_uds_disappearing_server_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_early_server_shutdown_finishes_inflight_calls_legacy_test"
+ "name": "chttp2_fullstack_uds_early_server_shutdown_finishes_inflight_calls_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_early_server_shutdown_finishes_tags_legacy_test"
+ "name": "chttp2_fullstack_uds_early_server_shutdown_finishes_tags_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_graceful_server_shutdown_legacy_test"
+ "name": "chttp2_fullstack_uds_graceful_server_shutdown_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_invoke_large_request_legacy_test"
+ "name": "chttp2_fullstack_uds_invoke_large_request_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_max_concurrent_streams_legacy_test"
+ "name": "chttp2_fullstack_uds_max_concurrent_streams_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_no_op_legacy_test"
+ "name": "chttp2_fullstack_uds_no_op_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_ping_pong_streaming_legacy_test"
+ "name": "chttp2_fullstack_uds_ping_pong_streaming_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_request_response_with_binary_metadata_and_payload_legacy_test"
+ "name": "chttp2_fullstack_uds_request_response_with_binary_metadata_and_payload_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_request_response_with_metadata_and_payload_legacy_test"
+ "name": "chttp2_fullstack_uds_request_response_with_metadata_and_payload_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_request_response_with_payload_legacy_test"
+ "name": "chttp2_fullstack_uds_request_response_with_payload_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_request_response_with_trailing_metadata_and_payload_legacy_test"
+ "name": "chttp2_fullstack_uds_request_response_with_trailing_metadata_and_payload_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_request_with_large_metadata_legacy_test"
+ "name": "chttp2_fullstack_uds_request_with_large_metadata_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_request_with_payload_legacy_test"
+ "name": "chttp2_fullstack_uds_request_with_payload_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_simple_delayed_request_legacy_test"
+ "name": "chttp2_fullstack_uds_simple_delayed_request_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_simple_request_legacy_test"
+ "name": "chttp2_fullstack_uds_simple_request_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_thread_stress_legacy_test"
+ "name": "chttp2_fullstack_uds_thread_stress_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_fullstack_uds_writes_done_hangs_with_pending_read_legacy_test"
+ "name": "chttp2_fullstack_uds_writes_done_hangs_with_pending_read_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_bad_hostname_test"
+ "name": "chttp2_simple_ssl_fullstack_bad_hostname_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_cancel_after_accept_test"
+ "name": "chttp2_simple_ssl_fullstack_cancel_after_accept_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_cancel_after_accept_and_writes_closed_test"
+ "name": "chttp2_simple_ssl_fullstack_cancel_after_accept_and_writes_closed_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_cancel_after_invoke_test"
+ "name": "chttp2_simple_ssl_fullstack_cancel_after_invoke_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_cancel_before_invoke_test"
+ "name": "chttp2_simple_ssl_fullstack_cancel_before_invoke_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_cancel_in_a_vacuum_test"
+ "name": "chttp2_simple_ssl_fullstack_cancel_in_a_vacuum_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_census_simple_request_test"
+ "name": "chttp2_simple_ssl_fullstack_census_simple_request_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_disappearing_server_test"
+ "name": "chttp2_simple_ssl_fullstack_disappearing_server_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_inflight_calls_test"
+ "name": "chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_inflight_calls_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_tags_test"
+ "name": "chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_tags_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_empty_batch_test"
+ "name": "chttp2_simple_ssl_fullstack_empty_batch_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_graceful_server_shutdown_test"
+ "name": "chttp2_simple_ssl_fullstack_graceful_server_shutdown_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_invoke_large_request_test"
+ "name": "chttp2_simple_ssl_fullstack_invoke_large_request_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_max_concurrent_streams_test"
+ "name": "chttp2_simple_ssl_fullstack_max_concurrent_streams_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_no_op_test"
+ "name": "chttp2_simple_ssl_fullstack_no_op_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_ping_pong_streaming_test"
+ "name": "chttp2_simple_ssl_fullstack_ping_pong_streaming_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_request_response_with_binary_metadata_and_payload_test"
+ "name": "chttp2_simple_ssl_fullstack_request_response_with_binary_metadata_and_payload_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_request_response_with_metadata_and_payload_test"
+ "name": "chttp2_simple_ssl_fullstack_request_response_with_metadata_and_payload_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_request_response_with_payload_test"
+ "name": "chttp2_simple_ssl_fullstack_request_response_with_payload_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_request_with_large_metadata_test"
+ "name": "chttp2_simple_ssl_fullstack_request_with_large_metadata_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_request_with_payload_test"
+ "name": "chttp2_simple_ssl_fullstack_request_with_payload_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_simple_delayed_request_test"
+ "name": "chttp2_simple_ssl_fullstack_simple_delayed_request_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_simple_request_test"
+ "name": "chttp2_simple_ssl_fullstack_simple_request_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_thread_stress_test"
+ "name": "chttp2_simple_ssl_fullstack_thread_stress_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_writes_done_hangs_with_pending_read_test"
+ "name": "chttp2_simple_ssl_fullstack_writes_done_hangs_with_pending_read_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_cancel_after_accept_legacy_test"
+ "name": "chttp2_simple_ssl_fullstack_cancel_after_accept_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_cancel_after_accept_and_writes_closed_legacy_test"
+ "name": "chttp2_simple_ssl_fullstack_cancel_after_accept_and_writes_closed_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_cancel_after_invoke_legacy_test"
+ "name": "chttp2_simple_ssl_fullstack_cancel_after_invoke_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_cancel_before_invoke_legacy_test"
+ "name": "chttp2_simple_ssl_fullstack_cancel_before_invoke_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_cancel_in_a_vacuum_legacy_test"
+ "name": "chttp2_simple_ssl_fullstack_cancel_in_a_vacuum_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_census_simple_request_legacy_test"
+ "name": "chttp2_simple_ssl_fullstack_census_simple_request_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_disappearing_server_legacy_test"
+ "name": "chttp2_simple_ssl_fullstack_disappearing_server_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_inflight_calls_legacy_test"
+ "name": "chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_inflight_calls_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_tags_legacy_test"
+ "name": "chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_tags_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_graceful_server_shutdown_legacy_test"
+ "name": "chttp2_simple_ssl_fullstack_graceful_server_shutdown_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_invoke_large_request_legacy_test"
+ "name": "chttp2_simple_ssl_fullstack_invoke_large_request_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_max_concurrent_streams_legacy_test"
+ "name": "chttp2_simple_ssl_fullstack_max_concurrent_streams_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_no_op_legacy_test"
+ "name": "chttp2_simple_ssl_fullstack_no_op_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_ping_pong_streaming_legacy_test"
+ "name": "chttp2_simple_ssl_fullstack_ping_pong_streaming_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_request_response_with_binary_metadata_and_payload_legacy_test"
+ "name": "chttp2_simple_ssl_fullstack_request_response_with_binary_metadata_and_payload_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_request_response_with_metadata_and_payload_legacy_test"
+ "name": "chttp2_simple_ssl_fullstack_request_response_with_metadata_and_payload_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_request_response_with_payload_legacy_test"
+ "name": "chttp2_simple_ssl_fullstack_request_response_with_payload_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_request_response_with_trailing_metadata_and_payload_legacy_test"
+ "name": "chttp2_simple_ssl_fullstack_request_response_with_trailing_metadata_and_payload_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_request_with_large_metadata_legacy_test"
+ "name": "chttp2_simple_ssl_fullstack_request_with_large_metadata_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_request_with_payload_legacy_test"
+ "name": "chttp2_simple_ssl_fullstack_request_with_payload_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_simple_delayed_request_legacy_test"
+ "name": "chttp2_simple_ssl_fullstack_simple_delayed_request_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_simple_request_legacy_test"
+ "name": "chttp2_simple_ssl_fullstack_simple_request_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_thread_stress_legacy_test"
+ "name": "chttp2_simple_ssl_fullstack_thread_stress_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_fullstack_writes_done_hangs_with_pending_read_legacy_test"
+ "name": "chttp2_simple_ssl_fullstack_writes_done_hangs_with_pending_read_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_bad_hostname_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_bad_hostname_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_and_writes_closed_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_and_writes_closed_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_invoke_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_invoke_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_cancel_before_invoke_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_cancel_before_invoke_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_cancel_in_a_vacuum_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_cancel_in_a_vacuum_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_census_simple_request_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_census_simple_request_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_disappearing_server_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_disappearing_server_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_inflight_calls_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_inflight_calls_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_tags_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_tags_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_empty_batch_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_empty_batch_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_graceful_server_shutdown_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_graceful_server_shutdown_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_invoke_large_request_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_invoke_large_request_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_max_concurrent_streams_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_max_concurrent_streams_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_no_op_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_no_op_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_ping_pong_streaming_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_ping_pong_streaming_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_binary_metadata_and_payload_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_binary_metadata_and_payload_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_metadata_and_payload_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_metadata_and_payload_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_payload_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_payload_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_request_with_large_metadata_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_request_with_large_metadata_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_request_with_payload_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_request_with_payload_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_simple_delayed_request_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_simple_delayed_request_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_simple_request_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_simple_request_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_thread_stress_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_thread_stress_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_writes_done_hangs_with_pending_read_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_writes_done_hangs_with_pending_read_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_legacy_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_and_writes_closed_legacy_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_and_writes_closed_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_invoke_legacy_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_invoke_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_cancel_before_invoke_legacy_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_cancel_before_invoke_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_cancel_in_a_vacuum_legacy_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_cancel_in_a_vacuum_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_census_simple_request_legacy_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_census_simple_request_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_disappearing_server_legacy_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_disappearing_server_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_inflight_calls_legacy_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_inflight_calls_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_tags_legacy_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_tags_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_graceful_server_shutdown_legacy_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_graceful_server_shutdown_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_invoke_large_request_legacy_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_invoke_large_request_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_max_concurrent_streams_legacy_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_max_concurrent_streams_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_no_op_legacy_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_no_op_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_ping_pong_streaming_legacy_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_ping_pong_streaming_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_binary_metadata_and_payload_legacy_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_binary_metadata_and_payload_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_metadata_and_payload_legacy_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_metadata_and_payload_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_payload_legacy_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_payload_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_trailing_metadata_and_payload_legacy_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_trailing_metadata_and_payload_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_request_with_large_metadata_legacy_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_request_with_large_metadata_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_request_with_payload_legacy_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_request_with_payload_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_simple_delayed_request_legacy_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_simple_delayed_request_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_simple_request_legacy_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_simple_request_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_thread_stress_legacy_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_thread_stress_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_simple_ssl_with_oauth2_fullstack_writes_done_hangs_with_pending_read_legacy_test"
+ "name": "chttp2_simple_ssl_with_oauth2_fullstack_writes_done_hangs_with_pending_read_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_bad_hostname_test"
+ "name": "chttp2_socket_pair_bad_hostname_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_cancel_after_accept_test"
+ "name": "chttp2_socket_pair_cancel_after_accept_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_cancel_after_accept_and_writes_closed_test"
+ "name": "chttp2_socket_pair_cancel_after_accept_and_writes_closed_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_cancel_after_invoke_test"
+ "name": "chttp2_socket_pair_cancel_after_invoke_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_cancel_before_invoke_test"
+ "name": "chttp2_socket_pair_cancel_before_invoke_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_cancel_in_a_vacuum_test"
+ "name": "chttp2_socket_pair_cancel_in_a_vacuum_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_census_simple_request_test"
+ "name": "chttp2_socket_pair_census_simple_request_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_disappearing_server_test"
+ "name": "chttp2_socket_pair_disappearing_server_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_early_server_shutdown_finishes_inflight_calls_test"
+ "name": "chttp2_socket_pair_early_server_shutdown_finishes_inflight_calls_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_early_server_shutdown_finishes_tags_test"
+ "name": "chttp2_socket_pair_early_server_shutdown_finishes_tags_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_empty_batch_test"
+ "name": "chttp2_socket_pair_empty_batch_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_graceful_server_shutdown_test"
+ "name": "chttp2_socket_pair_graceful_server_shutdown_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_invoke_large_request_test"
+ "name": "chttp2_socket_pair_invoke_large_request_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_max_concurrent_streams_test"
+ "name": "chttp2_socket_pair_max_concurrent_streams_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_no_op_test"
+ "name": "chttp2_socket_pair_no_op_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_ping_pong_streaming_test"
+ "name": "chttp2_socket_pair_ping_pong_streaming_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_request_response_with_binary_metadata_and_payload_test"
+ "name": "chttp2_socket_pair_request_response_with_binary_metadata_and_payload_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_request_response_with_metadata_and_payload_test"
+ "name": "chttp2_socket_pair_request_response_with_metadata_and_payload_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_request_response_with_payload_test"
+ "name": "chttp2_socket_pair_request_response_with_payload_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_request_with_large_metadata_test"
+ "name": "chttp2_socket_pair_request_with_large_metadata_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_request_with_payload_test"
+ "name": "chttp2_socket_pair_request_with_payload_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_simple_delayed_request_test"
+ "name": "chttp2_socket_pair_simple_delayed_request_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_simple_request_test"
+ "name": "chttp2_socket_pair_simple_request_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_thread_stress_test"
+ "name": "chttp2_socket_pair_thread_stress_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_writes_done_hangs_with_pending_read_test"
+ "name": "chttp2_socket_pair_writes_done_hangs_with_pending_read_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_cancel_after_accept_legacy_test"
+ "name": "chttp2_socket_pair_cancel_after_accept_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_cancel_after_accept_and_writes_closed_legacy_test"
+ "name": "chttp2_socket_pair_cancel_after_accept_and_writes_closed_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_cancel_after_invoke_legacy_test"
+ "name": "chttp2_socket_pair_cancel_after_invoke_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_cancel_before_invoke_legacy_test"
+ "name": "chttp2_socket_pair_cancel_before_invoke_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_cancel_in_a_vacuum_legacy_test"
+ "name": "chttp2_socket_pair_cancel_in_a_vacuum_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_census_simple_request_legacy_test"
+ "name": "chttp2_socket_pair_census_simple_request_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_disappearing_server_legacy_test"
+ "name": "chttp2_socket_pair_disappearing_server_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_early_server_shutdown_finishes_inflight_calls_legacy_test"
+ "name": "chttp2_socket_pair_early_server_shutdown_finishes_inflight_calls_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_early_server_shutdown_finishes_tags_legacy_test"
+ "name": "chttp2_socket_pair_early_server_shutdown_finishes_tags_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_graceful_server_shutdown_legacy_test"
+ "name": "chttp2_socket_pair_graceful_server_shutdown_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_invoke_large_request_legacy_test"
+ "name": "chttp2_socket_pair_invoke_large_request_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_max_concurrent_streams_legacy_test"
+ "name": "chttp2_socket_pair_max_concurrent_streams_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_no_op_legacy_test"
+ "name": "chttp2_socket_pair_no_op_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_ping_pong_streaming_legacy_test"
+ "name": "chttp2_socket_pair_ping_pong_streaming_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_request_response_with_binary_metadata_and_payload_legacy_test"
+ "name": "chttp2_socket_pair_request_response_with_binary_metadata_and_payload_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_request_response_with_metadata_and_payload_legacy_test"
+ "name": "chttp2_socket_pair_request_response_with_metadata_and_payload_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_request_response_with_payload_legacy_test"
+ "name": "chttp2_socket_pair_request_response_with_payload_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_request_response_with_trailing_metadata_and_payload_legacy_test"
+ "name": "chttp2_socket_pair_request_response_with_trailing_metadata_and_payload_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_request_with_large_metadata_legacy_test"
+ "name": "chttp2_socket_pair_request_with_large_metadata_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_request_with_payload_legacy_test"
+ "name": "chttp2_socket_pair_request_with_payload_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_simple_delayed_request_legacy_test"
+ "name": "chttp2_socket_pair_simple_delayed_request_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_simple_request_legacy_test"
+ "name": "chttp2_socket_pair_simple_request_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_thread_stress_legacy_test"
+ "name": "chttp2_socket_pair_thread_stress_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_writes_done_hangs_with_pending_read_legacy_test"
+ "name": "chttp2_socket_pair_writes_done_hangs_with_pending_read_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_bad_hostname_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_bad_hostname_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_and_writes_closed_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_and_writes_closed_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_cancel_after_invoke_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_cancel_after_invoke_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_cancel_before_invoke_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_cancel_before_invoke_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_cancel_in_a_vacuum_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_cancel_in_a_vacuum_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_census_simple_request_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_census_simple_request_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_disappearing_server_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_disappearing_server_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_inflight_calls_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_inflight_calls_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_tags_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_tags_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_empty_batch_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_empty_batch_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_graceful_server_shutdown_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_graceful_server_shutdown_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_max_concurrent_streams_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_max_concurrent_streams_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_no_op_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_no_op_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_ping_pong_streaming_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_ping_pong_streaming_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_request_response_with_binary_metadata_and_payload_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_request_response_with_binary_metadata_and_payload_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_request_response_with_metadata_and_payload_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_request_response_with_metadata_and_payload_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_request_response_with_payload_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_request_response_with_payload_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_request_with_large_metadata_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_request_with_large_metadata_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_request_with_payload_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_request_with_payload_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_simple_delayed_request_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_simple_delayed_request_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_simple_request_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_simple_request_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_thread_stress_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_thread_stress_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_writes_done_hangs_with_pending_read_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_writes_done_hangs_with_pending_read_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_legacy_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_and_writes_closed_legacy_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_and_writes_closed_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_cancel_after_invoke_legacy_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_cancel_after_invoke_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_cancel_before_invoke_legacy_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_cancel_before_invoke_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_cancel_in_a_vacuum_legacy_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_cancel_in_a_vacuum_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_census_simple_request_legacy_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_census_simple_request_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_disappearing_server_legacy_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_disappearing_server_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_inflight_calls_legacy_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_inflight_calls_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_tags_legacy_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_tags_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_graceful_server_shutdown_legacy_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_graceful_server_shutdown_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_legacy_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_max_concurrent_streams_legacy_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_max_concurrent_streams_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_no_op_legacy_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_no_op_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_ping_pong_streaming_legacy_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_ping_pong_streaming_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_request_response_with_binary_metadata_and_payload_legacy_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_request_response_with_binary_metadata_and_payload_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_request_response_with_metadata_and_payload_legacy_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_request_response_with_metadata_and_payload_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_request_response_with_payload_legacy_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_request_response_with_payload_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_request_response_with_trailing_metadata_and_payload_legacy_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_request_response_with_trailing_metadata_and_payload_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_request_with_large_metadata_legacy_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_request_with_large_metadata_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_request_with_payload_legacy_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_request_with_payload_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_simple_delayed_request_legacy_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_simple_delayed_request_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_simple_request_legacy_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_simple_request_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_thread_stress_legacy_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_thread_stress_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
},
{
"flaky": false,
"language": "c",
- "name": "chttp2_socket_pair_one_byte_at_a_time_writes_done_hangs_with_pending_read_legacy_test"
+ "name": "chttp2_socket_pair_one_byte_at_a_time_writes_done_hangs_with_pending_read_legacy_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
}
]
diff --git a/vsprojects/vs2010/Grpc.mak b/vsprojects/vs2010/Grpc.mak
index 727aa37781..93689a42af 100644
--- a/vsprojects/vs2010/Grpc.mak
+++ b/vsprojects/vs2010/Grpc.mak
@@ -53,10 +53,10 @@ grpc_test_util:
$(OUT_DIR):
mkdir $(OUT_DIR)
-buildtests: alarm_heap_test.exe alarm_list_test.exe alarm_test.exe alpn_test.exe bin_encoder_test.exe census_hash_table_test.exe census_statistics_multiple_writers_circular_buffer_test.exe census_statistics_multiple_writers_test.exe census_statistics_performance_test.exe census_statistics_quick_test.exe census_statistics_small_log_test.exe census_stats_store_test.exe census_stub_test.exe census_trace_store_test.exe census_window_stats_test.exe chttp2_status_conversion_test.exe chttp2_stream_encoder_test.exe chttp2_stream_map_test.exe chttp2_transport_end2end_test.exe dualstack_socket_test.exe echo_test.exe fd_posix_test.exe fling_stream_test.exe fling_test.exe gpr_cancellable_test.exe gpr_cmdline_test.exe gpr_env_test.exe gpr_file_test.exe gpr_histogram_test.exe gpr_host_port_test.exe gpr_log_test.exe gpr_slice_buffer_test.exe gpr_slice_test.exe gpr_string_test.exe gpr_sync_test.exe gpr_thd_test.exe gpr_time_test.exe gpr_tls_test.exe gpr_useful_test.exe grpc_base64_test.exe grpc_byte_buffer_reader_test.exe grpc_channel_stack_test.exe grpc_completion_queue_test.exe grpc_credentials_test.exe grpc_json_token_test.exe grpc_stream_op_test.exe hpack_parser_test.exe hpack_table_test.exe httpcli_format_request_test.exe httpcli_parser_test.exe httpcli_test.exe json_rewrite_test.exe json_test.exe lame_client_test.exe message_compress_test.exe metadata_buffer_test.exe multi_init_test.exe murmur_hash_test.exe no_server_test.exe poll_kick_posix_test.exe resolve_address_test.exe secure_endpoint_test.exe sockaddr_utils_test.exe tcp_client_posix_test.exe tcp_posix_test.exe tcp_server_posix_test.exe time_averaged_stats_test.exe time_test.exe timeout_encoding_test.exe transport_metadata_test.exe transport_security_test.exe
+buildtests: alarm_heap_test.exe alarm_list_test.exe alarm_test.exe alpn_test.exe bin_encoder_test.exe census_hash_table_test.exe census_statistics_multiple_writers_circular_buffer_test.exe census_statistics_multiple_writers_test.exe census_statistics_performance_test.exe census_statistics_quick_test.exe census_statistics_small_log_test.exe census_stats_store_test.exe census_stub_test.exe census_trace_store_test.exe census_window_stats_test.exe chttp2_status_conversion_test.exe chttp2_stream_encoder_test.exe chttp2_stream_map_test.exe chttp2_transport_end2end_test.exe dualstack_socket_test.exe echo_test.exe fd_posix_test.exe fling_stream_test.exe fling_test.exe gpr_cancellable_test.exe gpr_cmdline_test.exe gpr_env_test.exe gpr_file_test.exe gpr_histogram_test.exe gpr_host_port_test.exe gpr_log_test.exe gpr_slice_buffer_test.exe gpr_slice_test.exe gpr_string_test.exe gpr_sync_test.exe gpr_thd_test.exe gpr_time_test.exe gpr_tls_test.exe gpr_useful_test.exe grpc_base64_test.exe grpc_byte_buffer_reader_test.exe grpc_channel_stack_test.exe grpc_completion_queue_test.exe grpc_credentials_test.exe grpc_json_token_test.exe grpc_stream_op_test.exe hpack_parser_test.exe hpack_table_test.exe httpcli_format_request_test.exe httpcli_parser_test.exe httpcli_test.exe json_rewrite_test.exe json_test.exe lame_client_test.exe message_compress_test.exe metadata_buffer_test.exe multi_init_test.exe murmur_hash_test.exe no_server_test.exe poll_kick_posix_test.exe resolve_address_test.exe secure_endpoint_test.exe sockaddr_utils_test.exe tcp_client_posix_test.exe tcp_posix_test.exe tcp_server_posix_test.exe time_averaged_stats_test.exe time_test.exe timeout_encoding_test.exe timers_test.exe transport_metadata_test.exe transport_security_test.exe
echo All tests built.
-test: alarm_heap_test alarm_list_test alarm_test alpn_test bin_encoder_test census_hash_table_test census_statistics_multiple_writers_circular_buffer_test census_statistics_multiple_writers_test census_statistics_performance_test census_statistics_quick_test census_statistics_small_log_test census_stats_store_test census_stub_test census_trace_store_test census_window_stats_test chttp2_status_conversion_test chttp2_stream_encoder_test chttp2_stream_map_test chttp2_transport_end2end_test dualstack_socket_test echo_test fd_posix_test fling_stream_test fling_test gpr_cancellable_test gpr_cmdline_test gpr_env_test gpr_file_test gpr_histogram_test gpr_host_port_test gpr_log_test gpr_slice_buffer_test gpr_slice_test gpr_string_test gpr_sync_test gpr_thd_test gpr_time_test gpr_tls_test gpr_useful_test grpc_base64_test grpc_byte_buffer_reader_test grpc_channel_stack_test grpc_completion_queue_test grpc_credentials_test grpc_json_token_test grpc_stream_op_test hpack_parser_test hpack_table_test httpcli_format_request_test httpcli_parser_test httpcli_test json_rewrite_test json_test lame_client_test message_compress_test metadata_buffer_test multi_init_test murmur_hash_test no_server_test poll_kick_posix_test resolve_address_test secure_endpoint_test sockaddr_utils_test tcp_client_posix_test tcp_posix_test tcp_server_posix_test time_averaged_stats_test time_test timeout_encoding_test transport_metadata_test transport_security_test
+test: alarm_heap_test alarm_list_test alarm_test alpn_test bin_encoder_test census_hash_table_test census_statistics_multiple_writers_circular_buffer_test census_statistics_multiple_writers_test census_statistics_performance_test census_statistics_quick_test census_statistics_small_log_test census_stats_store_test census_stub_test census_trace_store_test census_window_stats_test chttp2_status_conversion_test chttp2_stream_encoder_test chttp2_stream_map_test chttp2_transport_end2end_test dualstack_socket_test echo_test fd_posix_test fling_stream_test fling_test gpr_cancellable_test gpr_cmdline_test gpr_env_test gpr_file_test gpr_histogram_test gpr_host_port_test gpr_log_test gpr_slice_buffer_test gpr_slice_test gpr_string_test gpr_sync_test gpr_thd_test gpr_time_test gpr_tls_test gpr_useful_test grpc_base64_test grpc_byte_buffer_reader_test grpc_channel_stack_test grpc_completion_queue_test grpc_credentials_test grpc_json_token_test grpc_stream_op_test hpack_parser_test hpack_table_test httpcli_format_request_test httpcli_parser_test httpcli_test json_rewrite_test json_test lame_client_test message_compress_test metadata_buffer_test multi_init_test murmur_hash_test no_server_test poll_kick_posix_test resolve_address_test secure_endpoint_test sockaddr_utils_test tcp_client_posix_test tcp_posix_test tcp_server_posix_test time_averaged_stats_test time_test timeout_encoding_test timers_test transport_metadata_test transport_security_test
echo All tests ran.
test_gpr: gpr_cancellable_test gpr_cmdline_test gpr_env_test gpr_file_test gpr_histogram_test gpr_host_port_test gpr_log_test gpr_slice_buffer_test gpr_slice_test gpr_string_test gpr_sync_test gpr_thd_test gpr_time_test gpr_tls_test gpr_useful_test
@@ -702,6 +702,14 @@ timeout_encoding_test: timeout_encoding_test.exe
echo Running timeout_encoding_test
$(OUT_DIR)\timeout_encoding_test.exe
+timers_test.exe: grpc_test_util
+ echo Building timers_test
+ $(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\profiling\timers_test.c
+ $(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\timers_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\timers_test.obj
+timers_test: timers_test.exe
+ echo Running timers_test
+ $(OUT_DIR)\timers_test.exe
+
transport_metadata_test.exe: grpc_test_util
echo Building transport_metadata_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\transport\metadata_test.c
diff --git a/vsprojects/vs2010/grpc.vcxproj b/vsprojects/vs2010/grpc.vcxproj
index 203ca347d3..d18c33bf27 100644
--- a/vsprojects/vs2010/grpc.vcxproj
+++ b/vsprojects/vs2010/grpc.vcxproj
@@ -148,6 +148,8 @@
<ClInclude Include="..\..\src\core\json\json_common.h" />
<ClInclude Include="..\..\src\core\json\json_reader.h" />
<ClInclude Include="..\..\src\core\json\json_writer.h" />
+ <ClInclude Include="..\..\src\core\profiling\timers.h" />
+ <ClInclude Include="..\..\src\core\profiling\timers_preciseclock.h" />
<ClInclude Include="..\..\src\core\statistics\census_interface.h" />
<ClInclude Include="..\..\src\core\statistics\census_log.h" />
<ClInclude Include="..\..\src\core\statistics\census_rpc_stats.h" />
@@ -270,6 +272,8 @@
</ClCompile>
<ClCompile Include="..\..\src\core\iomgr\endpoint_pair_posix.c">
</ClCompile>
+ <ClCompile Include="..\..\src\core\iomgr\endpoint_pair_windows.c">
+ </ClCompile>
<ClCompile Include="..\..\src\core\iomgr\fd_posix.c">
</ClCompile>
<ClCompile Include="..\..\src\core\iomgr\iocp_windows.c">
@@ -334,6 +338,8 @@
</ClCompile>
<ClCompile Include="..\..\src\core\json\json_writer.c">
</ClCompile>
+ <ClCompile Include="..\..\src\core\profiling\timers.c">
+ </ClCompile>
<ClCompile Include="..\..\src\core\statistics\census_init.c">
</ClCompile>
<ClCompile Include="..\..\src\core\statistics\census_log.c">
diff --git a/vsprojects/vs2010/grpc.vcxproj.filters b/vsprojects/vs2010/grpc.vcxproj.filters
index 20dbe8c444..7774a78040 100644
--- a/vsprojects/vs2010/grpc.vcxproj.filters
+++ b/vsprojects/vs2010/grpc.vcxproj.filters
@@ -124,6 +124,9 @@
<ClCompile Include="..\..\src\core\iomgr\endpoint_pair_posix.c">
<Filter>src\core\iomgr</Filter>
</ClCompile>
+ <ClCompile Include="..\..\src\core\iomgr\endpoint_pair_windows.c">
+ <Filter>src\core\iomgr</Filter>
+ </ClCompile>
<ClCompile Include="..\..\src\core\iomgr\fd_posix.c">
<Filter>src\core\iomgr</Filter>
</ClCompile>
@@ -220,6 +223,9 @@
<ClCompile Include="..\..\src\core\json\json_writer.c">
<Filter>src\core\json</Filter>
</ClCompile>
+ <ClCompile Include="..\..\src\core\profiling\timers.c">
+ <Filter>src\core\profiling</Filter>
+ </ClCompile>
<ClCompile Include="..\..\src\core\statistics\census_init.c">
<Filter>src\core\statistics</Filter>
</ClCompile>
@@ -566,6 +572,12 @@
<ClInclude Include="..\..\src\core\json\json_writer.h">
<Filter>src\core\json</Filter>
</ClInclude>
+ <ClInclude Include="..\..\src\core\profiling\timers.h">
+ <Filter>src\core\profiling</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\src\core\profiling\timers_preciseclock.h">
+ <Filter>src\core\profiling</Filter>
+ </ClInclude>
<ClInclude Include="..\..\src\core\statistics\census_interface.h">
<Filter>src\core\statistics</Filter>
</ClInclude>
@@ -713,6 +725,9 @@
<Filter Include="src\core\json">
<UniqueIdentifier>{e665cc0e-b994-d7c5-cc18-2007392019f0}</UniqueIdentifier>
</Filter>
+ <Filter Include="src\core\profiling">
+ <UniqueIdentifier>{87674b72-0f05-0469-481a-bd8c7af9ad80}</UniqueIdentifier>
+ </Filter>
<Filter Include="src\core\security">
<UniqueIdentifier>{1d850ac6-e639-4eab-5338-4ba40272fcc9}</UniqueIdentifier>
</Filter>
diff --git a/vsprojects/vs2010/grpc_test_util.vcxproj b/vsprojects/vs2010/grpc_test_util.vcxproj
index 967543f78a..d3559d4dde 100644
--- a/vsprojects/vs2010/grpc_test_util.vcxproj
+++ b/vsprojects/vs2010/grpc_test_util.vcxproj
@@ -96,6 +96,8 @@
</ClCompile>
<ClCompile Include="..\..\test\core\util\port_posix.c">
</ClCompile>
+ <ClCompile Include="..\..\test\core\util\port_windows.c">
+ </ClCompile>
<ClCompile Include="..\..\test\core\util\slice_splitter.c">
</ClCompile>
</ItemGroup>
diff --git a/vsprojects/vs2010/grpc_unsecure.vcxproj b/vsprojects/vs2010/grpc_unsecure.vcxproj
index 1558d72514..78d538b70e 100644
--- a/vsprojects/vs2010/grpc_unsecure.vcxproj
+++ b/vsprojects/vs2010/grpc_unsecure.vcxproj
@@ -132,6 +132,8 @@
<ClInclude Include="..\..\src\core\json\json_common.h" />
<ClInclude Include="..\..\src\core\json\json_reader.h" />
<ClInclude Include="..\..\src\core\json\json_writer.h" />
+ <ClInclude Include="..\..\src\core\profiling\timers.h" />
+ <ClInclude Include="..\..\src\core\profiling\timers_preciseclock.h" />
<ClInclude Include="..\..\src\core\statistics\census_interface.h" />
<ClInclude Include="..\..\src\core\statistics\census_log.h" />
<ClInclude Include="..\..\src\core\statistics\census_rpc_stats.h" />
@@ -214,6 +216,8 @@
</ClCompile>
<ClCompile Include="..\..\src\core\iomgr\endpoint_pair_posix.c">
</ClCompile>
+ <ClCompile Include="..\..\src\core\iomgr\endpoint_pair_windows.c">
+ </ClCompile>
<ClCompile Include="..\..\src\core\iomgr\fd_posix.c">
</ClCompile>
<ClCompile Include="..\..\src\core\iomgr\iocp_windows.c">
@@ -278,6 +282,8 @@
</ClCompile>
<ClCompile Include="..\..\src\core\json\json_writer.c">
</ClCompile>
+ <ClCompile Include="..\..\src\core\profiling\timers.c">
+ </ClCompile>
<ClCompile Include="..\..\src\core\statistics\census_init.c">
</ClCompile>
<ClCompile Include="..\..\src\core\statistics\census_log.c">
diff --git a/vsprojects/vs2010/grpc_unsecure.vcxproj.filters b/vsprojects/vs2010/grpc_unsecure.vcxproj.filters
index 4b758d6113..cec8f78bae 100644
--- a/vsprojects/vs2010/grpc_unsecure.vcxproj.filters
+++ b/vsprojects/vs2010/grpc_unsecure.vcxproj.filters
@@ -64,6 +64,9 @@
<ClCompile Include="..\..\src\core\iomgr\endpoint_pair_posix.c">
<Filter>src\core\iomgr</Filter>
</ClCompile>
+ <ClCompile Include="..\..\src\core\iomgr\endpoint_pair_windows.c">
+ <Filter>src\core\iomgr</Filter>
+ </ClCompile>
<ClCompile Include="..\..\src\core\iomgr\fd_posix.c">
<Filter>src\core\iomgr</Filter>
</ClCompile>
@@ -160,6 +163,9 @@
<ClCompile Include="..\..\src\core\json\json_writer.c">
<Filter>src\core\json</Filter>
</ClCompile>
+ <ClCompile Include="..\..\src\core\profiling\timers.c">
+ <Filter>src\core\profiling</Filter>
+ </ClCompile>
<ClCompile Include="..\..\src\core\statistics\census_init.c">
<Filter>src\core\statistics</Filter>
</ClCompile>
@@ -458,6 +464,12 @@
<ClInclude Include="..\..\src\core\json\json_writer.h">
<Filter>src\core\json</Filter>
</ClInclude>
+ <ClInclude Include="..\..\src\core\profiling\timers.h">
+ <Filter>src\core\profiling</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\src\core\profiling\timers_preciseclock.h">
+ <Filter>src\core\profiling</Filter>
+ </ClInclude>
<ClInclude Include="..\..\src\core\statistics\census_interface.h">
<Filter>src\core\statistics</Filter>
</ClInclude>
@@ -602,6 +614,9 @@
<Filter Include="src\core\json">
<UniqueIdentifier>{443ffc61-1bea-2477-6e54-1ddf8c139264}</UniqueIdentifier>
</Filter>
+ <Filter Include="src\core\profiling">
+ <UniqueIdentifier>{7f91d9bf-c9de-835a-d74d-b16f843b89a9}</UniqueIdentifier>
+ </Filter>
<Filter Include="src\core\statistics">
<UniqueIdentifier>{e084164c-a069-00e3-db35-4e0b1cd6f0b7}</UniqueIdentifier>
</Filter>
diff --git a/vsprojects/vs2013/Grpc.mak b/vsprojects/vs2013/Grpc.mak
index 727aa37781..1a96a2f3f8 100644
--- a/vsprojects/vs2013/Grpc.mak
+++ b/vsprojects/vs2013/Grpc.mak
@@ -53,16 +53,15 @@ grpc_test_util:
$(OUT_DIR):
mkdir $(OUT_DIR)
-buildtests: alarm_heap_test.exe alarm_list_test.exe alarm_test.exe alpn_test.exe bin_encoder_test.exe census_hash_table_test.exe census_statistics_multiple_writers_circular_buffer_test.exe census_statistics_multiple_writers_test.exe census_statistics_performance_test.exe census_statistics_quick_test.exe census_statistics_small_log_test.exe census_stats_store_test.exe census_stub_test.exe census_trace_store_test.exe census_window_stats_test.exe chttp2_status_conversion_test.exe chttp2_stream_encoder_test.exe chttp2_stream_map_test.exe chttp2_transport_end2end_test.exe dualstack_socket_test.exe echo_test.exe fd_posix_test.exe fling_stream_test.exe fling_test.exe gpr_cancellable_test.exe gpr_cmdline_test.exe gpr_env_test.exe gpr_file_test.exe gpr_histogram_test.exe gpr_host_port_test.exe gpr_log_test.exe gpr_slice_buffer_test.exe gpr_slice_test.exe gpr_string_test.exe gpr_sync_test.exe gpr_thd_test.exe gpr_time_test.exe gpr_tls_test.exe gpr_useful_test.exe grpc_base64_test.exe grpc_byte_buffer_reader_test.exe grpc_channel_stack_test.exe grpc_completion_queue_test.exe grpc_credentials_test.exe grpc_json_token_test.exe grpc_stream_op_test.exe hpack_parser_test.exe hpack_table_test.exe httpcli_format_request_test.exe httpcli_parser_test.exe httpcli_test.exe json_rewrite_test.exe json_test.exe lame_client_test.exe message_compress_test.exe metadata_buffer_test.exe multi_init_test.exe murmur_hash_test.exe no_server_test.exe poll_kick_posix_test.exe resolve_address_test.exe secure_endpoint_test.exe sockaddr_utils_test.exe tcp_client_posix_test.exe tcp_posix_test.exe tcp_server_posix_test.exe time_averaged_stats_test.exe time_test.exe timeout_encoding_test.exe transport_metadata_test.exe transport_security_test.exe
- echo All tests built.
+buildtests: buildtests_c buildtests_cxx
-test: alarm_heap_test alarm_list_test alarm_test alpn_test bin_encoder_test census_hash_table_test census_statistics_multiple_writers_circular_buffer_test census_statistics_multiple_writers_test census_statistics_performance_test census_statistics_quick_test census_statistics_small_log_test census_stats_store_test census_stub_test census_trace_store_test census_window_stats_test chttp2_status_conversion_test chttp2_stream_encoder_test chttp2_stream_map_test chttp2_transport_end2end_test dualstack_socket_test echo_test fd_posix_test fling_stream_test fling_test gpr_cancellable_test gpr_cmdline_test gpr_env_test gpr_file_test gpr_histogram_test gpr_host_port_test gpr_log_test gpr_slice_buffer_test gpr_slice_test gpr_string_test gpr_sync_test gpr_thd_test gpr_time_test gpr_tls_test gpr_useful_test grpc_base64_test grpc_byte_buffer_reader_test grpc_channel_stack_test grpc_completion_queue_test grpc_credentials_test grpc_json_token_test grpc_stream_op_test hpack_parser_test hpack_table_test httpcli_format_request_test httpcli_parser_test httpcli_test json_rewrite_test json_test lame_client_test message_compress_test metadata_buffer_test multi_init_test murmur_hash_test no_server_test poll_kick_posix_test resolve_address_test secure_endpoint_test sockaddr_utils_test tcp_client_posix_test tcp_posix_test tcp_server_posix_test time_averaged_stats_test time_test timeout_encoding_test transport_metadata_test transport_security_test
- echo All tests ran.
+buildtests_c: alarm_heap_test.exe alarm_list_test.exe alarm_test.exe alpn_test.exe bin_encoder_test.exe census_hash_table_test.exe census_statistics_multiple_writers_circular_buffer_test.exe census_statistics_multiple_writers_test.exe census_statistics_performance_test.exe census_statistics_quick_test.exe census_statistics_small_log_test.exe census_stub_test.exe census_window_stats_test.exe chttp2_status_conversion_test.exe chttp2_stream_encoder_test.exe chttp2_stream_map_test.exe chttp2_transport_end2end_test.exe echo_client.exe echo_server.exe echo_test.exe fd_posix_test.exe fling_client.exe fling_server.exe fling_stream_test.exe fling_test.exe gpr_cancellable_test.exe gpr_cmdline_test.exe gpr_env_test.exe gpr_file_test.exe gpr_histogram_test.exe gpr_host_port_test.exe gpr_log_test.exe gpr_slice_buffer_test.exe gpr_slice_test.exe gpr_string_test.exe gpr_sync_test.exe gpr_thd_test.exe gpr_time_test.exe gpr_tls_test.exe gpr_useful_test.exe grpc_base64_test.exe grpc_byte_buffer_reader_test.exe grpc_channel_stack_test.exe grpc_completion_queue_test.exe grpc_credentials_test.exe grpc_json_token_test.exe grpc_stream_op_test.exe hpack_parser_test.exe hpack_table_test.exe httpcli_format_request_test.exe httpcli_parser_test.exe httpcli_test.exe json_rewrite.exe json_rewrite_test.exe json_test.exe lame_client_test.exe message_compress_test.exe metadata_buffer_test.exe multi_init_test.exe murmur_hash_test.exe no_server_test.exe poll_kick_posix_test.exe resolve_address_test.exe secure_endpoint_test.exe sockaddr_utils_test.exe tcp_client_posix_test.exe tcp_posix_test.exe tcp_server_posix_test.exe time_averaged_stats_test.exe time_test.exe timeout_encoding_test.exe timers_test.exe transport_metadata_test.exe transport_security_test.exe
+ echo All tests built.
-test_gpr: gpr_cancellable_test gpr_cmdline_test gpr_env_test gpr_file_test gpr_histogram_test gpr_host_port_test gpr_log_test gpr_slice_buffer_test gpr_slice_test gpr_string_test gpr_sync_test gpr_thd_test gpr_time_test gpr_tls_test gpr_useful_test
- echo All tests ran.
+buildtests_cxx:
+ echo All tests built.
-alarm_heap_test.exe: grpc_test_util
+alarm_heap_test.exe: grpc_test_util $(OUT_DIR)
echo Building alarm_heap_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\iomgr\alarm_heap_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\alarm_heap_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\alarm_heap_test.obj
@@ -70,7 +69,7 @@ alarm_heap_test: alarm_heap_test.exe
echo Running alarm_heap_test
$(OUT_DIR)\alarm_heap_test.exe
-alarm_list_test.exe: grpc_test_util
+alarm_list_test.exe: grpc_test_util $(OUT_DIR)
echo Building alarm_list_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\iomgr\alarm_list_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\alarm_list_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\alarm_list_test.obj
@@ -78,7 +77,7 @@ alarm_list_test: alarm_list_test.exe
echo Running alarm_list_test
$(OUT_DIR)\alarm_list_test.exe
-alarm_test.exe: grpc_test_util
+alarm_test.exe: grpc_test_util $(OUT_DIR)
echo Building alarm_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\iomgr\alarm_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\alarm_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\alarm_test.obj
@@ -86,7 +85,7 @@ alarm_test: alarm_test.exe
echo Running alarm_test
$(OUT_DIR)\alarm_test.exe
-alpn_test.exe: grpc_test_util
+alpn_test.exe: grpc_test_util $(OUT_DIR)
echo Building alpn_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\transport\chttp2\alpn_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\alpn_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\alpn_test.obj
@@ -94,7 +93,7 @@ alpn_test: alpn_test.exe
echo Running alpn_test
$(OUT_DIR)\alpn_test.exe
-bin_encoder_test.exe: grpc_test_util
+bin_encoder_test.exe: grpc_test_util $(OUT_DIR)
echo Building bin_encoder_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\transport\chttp2\bin_encoder_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\bin_encoder_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\bin_encoder_test.obj
@@ -102,7 +101,7 @@ bin_encoder_test: bin_encoder_test.exe
echo Running bin_encoder_test
$(OUT_DIR)\bin_encoder_test.exe
-census_hash_table_test.exe: grpc_test_util
+census_hash_table_test.exe: grpc_test_util $(OUT_DIR)
echo Building census_hash_table_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\statistics\hash_table_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\census_hash_table_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\hash_table_test.obj
@@ -110,7 +109,7 @@ census_hash_table_test: census_hash_table_test.exe
echo Running census_hash_table_test
$(OUT_DIR)\census_hash_table_test.exe
-census_statistics_multiple_writers_circular_buffer_test.exe: grpc_test_util
+census_statistics_multiple_writers_circular_buffer_test.exe: grpc_test_util $(OUT_DIR)
echo Building census_statistics_multiple_writers_circular_buffer_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\statistics\multiple_writers_circular_buffer_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\census_statistics_multiple_writers_circular_buffer_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\multiple_writers_circular_buffer_test.obj
@@ -118,7 +117,7 @@ census_statistics_multiple_writers_circular_buffer_test: census_statistics_multi
echo Running census_statistics_multiple_writers_circular_buffer_test
$(OUT_DIR)\census_statistics_multiple_writers_circular_buffer_test.exe
-census_statistics_multiple_writers_test.exe: grpc_test_util
+census_statistics_multiple_writers_test.exe: grpc_test_util $(OUT_DIR)
echo Building census_statistics_multiple_writers_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\statistics\multiple_writers_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\census_statistics_multiple_writers_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\multiple_writers_test.obj
@@ -126,7 +125,7 @@ census_statistics_multiple_writers_test: census_statistics_multiple_writers_test
echo Running census_statistics_multiple_writers_test
$(OUT_DIR)\census_statistics_multiple_writers_test.exe
-census_statistics_performance_test.exe: grpc_test_util
+census_statistics_performance_test.exe: grpc_test_util $(OUT_DIR)
echo Building census_statistics_performance_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\statistics\performance_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\census_statistics_performance_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\performance_test.obj
@@ -134,7 +133,7 @@ census_statistics_performance_test: census_statistics_performance_test.exe
echo Running census_statistics_performance_test
$(OUT_DIR)\census_statistics_performance_test.exe
-census_statistics_quick_test.exe: grpc_test_util
+census_statistics_quick_test.exe: grpc_test_util $(OUT_DIR)
echo Building census_statistics_quick_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\statistics\quick_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\census_statistics_quick_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\quick_test.obj
@@ -142,7 +141,7 @@ census_statistics_quick_test: census_statistics_quick_test.exe
echo Running census_statistics_quick_test
$(OUT_DIR)\census_statistics_quick_test.exe
-census_statistics_small_log_test.exe: grpc_test_util
+census_statistics_small_log_test.exe: grpc_test_util $(OUT_DIR)
echo Building census_statistics_small_log_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\statistics\small_log_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\census_statistics_small_log_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\small_log_test.obj
@@ -150,7 +149,7 @@ census_statistics_small_log_test: census_statistics_small_log_test.exe
echo Running census_statistics_small_log_test
$(OUT_DIR)\census_statistics_small_log_test.exe
-census_stats_store_test.exe: grpc_test_util
+census_stats_store_test.exe: grpc_test_util $(OUT_DIR)
echo Building census_stats_store_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\statistics\rpc_stats_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\census_stats_store_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\rpc_stats_test.obj
@@ -158,7 +157,7 @@ census_stats_store_test: census_stats_store_test.exe
echo Running census_stats_store_test
$(OUT_DIR)\census_stats_store_test.exe
-census_stub_test.exe: grpc_test_util
+census_stub_test.exe: grpc_test_util $(OUT_DIR)
echo Building census_stub_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\statistics\census_stub_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\census_stub_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\census_stub_test.obj
@@ -166,7 +165,7 @@ census_stub_test: census_stub_test.exe
echo Running census_stub_test
$(OUT_DIR)\census_stub_test.exe
-census_trace_store_test.exe: grpc_test_util
+census_trace_store_test.exe: grpc_test_util $(OUT_DIR)
echo Building census_trace_store_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\statistics\trace_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\census_trace_store_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\trace_test.obj
@@ -174,7 +173,7 @@ census_trace_store_test: census_trace_store_test.exe
echo Running census_trace_store_test
$(OUT_DIR)\census_trace_store_test.exe
-census_window_stats_test.exe: grpc_test_util
+census_window_stats_test.exe: grpc_test_util $(OUT_DIR)
echo Building census_window_stats_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\statistics\window_stats_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\census_window_stats_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\window_stats_test.obj
@@ -182,7 +181,7 @@ census_window_stats_test: census_window_stats_test.exe
echo Running census_window_stats_test
$(OUT_DIR)\census_window_stats_test.exe
-chttp2_status_conversion_test.exe: grpc_test_util
+chttp2_status_conversion_test.exe: grpc_test_util $(OUT_DIR)
echo Building chttp2_status_conversion_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\transport\chttp2\status_conversion_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\chttp2_status_conversion_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\status_conversion_test.obj
@@ -190,7 +189,7 @@ chttp2_status_conversion_test: chttp2_status_conversion_test.exe
echo Running chttp2_status_conversion_test
$(OUT_DIR)\chttp2_status_conversion_test.exe
-chttp2_stream_encoder_test.exe: grpc_test_util
+chttp2_stream_encoder_test.exe: grpc_test_util $(OUT_DIR)
echo Building chttp2_stream_encoder_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\transport\chttp2\stream_encoder_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\chttp2_stream_encoder_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\stream_encoder_test.obj
@@ -198,7 +197,7 @@ chttp2_stream_encoder_test: chttp2_stream_encoder_test.exe
echo Running chttp2_stream_encoder_test
$(OUT_DIR)\chttp2_stream_encoder_test.exe
-chttp2_stream_map_test.exe: grpc_test_util
+chttp2_stream_map_test.exe: grpc_test_util $(OUT_DIR)
echo Building chttp2_stream_map_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\transport\chttp2\stream_map_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\chttp2_stream_map_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\stream_map_test.obj
@@ -206,7 +205,7 @@ chttp2_stream_map_test: chttp2_stream_map_test.exe
echo Running chttp2_stream_map_test
$(OUT_DIR)\chttp2_stream_map_test.exe
-chttp2_transport_end2end_test.exe: grpc_test_util
+chttp2_transport_end2end_test.exe: grpc_test_util $(OUT_DIR)
echo Building chttp2_transport_end2end_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\transport\chttp2_transport_end2end_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\chttp2_transport_end2end_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\chttp2_transport_end2end_test.obj
@@ -214,15 +213,7 @@ chttp2_transport_end2end_test: chttp2_transport_end2end_test.exe
echo Running chttp2_transport_end2end_test
$(OUT_DIR)\chttp2_transport_end2end_test.exe
-dualstack_socket_test.exe: grpc_test_util
- echo Building dualstack_socket_test
- $(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\end2end\dualstack_socket_test.c
- $(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\dualstack_socket_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\dualstack_socket_test.obj
-dualstack_socket_test: dualstack_socket_test.exe
- echo Running dualstack_socket_test
- $(OUT_DIR)\dualstack_socket_test.exe
-
-echo_client.exe: grpc_test_util
+echo_client.exe: grpc_test_util $(OUT_DIR)
echo Building echo_client
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\echo\client.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\echo_client.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\client.obj
@@ -230,7 +221,7 @@ echo_client: echo_client.exe
echo Running echo_client
$(OUT_DIR)\echo_client.exe
-echo_server.exe: grpc_test_util
+echo_server.exe: grpc_test_util $(OUT_DIR)
echo Building echo_server
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\echo\server.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\echo_server.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\server.obj
@@ -238,7 +229,7 @@ echo_server: echo_server.exe
echo Running echo_server
$(OUT_DIR)\echo_server.exe
-echo_test.exe: grpc_test_util
+echo_test.exe: grpc_test_util $(OUT_DIR)
echo Building echo_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\echo\echo_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\echo_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\echo_test.obj
@@ -246,7 +237,7 @@ echo_test: echo_test.exe
echo Running echo_test
$(OUT_DIR)\echo_test.exe
-fd_posix_test.exe: grpc_test_util
+fd_posix_test.exe: grpc_test_util $(OUT_DIR)
echo Building fd_posix_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\iomgr\fd_posix_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\fd_posix_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\fd_posix_test.obj
@@ -254,7 +245,7 @@ fd_posix_test: fd_posix_test.exe
echo Running fd_posix_test
$(OUT_DIR)\fd_posix_test.exe
-fling_client.exe: grpc_test_util
+fling_client.exe: grpc_test_util $(OUT_DIR)
echo Building fling_client
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\fling\client.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\fling_client.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\client.obj
@@ -262,7 +253,7 @@ fling_client: fling_client.exe
echo Running fling_client
$(OUT_DIR)\fling_client.exe
-fling_server.exe: grpc_test_util
+fling_server.exe: grpc_test_util $(OUT_DIR)
echo Building fling_server
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\fling\server.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\fling_server.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\server.obj
@@ -270,7 +261,7 @@ fling_server: fling_server.exe
echo Running fling_server
$(OUT_DIR)\fling_server.exe
-fling_stream_test.exe: grpc_test_util
+fling_stream_test.exe: grpc_test_util $(OUT_DIR)
echo Building fling_stream_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\fling\fling_stream_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\fling_stream_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\fling_stream_test.obj
@@ -278,7 +269,7 @@ fling_stream_test: fling_stream_test.exe
echo Running fling_stream_test
$(OUT_DIR)\fling_stream_test.exe
-fling_test.exe: grpc_test_util
+fling_test.exe: grpc_test_util $(OUT_DIR)
echo Building fling_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\fling\fling_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\fling_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\fling_test.obj
@@ -286,7 +277,7 @@ fling_test: fling_test.exe
echo Running fling_test
$(OUT_DIR)\fling_test.exe
-gen_hpack_tables.exe: grpc_test_util
+gen_hpack_tables.exe: grpc_test_util $(OUT_DIR)
echo Building gen_hpack_tables
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\src\core\transport\chttp2\gen_hpack_tables.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\gen_hpack_tables.exe" Debug\grpc_test_util.lib Debug\gpr.lib Debug\grpc.lib $(LIBS) $(OUT_DIR)\gen_hpack_tables.obj
@@ -294,7 +285,7 @@ gen_hpack_tables: gen_hpack_tables.exe
echo Running gen_hpack_tables
$(OUT_DIR)\gen_hpack_tables.exe
-gpr_cancellable_test.exe: grpc_test_util
+gpr_cancellable_test.exe: grpc_test_util $(OUT_DIR)
echo Building gpr_cancellable_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\support\cancellable_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\gpr_cancellable_test.exe" Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\cancellable_test.obj
@@ -302,7 +293,7 @@ gpr_cancellable_test: gpr_cancellable_test.exe
echo Running gpr_cancellable_test
$(OUT_DIR)\gpr_cancellable_test.exe
-gpr_cmdline_test.exe: grpc_test_util
+gpr_cmdline_test.exe: grpc_test_util $(OUT_DIR)
echo Building gpr_cmdline_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\support\cmdline_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\gpr_cmdline_test.exe" Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\cmdline_test.obj
@@ -310,7 +301,7 @@ gpr_cmdline_test: gpr_cmdline_test.exe
echo Running gpr_cmdline_test
$(OUT_DIR)\gpr_cmdline_test.exe
-gpr_env_test.exe: grpc_test_util
+gpr_env_test.exe: grpc_test_util $(OUT_DIR)
echo Building gpr_env_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\support\env_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\gpr_env_test.exe" Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\env_test.obj
@@ -318,7 +309,7 @@ gpr_env_test: gpr_env_test.exe
echo Running gpr_env_test
$(OUT_DIR)\gpr_env_test.exe
-gpr_file_test.exe: grpc_test_util
+gpr_file_test.exe: grpc_test_util $(OUT_DIR)
echo Building gpr_file_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\support\file_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\gpr_file_test.exe" Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\file_test.obj
@@ -326,7 +317,7 @@ gpr_file_test: gpr_file_test.exe
echo Running gpr_file_test
$(OUT_DIR)\gpr_file_test.exe
-gpr_histogram_test.exe: grpc_test_util
+gpr_histogram_test.exe: grpc_test_util $(OUT_DIR)
echo Building gpr_histogram_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\support\histogram_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\gpr_histogram_test.exe" Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\histogram_test.obj
@@ -334,7 +325,7 @@ gpr_histogram_test: gpr_histogram_test.exe
echo Running gpr_histogram_test
$(OUT_DIR)\gpr_histogram_test.exe
-gpr_host_port_test.exe: grpc_test_util
+gpr_host_port_test.exe: grpc_test_util $(OUT_DIR)
echo Building gpr_host_port_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\support\host_port_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\gpr_host_port_test.exe" Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\host_port_test.obj
@@ -342,7 +333,7 @@ gpr_host_port_test: gpr_host_port_test.exe
echo Running gpr_host_port_test
$(OUT_DIR)\gpr_host_port_test.exe
-gpr_log_test.exe: grpc_test_util
+gpr_log_test.exe: grpc_test_util $(OUT_DIR)
echo Building gpr_log_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\support\log_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\gpr_log_test.exe" Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\log_test.obj
@@ -350,7 +341,7 @@ gpr_log_test: gpr_log_test.exe
echo Running gpr_log_test
$(OUT_DIR)\gpr_log_test.exe
-gpr_slice_buffer_test.exe: grpc_test_util
+gpr_slice_buffer_test.exe: grpc_test_util $(OUT_DIR)
echo Building gpr_slice_buffer_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\support\slice_buffer_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\gpr_slice_buffer_test.exe" Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\slice_buffer_test.obj
@@ -358,7 +349,7 @@ gpr_slice_buffer_test: gpr_slice_buffer_test.exe
echo Running gpr_slice_buffer_test
$(OUT_DIR)\gpr_slice_buffer_test.exe
-gpr_slice_test.exe: grpc_test_util
+gpr_slice_test.exe: grpc_test_util $(OUT_DIR)
echo Building gpr_slice_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\support\slice_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\gpr_slice_test.exe" Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\slice_test.obj
@@ -366,7 +357,7 @@ gpr_slice_test: gpr_slice_test.exe
echo Running gpr_slice_test
$(OUT_DIR)\gpr_slice_test.exe
-gpr_string_test.exe: grpc_test_util
+gpr_string_test.exe: grpc_test_util $(OUT_DIR)
echo Building gpr_string_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\support\string_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\gpr_string_test.exe" Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\string_test.obj
@@ -374,7 +365,7 @@ gpr_string_test: gpr_string_test.exe
echo Running gpr_string_test
$(OUT_DIR)\gpr_string_test.exe
-gpr_sync_test.exe: grpc_test_util
+gpr_sync_test.exe: grpc_test_util $(OUT_DIR)
echo Building gpr_sync_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\support\sync_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\gpr_sync_test.exe" Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\sync_test.obj
@@ -382,7 +373,7 @@ gpr_sync_test: gpr_sync_test.exe
echo Running gpr_sync_test
$(OUT_DIR)\gpr_sync_test.exe
-gpr_thd_test.exe: grpc_test_util
+gpr_thd_test.exe: grpc_test_util $(OUT_DIR)
echo Building gpr_thd_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\support\thd_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\gpr_thd_test.exe" Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\thd_test.obj
@@ -390,7 +381,7 @@ gpr_thd_test: gpr_thd_test.exe
echo Running gpr_thd_test
$(OUT_DIR)\gpr_thd_test.exe
-gpr_time_test.exe: grpc_test_util
+gpr_time_test.exe: grpc_test_util $(OUT_DIR)
echo Building gpr_time_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\support\time_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\gpr_time_test.exe" Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\time_test.obj
@@ -398,7 +389,7 @@ gpr_time_test: gpr_time_test.exe
echo Running gpr_time_test
$(OUT_DIR)\gpr_time_test.exe
-gpr_tls_test.exe: grpc_test_util
+gpr_tls_test.exe: grpc_test_util $(OUT_DIR)
echo Building gpr_tls_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\support\tls_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\gpr_tls_test.exe" Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\tls_test.obj
@@ -406,7 +397,7 @@ gpr_tls_test: gpr_tls_test.exe
echo Running gpr_tls_test
$(OUT_DIR)\gpr_tls_test.exe
-gpr_useful_test.exe: grpc_test_util
+gpr_useful_test.exe: grpc_test_util $(OUT_DIR)
echo Building gpr_useful_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\support\useful_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\gpr_useful_test.exe" Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\useful_test.obj
@@ -414,7 +405,7 @@ gpr_useful_test: gpr_useful_test.exe
echo Running gpr_useful_test
$(OUT_DIR)\gpr_useful_test.exe
-grpc_base64_test.exe: grpc_test_util
+grpc_base64_test.exe: grpc_test_util $(OUT_DIR)
echo Building grpc_base64_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\security\base64_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\grpc_base64_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\base64_test.obj
@@ -422,7 +413,7 @@ grpc_base64_test: grpc_base64_test.exe
echo Running grpc_base64_test
$(OUT_DIR)\grpc_base64_test.exe
-grpc_byte_buffer_reader_test.exe: grpc_test_util
+grpc_byte_buffer_reader_test.exe: grpc_test_util $(OUT_DIR)
echo Building grpc_byte_buffer_reader_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\surface\byte_buffer_reader_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\grpc_byte_buffer_reader_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\byte_buffer_reader_test.obj
@@ -430,7 +421,7 @@ grpc_byte_buffer_reader_test: grpc_byte_buffer_reader_test.exe
echo Running grpc_byte_buffer_reader_test
$(OUT_DIR)\grpc_byte_buffer_reader_test.exe
-grpc_channel_stack_test.exe: grpc_test_util
+grpc_channel_stack_test.exe: grpc_test_util $(OUT_DIR)
echo Building grpc_channel_stack_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\channel\channel_stack_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\grpc_channel_stack_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\channel_stack_test.obj
@@ -438,7 +429,7 @@ grpc_channel_stack_test: grpc_channel_stack_test.exe
echo Running grpc_channel_stack_test
$(OUT_DIR)\grpc_channel_stack_test.exe
-grpc_completion_queue_benchmark.exe: grpc_test_util
+grpc_completion_queue_benchmark.exe: grpc_test_util $(OUT_DIR)
echo Building grpc_completion_queue_benchmark
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\surface\completion_queue_benchmark.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\grpc_completion_queue_benchmark.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\completion_queue_benchmark.obj
@@ -446,7 +437,7 @@ grpc_completion_queue_benchmark: grpc_completion_queue_benchmark.exe
echo Running grpc_completion_queue_benchmark
$(OUT_DIR)\grpc_completion_queue_benchmark.exe
-grpc_completion_queue_test.exe: grpc_test_util
+grpc_completion_queue_test.exe: grpc_test_util $(OUT_DIR)
echo Building grpc_completion_queue_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\surface\completion_queue_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\grpc_completion_queue_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\completion_queue_test.obj
@@ -454,7 +445,7 @@ grpc_completion_queue_test: grpc_completion_queue_test.exe
echo Running grpc_completion_queue_test
$(OUT_DIR)\grpc_completion_queue_test.exe
-grpc_create_jwt.exe: grpc_test_util
+grpc_create_jwt.exe: grpc_test_util $(OUT_DIR)
echo Building grpc_create_jwt
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\security\create_jwt.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\grpc_create_jwt.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\create_jwt.obj
@@ -462,7 +453,7 @@ grpc_create_jwt: grpc_create_jwt.exe
echo Running grpc_create_jwt
$(OUT_DIR)\grpc_create_jwt.exe
-grpc_credentials_test.exe: grpc_test_util
+grpc_credentials_test.exe: grpc_test_util $(OUT_DIR)
echo Building grpc_credentials_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\security\credentials_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\grpc_credentials_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\credentials_test.obj
@@ -470,7 +461,7 @@ grpc_credentials_test: grpc_credentials_test.exe
echo Running grpc_credentials_test
$(OUT_DIR)\grpc_credentials_test.exe
-grpc_fetch_oauth2.exe: grpc_test_util
+grpc_fetch_oauth2.exe: grpc_test_util $(OUT_DIR)
echo Building grpc_fetch_oauth2
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\security\fetch_oauth2.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\grpc_fetch_oauth2.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\fetch_oauth2.obj
@@ -478,7 +469,7 @@ grpc_fetch_oauth2: grpc_fetch_oauth2.exe
echo Running grpc_fetch_oauth2
$(OUT_DIR)\grpc_fetch_oauth2.exe
-grpc_json_token_test.exe: grpc_test_util
+grpc_json_token_test.exe: grpc_test_util $(OUT_DIR)
echo Building grpc_json_token_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\security\json_token_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\grpc_json_token_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\json_token_test.obj
@@ -486,7 +477,7 @@ grpc_json_token_test: grpc_json_token_test.exe
echo Running grpc_json_token_test
$(OUT_DIR)\grpc_json_token_test.exe
-grpc_print_google_default_creds_token.exe: grpc_test_util
+grpc_print_google_default_creds_token.exe: grpc_test_util $(OUT_DIR)
echo Building grpc_print_google_default_creds_token
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\security\print_google_default_creds_token.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\grpc_print_google_default_creds_token.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\print_google_default_creds_token.obj
@@ -494,7 +485,7 @@ grpc_print_google_default_creds_token: grpc_print_google_default_creds_token.exe
echo Running grpc_print_google_default_creds_token
$(OUT_DIR)\grpc_print_google_default_creds_token.exe
-grpc_stream_op_test.exe: grpc_test_util
+grpc_stream_op_test.exe: grpc_test_util $(OUT_DIR)
echo Building grpc_stream_op_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\transport\stream_op_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\grpc_stream_op_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\stream_op_test.obj
@@ -502,7 +493,7 @@ grpc_stream_op_test: grpc_stream_op_test.exe
echo Running grpc_stream_op_test
$(OUT_DIR)\grpc_stream_op_test.exe
-hpack_parser_test.exe: grpc_test_util
+hpack_parser_test.exe: grpc_test_util $(OUT_DIR)
echo Building hpack_parser_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\transport\chttp2\hpack_parser_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\hpack_parser_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\hpack_parser_test.obj
@@ -510,7 +501,7 @@ hpack_parser_test: hpack_parser_test.exe
echo Running hpack_parser_test
$(OUT_DIR)\hpack_parser_test.exe
-hpack_table_test.exe: grpc_test_util
+hpack_table_test.exe: grpc_test_util $(OUT_DIR)
echo Building hpack_table_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\transport\chttp2\hpack_table_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\hpack_table_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\hpack_table_test.obj
@@ -518,7 +509,7 @@ hpack_table_test: hpack_table_test.exe
echo Running hpack_table_test
$(OUT_DIR)\hpack_table_test.exe
-httpcli_format_request_test.exe: grpc_test_util
+httpcli_format_request_test.exe: grpc_test_util $(OUT_DIR)
echo Building httpcli_format_request_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\httpcli\format_request_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\httpcli_format_request_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\format_request_test.obj
@@ -526,7 +517,7 @@ httpcli_format_request_test: httpcli_format_request_test.exe
echo Running httpcli_format_request_test
$(OUT_DIR)\httpcli_format_request_test.exe
-httpcli_parser_test.exe: grpc_test_util
+httpcli_parser_test.exe: grpc_test_util $(OUT_DIR)
echo Building httpcli_parser_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\httpcli\parser_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\httpcli_parser_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\parser_test.obj
@@ -534,7 +525,7 @@ httpcli_parser_test: httpcli_parser_test.exe
echo Running httpcli_parser_test
$(OUT_DIR)\httpcli_parser_test.exe
-httpcli_test.exe: grpc_test_util
+httpcli_test.exe: grpc_test_util $(OUT_DIR)
echo Building httpcli_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\httpcli\httpcli_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\httpcli_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\httpcli_test.obj
@@ -542,7 +533,7 @@ httpcli_test: httpcli_test.exe
echo Running httpcli_test
$(OUT_DIR)\httpcli_test.exe
-json_rewrite.exe: grpc_test_util
+json_rewrite.exe: grpc_test_util $(OUT_DIR)
echo Building json_rewrite
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\json\json_rewrite.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\json_rewrite.exe" Debug\grpc.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\json_rewrite.obj
@@ -550,7 +541,7 @@ json_rewrite: json_rewrite.exe
echo Running json_rewrite
$(OUT_DIR)\json_rewrite.exe
-json_rewrite_test.exe: grpc_test_util
+json_rewrite_test.exe: grpc_test_util $(OUT_DIR)
echo Building json_rewrite_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\json\json_rewrite_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\json_rewrite_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\json_rewrite_test.obj
@@ -558,7 +549,7 @@ json_rewrite_test: json_rewrite_test.exe
echo Running json_rewrite_test
$(OUT_DIR)\json_rewrite_test.exe
-json_test.exe: grpc_test_util
+json_test.exe: grpc_test_util $(OUT_DIR)
echo Building json_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\json\json_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\json_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\json_test.obj
@@ -566,7 +557,7 @@ json_test: json_test.exe
echo Running json_test
$(OUT_DIR)\json_test.exe
-lame_client_test.exe: grpc_test_util
+lame_client_test.exe: grpc_test_util $(OUT_DIR)
echo Building lame_client_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\surface\lame_client_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\lame_client_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\lame_client_test.obj
@@ -574,7 +565,7 @@ lame_client_test: lame_client_test.exe
echo Running lame_client_test
$(OUT_DIR)\lame_client_test.exe
-low_level_ping_pong_benchmark.exe: grpc_test_util
+low_level_ping_pong_benchmark.exe: grpc_test_util $(OUT_DIR)
echo Building low_level_ping_pong_benchmark
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\network_benchmarks\low_level_ping_pong.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\low_level_ping_pong_benchmark.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\low_level_ping_pong.obj
@@ -582,7 +573,7 @@ low_level_ping_pong_benchmark: low_level_ping_pong_benchmark.exe
echo Running low_level_ping_pong_benchmark
$(OUT_DIR)\low_level_ping_pong_benchmark.exe
-message_compress_test.exe: grpc_test_util
+message_compress_test.exe: grpc_test_util $(OUT_DIR)
echo Building message_compress_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\compression\message_compress_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\message_compress_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\message_compress_test.obj
@@ -590,7 +581,7 @@ message_compress_test: message_compress_test.exe
echo Running message_compress_test
$(OUT_DIR)\message_compress_test.exe
-metadata_buffer_test.exe: grpc_test_util
+metadata_buffer_test.exe: grpc_test_util $(OUT_DIR)
echo Building metadata_buffer_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\channel\metadata_buffer_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\metadata_buffer_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\metadata_buffer_test.obj
@@ -598,7 +589,7 @@ metadata_buffer_test: metadata_buffer_test.exe
echo Running metadata_buffer_test
$(OUT_DIR)\metadata_buffer_test.exe
-multi_init_test.exe: grpc_test_util
+multi_init_test.exe: grpc_test_util $(OUT_DIR)
echo Building multi_init_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\surface\multi_init_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\multi_init_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\multi_init_test.obj
@@ -606,7 +597,7 @@ multi_init_test: multi_init_test.exe
echo Running multi_init_test
$(OUT_DIR)\multi_init_test.exe
-murmur_hash_test.exe: grpc_test_util
+murmur_hash_test.exe: grpc_test_util $(OUT_DIR)
echo Building murmur_hash_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\support\murmur_hash_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\murmur_hash_test.exe" Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\murmur_hash_test.obj
@@ -614,7 +605,7 @@ murmur_hash_test: murmur_hash_test.exe
echo Running murmur_hash_test
$(OUT_DIR)\murmur_hash_test.exe
-no_server_test.exe: grpc_test_util
+no_server_test.exe: grpc_test_util $(OUT_DIR)
echo Building no_server_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\end2end\no_server_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\no_server_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\no_server_test.obj
@@ -622,7 +613,7 @@ no_server_test: no_server_test.exe
echo Running no_server_test
$(OUT_DIR)\no_server_test.exe
-poll_kick_posix_test.exe: grpc_test_util
+poll_kick_posix_test.exe: grpc_test_util $(OUT_DIR)
echo Building poll_kick_posix_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\iomgr\poll_kick_posix_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\poll_kick_posix_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\poll_kick_posix_test.obj
@@ -630,7 +621,7 @@ poll_kick_posix_test: poll_kick_posix_test.exe
echo Running poll_kick_posix_test
$(OUT_DIR)\poll_kick_posix_test.exe
-resolve_address_test.exe: grpc_test_util
+resolve_address_test.exe: grpc_test_util $(OUT_DIR)
echo Building resolve_address_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\iomgr\resolve_address_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\resolve_address_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\resolve_address_test.obj
@@ -638,7 +629,7 @@ resolve_address_test: resolve_address_test.exe
echo Running resolve_address_test
$(OUT_DIR)\resolve_address_test.exe
-secure_endpoint_test.exe: grpc_test_util
+secure_endpoint_test.exe: grpc_test_util $(OUT_DIR)
echo Building secure_endpoint_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\security\secure_endpoint_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\secure_endpoint_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\secure_endpoint_test.obj
@@ -646,7 +637,7 @@ secure_endpoint_test: secure_endpoint_test.exe
echo Running secure_endpoint_test
$(OUT_DIR)\secure_endpoint_test.exe
-sockaddr_utils_test.exe: grpc_test_util
+sockaddr_utils_test.exe: grpc_test_util $(OUT_DIR)
echo Building sockaddr_utils_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\iomgr\sockaddr_utils_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\sockaddr_utils_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\sockaddr_utils_test.obj
@@ -654,7 +645,7 @@ sockaddr_utils_test: sockaddr_utils_test.exe
echo Running sockaddr_utils_test
$(OUT_DIR)\sockaddr_utils_test.exe
-tcp_client_posix_test.exe: grpc_test_util
+tcp_client_posix_test.exe: grpc_test_util $(OUT_DIR)
echo Building tcp_client_posix_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\iomgr\tcp_client_posix_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\tcp_client_posix_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\tcp_client_posix_test.obj
@@ -662,7 +653,7 @@ tcp_client_posix_test: tcp_client_posix_test.exe
echo Running tcp_client_posix_test
$(OUT_DIR)\tcp_client_posix_test.exe
-tcp_posix_test.exe: grpc_test_util
+tcp_posix_test.exe: grpc_test_util $(OUT_DIR)
echo Building tcp_posix_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\iomgr\tcp_posix_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\tcp_posix_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\tcp_posix_test.obj
@@ -670,7 +661,7 @@ tcp_posix_test: tcp_posix_test.exe
echo Running tcp_posix_test
$(OUT_DIR)\tcp_posix_test.exe
-tcp_server_posix_test.exe: grpc_test_util
+tcp_server_posix_test.exe: grpc_test_util $(OUT_DIR)
echo Building tcp_server_posix_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\iomgr\tcp_server_posix_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\tcp_server_posix_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\tcp_server_posix_test.obj
@@ -678,7 +669,7 @@ tcp_server_posix_test: tcp_server_posix_test.exe
echo Running tcp_server_posix_test
$(OUT_DIR)\tcp_server_posix_test.exe
-time_averaged_stats_test.exe: grpc_test_util
+time_averaged_stats_test.exe: grpc_test_util $(OUT_DIR)
echo Building time_averaged_stats_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\iomgr\time_averaged_stats_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\time_averaged_stats_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\time_averaged_stats_test.obj
@@ -686,7 +677,7 @@ time_averaged_stats_test: time_averaged_stats_test.exe
echo Running time_averaged_stats_test
$(OUT_DIR)\time_averaged_stats_test.exe
-time_test.exe: grpc_test_util
+time_test.exe: grpc_test_util $(OUT_DIR)
echo Building time_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\support\time_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\time_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\time_test.obj
@@ -694,7 +685,7 @@ time_test: time_test.exe
echo Running time_test
$(OUT_DIR)\time_test.exe
-timeout_encoding_test.exe: grpc_test_util
+timeout_encoding_test.exe: grpc_test_util $(OUT_DIR)
echo Building timeout_encoding_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\transport\chttp2\timeout_encoding_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\timeout_encoding_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\timeout_encoding_test.obj
@@ -702,7 +693,15 @@ timeout_encoding_test: timeout_encoding_test.exe
echo Running timeout_encoding_test
$(OUT_DIR)\timeout_encoding_test.exe
-transport_metadata_test.exe: grpc_test_util
+timers_test.exe: grpc_test_util $(OUT_DIR)
+ echo Building timers_test
+ $(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\profiling\timers_test.c
+ $(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\timers_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\timers_test.obj
+timers_test: timers_test.exe
+ echo Running timers_test
+ $(OUT_DIR)\timers_test.exe
+
+transport_metadata_test.exe: grpc_test_util $(OUT_DIR)
echo Building transport_metadata_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\transport\metadata_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\transport_metadata_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\metadata_test.obj
@@ -710,7 +709,7 @@ transport_metadata_test: transport_metadata_test.exe
echo Running transport_metadata_test
$(OUT_DIR)\transport_metadata_test.exe
-transport_security_test.exe: grpc_test_util
+transport_security_test.exe: grpc_test_util $(OUT_DIR)
echo Building transport_security_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\tsi\transport_security_test.c
$(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\transport_security_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\transport_security_test.obj
diff --git a/vsprojects/vs2013/grpc.vcxproj b/vsprojects/vs2013/grpc.vcxproj
index a88eb34ab8..4c7f0fad2e 100644
--- a/vsprojects/vs2013/grpc.vcxproj
+++ b/vsprojects/vs2013/grpc.vcxproj
@@ -150,6 +150,8 @@
<ClInclude Include="..\..\src\core\json\json_common.h" />
<ClInclude Include="..\..\src\core\json\json_reader.h" />
<ClInclude Include="..\..\src\core\json\json_writer.h" />
+ <ClInclude Include="..\..\src\core\profiling\timers.h" />
+ <ClInclude Include="..\..\src\core\profiling\timers_preciseclock.h" />
<ClInclude Include="..\..\src\core\statistics\census_interface.h" />
<ClInclude Include="..\..\src\core\statistics\census_log.h" />
<ClInclude Include="..\..\src\core\statistics\census_rpc_stats.h" />
@@ -272,6 +274,8 @@
</ClCompile>
<ClCompile Include="..\..\src\core\iomgr\endpoint_pair_posix.c">
</ClCompile>
+ <ClCompile Include="..\..\src\core\iomgr\endpoint_pair_windows.c">
+ </ClCompile>
<ClCompile Include="..\..\src\core\iomgr\fd_posix.c">
</ClCompile>
<ClCompile Include="..\..\src\core\iomgr\iocp_windows.c">
@@ -336,6 +340,8 @@
</ClCompile>
<ClCompile Include="..\..\src\core\json\json_writer.c">
</ClCompile>
+ <ClCompile Include="..\..\src\core\profiling\timers.c">
+ </ClCompile>
<ClCompile Include="..\..\src\core\statistics\census_init.c">
</ClCompile>
<ClCompile Include="..\..\src\core\statistics\census_log.c">
diff --git a/vsprojects/vs2013/grpc.vcxproj.filters b/vsprojects/vs2013/grpc.vcxproj.filters
index 20dbe8c444..7774a78040 100644
--- a/vsprojects/vs2013/grpc.vcxproj.filters
+++ b/vsprojects/vs2013/grpc.vcxproj.filters
@@ -124,6 +124,9 @@
<ClCompile Include="..\..\src\core\iomgr\endpoint_pair_posix.c">
<Filter>src\core\iomgr</Filter>
</ClCompile>
+ <ClCompile Include="..\..\src\core\iomgr\endpoint_pair_windows.c">
+ <Filter>src\core\iomgr</Filter>
+ </ClCompile>
<ClCompile Include="..\..\src\core\iomgr\fd_posix.c">
<Filter>src\core\iomgr</Filter>
</ClCompile>
@@ -220,6 +223,9 @@
<ClCompile Include="..\..\src\core\json\json_writer.c">
<Filter>src\core\json</Filter>
</ClCompile>
+ <ClCompile Include="..\..\src\core\profiling\timers.c">
+ <Filter>src\core\profiling</Filter>
+ </ClCompile>
<ClCompile Include="..\..\src\core\statistics\census_init.c">
<Filter>src\core\statistics</Filter>
</ClCompile>
@@ -566,6 +572,12 @@
<ClInclude Include="..\..\src\core\json\json_writer.h">
<Filter>src\core\json</Filter>
</ClInclude>
+ <ClInclude Include="..\..\src\core\profiling\timers.h">
+ <Filter>src\core\profiling</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\src\core\profiling\timers_preciseclock.h">
+ <Filter>src\core\profiling</Filter>
+ </ClInclude>
<ClInclude Include="..\..\src\core\statistics\census_interface.h">
<Filter>src\core\statistics</Filter>
</ClInclude>
@@ -713,6 +725,9 @@
<Filter Include="src\core\json">
<UniqueIdentifier>{e665cc0e-b994-d7c5-cc18-2007392019f0}</UniqueIdentifier>
</Filter>
+ <Filter Include="src\core\profiling">
+ <UniqueIdentifier>{87674b72-0f05-0469-481a-bd8c7af9ad80}</UniqueIdentifier>
+ </Filter>
<Filter Include="src\core\security">
<UniqueIdentifier>{1d850ac6-e639-4eab-5338-4ba40272fcc9}</UniqueIdentifier>
</Filter>
diff --git a/vsprojects/vs2013/grpc_test_util.vcxproj b/vsprojects/vs2013/grpc_test_util.vcxproj
index 4756f53928..d25fd7cbf1 100644
--- a/vsprojects/vs2013/grpc_test_util.vcxproj
+++ b/vsprojects/vs2013/grpc_test_util.vcxproj
@@ -98,6 +98,8 @@
</ClCompile>
<ClCompile Include="..\..\test\core\util\port_posix.c">
</ClCompile>
+ <ClCompile Include="..\..\test\core\util\port_windows.c">
+ </ClCompile>
<ClCompile Include="..\..\test\core\util\slice_splitter.c">
</ClCompile>
</ItemGroup>
diff --git a/vsprojects/vs2013/grpc_unsecure.vcxproj b/vsprojects/vs2013/grpc_unsecure.vcxproj
index 98c14c2fdb..a31d82aa5f 100644
--- a/vsprojects/vs2013/grpc_unsecure.vcxproj
+++ b/vsprojects/vs2013/grpc_unsecure.vcxproj
@@ -134,6 +134,8 @@
<ClInclude Include="..\..\src\core\json\json_common.h" />
<ClInclude Include="..\..\src\core\json\json_reader.h" />
<ClInclude Include="..\..\src\core\json\json_writer.h" />
+ <ClInclude Include="..\..\src\core\profiling\timers.h" />
+ <ClInclude Include="..\..\src\core\profiling\timers_preciseclock.h" />
<ClInclude Include="..\..\src\core\statistics\census_interface.h" />
<ClInclude Include="..\..\src\core\statistics\census_log.h" />
<ClInclude Include="..\..\src\core\statistics\census_rpc_stats.h" />
@@ -216,6 +218,8 @@
</ClCompile>
<ClCompile Include="..\..\src\core\iomgr\endpoint_pair_posix.c">
</ClCompile>
+ <ClCompile Include="..\..\src\core\iomgr\endpoint_pair_windows.c">
+ </ClCompile>
<ClCompile Include="..\..\src\core\iomgr\fd_posix.c">
</ClCompile>
<ClCompile Include="..\..\src\core\iomgr\iocp_windows.c">
@@ -280,6 +284,8 @@
</ClCompile>
<ClCompile Include="..\..\src\core\json\json_writer.c">
</ClCompile>
+ <ClCompile Include="..\..\src\core\profiling\timers.c">
+ </ClCompile>
<ClCompile Include="..\..\src\core\statistics\census_init.c">
</ClCompile>
<ClCompile Include="..\..\src\core\statistics\census_log.c">
diff --git a/vsprojects/vs2013/grpc_unsecure.vcxproj.filters b/vsprojects/vs2013/grpc_unsecure.vcxproj.filters
index 4b758d6113..cec8f78bae 100644
--- a/vsprojects/vs2013/grpc_unsecure.vcxproj.filters
+++ b/vsprojects/vs2013/grpc_unsecure.vcxproj.filters
@@ -64,6 +64,9 @@
<ClCompile Include="..\..\src\core\iomgr\endpoint_pair_posix.c">
<Filter>src\core\iomgr</Filter>
</ClCompile>
+ <ClCompile Include="..\..\src\core\iomgr\endpoint_pair_windows.c">
+ <Filter>src\core\iomgr</Filter>
+ </ClCompile>
<ClCompile Include="..\..\src\core\iomgr\fd_posix.c">
<Filter>src\core\iomgr</Filter>
</ClCompile>
@@ -160,6 +163,9 @@
<ClCompile Include="..\..\src\core\json\json_writer.c">
<Filter>src\core\json</Filter>
</ClCompile>
+ <ClCompile Include="..\..\src\core\profiling\timers.c">
+ <Filter>src\core\profiling</Filter>
+ </ClCompile>
<ClCompile Include="..\..\src\core\statistics\census_init.c">
<Filter>src\core\statistics</Filter>
</ClCompile>
@@ -458,6 +464,12 @@
<ClInclude Include="..\..\src\core\json\json_writer.h">
<Filter>src\core\json</Filter>
</ClInclude>
+ <ClInclude Include="..\..\src\core\profiling\timers.h">
+ <Filter>src\core\profiling</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\src\core\profiling\timers_preciseclock.h">
+ <Filter>src\core\profiling</Filter>
+ </ClInclude>
<ClInclude Include="..\..\src\core\statistics\census_interface.h">
<Filter>src\core\statistics</Filter>
</ClInclude>
@@ -602,6 +614,9 @@
<Filter Include="src\core\json">
<UniqueIdentifier>{443ffc61-1bea-2477-6e54-1ddf8c139264}</UniqueIdentifier>
</Filter>
+ <Filter Include="src\core\profiling">
+ <UniqueIdentifier>{7f91d9bf-c9de-835a-d74d-b16f843b89a9}</UniqueIdentifier>
+ </Filter>
<Filter Include="src\core\statistics">
<UniqueIdentifier>{e084164c-a069-00e3-db35-4e0b1cd6f0b7}</UniqueIdentifier>
</Filter>