diff --git a/.clang-format b/.clang-format index 38804f78c4ebef7eb30e3d1a44195bd894fde905..4b3f13fa55e123778ee7fcef26752ca6fbe5ba89 100644 --- a/.clang-format +++ b/.clang-format @@ -1,65 +1,5 @@ --- Language: Cpp -# BasedOnStyle: Google -AccessModifierOffset: -1 -AlignAfterOpenBracket: true -AlignEscapedNewlinesLeft: true -AlignOperands: true -AlignTrailingComments: true -AllowAllParametersOfDeclarationOnNextLine: true -AllowShortBlocksOnASingleLine: false -AllowShortCaseLabelsOnASingleLine: false -AllowShortIfStatementsOnASingleLine: true -AllowShortLoopsOnASingleLine: true -AllowShortFunctionsOnASingleLine: All -AlwaysBreakAfterDefinitionReturnType: false -AlwaysBreakTemplateDeclarations: true -AlwaysBreakBeforeMultilineStrings: true -BreakBeforeBinaryOperators: None -BreakBeforeTernaryOperators: true -BreakConstructorInitializersBeforeComma: false -BinPackParameters: true -BinPackArguments: true -ColumnLimit: 80 -ConstructorInitializerAllOnOneLineOrOnePerLine: true -ConstructorInitializerIndentWidth: 4 -DerivePointerAlignment: true -ExperimentalAutoDetectBinPacking: false -IndentCaseLabels: true -IndentWrappedFunctionNames: false -IndentFunctionDeclarationAfterType: false -MaxEmptyLinesToKeep: 1 -KeepEmptyLinesAtTheStartOfBlocks: false -NamespaceIndentation: None -ObjCBlockIndentWidth: 2 -ObjCSpaceAfterProperty: false -ObjCSpaceBeforeProtocolList: false -PenaltyBreakBeforeFirstCallParameter: 1 -PenaltyBreakComment: 300 -PenaltyBreakString: 1000 -PenaltyBreakFirstLessLess: 120 -PenaltyExcessCharacter: 1000000 -PenaltyReturnTypeOnItsOwnLine: 200 -PointerAlignment: Left -SpacesBeforeTrailingComments: 2 -Cpp11BracedListStyle: true -Standard: Auto -IndentWidth: 2 -TabWidth: 8 -UseTab: Never -BreakBeforeBraces: Attach -SpacesInParentheses: false -SpacesInSquareBrackets: false -SpacesInAngles: false -SpaceInEmptyParentheses: false -SpacesInCStyleCastParentheses: false -SpaceAfterCStyleCast: false -SpacesInContainerLiterals: true -SpaceBeforeAssignmentOperators: true -ContinuationIndentWidth: 4 -CommentPragmas: '^ IWYU pragma:' -ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ] -SpaceBeforeParens: ControlStatements -DisableFormat: false +BasedOnStyle: Google ... diff --git a/.gitignore b/.gitignore index 3cae07ed12fb99adfecd0f135675fab3cf473803..002e3e661cbd18bc614b4a7333bef3884217d21e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,24 @@ +# C/C++ build outputs bins -coverage -deps -*.gcno gens libs objs + +# Python virtual environment (pre-3.4 only) +python2.7_virtual_environment + +# gcov coverage data +coverage +*.gcno + +# profiler output +*.prof + +# python compiled objects *.pyc + +# cache for run_tests.py +.run_tests_cache + +# emacs temp files +*~ \ No newline at end of file diff --git a/INSTALL b/INSTALL index a9b0b58aa6e0db3888dd00985c4b0ca4b9c0907a..48511aff7df9bb9650aa58037c9c5c8b6d272d6a 100644 --- a/INSTALL +++ b/INSTALL @@ -1,83 +1,142 @@ -Dependencies -============ +These instructions only cover building grpc C and C++ libraries under +typical unix systems. If you need more information, please try grpc's +wiki pages: -grpc has few external dependencies. If needed, they are present in the -third_party directory, if you have cloned the github repository recursively. -If you didn't clone recursively, you can still get them later by running the -following command: + https://github.com/google/grpc/wiki -$ git submodule update --init -Note that the Makefile makes it much easier for you to compile from sources -if you were to clone recursively our git repository. +************************* +* If you are in a hurry * +************************* +A typical unix installation won't require any more steps than running: -grpc core currently depends on zlib and OpenSSL 1.0.2beta3. + $ make + # make install -grpc++'s tests depends on protobuf 3.0.0, gtests and gflags. +You don't need anything else than GNU Make and gcc. Under a Debian or +Ubuntu system, this should boil down to the following package: -OpenSSL -------- + # apt-get install build-essential python-all-dev python-virtualenv -Secure HTTP2 requires to have the TLS extension ALPN (see rfc 7301 and -http://http2.github.io/http2-spec/ section 3.3). Our HTTP2 implementation -relies on OpenSSL's implementation. OpenSSL 1.0.2beta3 is the first version -of OpenSSL that has ALPN support, and this explains our dependency on it. -Note that the Makefile supports compiling only the unsecure elements of grpc, -and if you do not have OpenSSL and do not want it, you can still proceed -with installing only the elements you require. However, it is recommended -to encrypt your network traffic, therefore we urge you to not use the unsecure -version of grpc if possible. +******************************* +* More detailled instructions * +******************************* +Setting up dependencies +======================= -Compiling -========= +Dependencies to compile the libraries +------------------------------------- -If you have all the dependencies in the third_party subfolder, you should -simply be able to go ahead and run "make" to compile grpc. The other targets -that you might find interesting are "buildtests" and "test". +grpc libraries have few external dependencies. If you need to compile and +install them, they are present in the third_party directory if you have +cloned the github repository recursively. If you didn't clone recursively, +you can still get them later by running the following command: -If you didn't clone from git, and thus are unable to get the required -dependencies, you can manually download and unpack the necessary packages, -and let the Makefile build them itself. + $ git submodule update --init -You may also install the dependencies yourself, from the sources, or from -your distribution's package manager. +Note that the Makefile makes it much easier for you to compile from sources +if you were to clone recursively our git repository: it will automatically +compile zlib and OpenSSL, which are core requirements for grpc. Note this +creates grpc libraries that will have zlib and OpenSSL built-in inside of them, +which significantly increases the libraries' size. + +In order to decrease that size, you can manually install zlib and OpenSSL on +your system, so that the Makefile can use them instead. + +Under a Debian or Ubuntu system, one can acquire the development package +for zlib this way: -The only development package needed for grpc is zlib. -The development packages needed for grpc++'s tests are gtests, and gflags. + # apt-get install zlib1g-dev To the best of our knowledge, no distribution has an OpenSSL package that supports ALPN yet, so you would still have to depend on installing from source -for that particular dependency. +for that particular dependency if you want to reduce the libraries' size. The recommended version of OpenSSL that provides ALPN support is available at this URL: https://www.openssl.org/source/openssl-1.0.2-beta3.tar.gz -If you want to let the Makefile build them automatically for you, please -extract them in the third_party folder. You will need to rename the extracted -folder the following way: - openssl-1.0.2-beta3 --> openssl +Dependencies to compile and run the tests +----------------------------------------- + +Compiling and running grpc plain-C tests dont't require any more dependency. + + +Compiling and running grpc C++ tests depend on protobuf 3.0.0, gtest and +gflags. Although gflags and protobuf are provided in third_party, you will +need to manually install these dependencies on your system to run these tests. + +Under a Debian or Ubuntu system, you can install the gtests and gflags packages +using apt-get: + + # apt-get install libgflags-dev libgtest-dev + +However, protobuf 3.0.0 isn't in a debian package yet: you'll need to compile +and install it from the sources in the third_party. Note that if you already +have the protobuf and protoc packages installed on your system, they will most +likely interfere, and you'll need to uninstall them first. + +Compiling and installing protobuf 3.0.0 requires a few more dependencies in +itself, notably the autoconf suite, curl, and unzip. If you have apt-get, you +can install these dependencies this way: + + # apt-get install unzip curl autotools-dev + +Then, you can build and install protobuf 3.0.0: + + $ cd third_party/protobuf + $ ./configure + $ make + # make install + # ldconfig + + +A word on OpenSSL +----------------- + +Secure HTTP2 requires to have the TLS extension ALPN (see rfc 7301 and +http://http2.github.io/http2-spec/ section 3.3). Our HTTP2 implementation +relies on OpenSSL's implementation. OpenSSL 1.0.2beta3 is the first version +of OpenSSL that has ALPN support, and this explains our dependency on it. + +Note that the Makefile supports compiling only the unsecure elements of grpc, +and if you do not have OpenSSL and do not want it, you can still proceed +with installing only the elements you require. However, it is recommended +to encrypt your network traffic, therefore we urge you to not use the unsecure +version of grpc if possible. + + +Compiling +========= + +If you have all the dependencies mentioned above, you should simply be able +to go ahead and run "make" to compile grpc's C and C++ libraries: + + $ make Testing ======= -At the moment, C++ tests aren't fully available yet. If you want to run tests -on the C core of grpc, you can do the following: +To build and run the tests, you can run the command: + + $ make test + +If you want to be able to run them in parallel, and get better output, you can +also use the python tool we have written: -$ make buildtests_c -$ make test_c + $ ./tools/run_tests/run_tests.py Installing ========== -Once everything is compiled, you should be able to install grpc and grpc++ +Once everything is compiled, you should be able to install grpc C and C++ libraries and headers: -$ sudo make install + # make install diff --git a/Makefile b/Makefile index 388e5f3d79b3df5b80f66c5ba3c6b90595cd378a..14b708f89c99b7bf7724b43120867ca45624f8c3 100644 --- a/Makefile +++ b/Makefile @@ -2,6 +2,14 @@ # This currently builds C and C++ code. + +# Basic platform detection +HOST_SYSTEM = $(shell uname | cut -f 1 -d_) +ifeq ($(SYSTEM),) +SYSTEM = $(HOST_SYSTEM) +endif + + # Configurations VALID_CONFIG_opt = 1 @@ -22,30 +30,48 @@ CPPFLAGS_dbg = -O0 LDFLAGS_dbg = DEFINES_dbg = _DEBUG DEBUG +VALID_CONFIG_valgrind = 1 +REQUIRE_CUSTOM_LIBRARIES_valgrind = 1 +CC_valgrind = gcc +CXX_valgrind = g++ +LD_valgrind = gcc +LDXX_valgrind = g++ +CPPFLAGS_valgrind = -O0 +OPENSSL_CFLAGS_valgrind = -DPURIFY +LDFLAGS_valgrind = +DEFINES_valgrind = _DEBUG DEBUG + VALID_CONFIG_tsan = 1 +REQUIRE_CUSTOM_LIBRARIES_tsan = 1 CC_tsan = clang CXX_tsan = clang++ LD_tsan = clang LDXX_tsan = clang++ CPPFLAGS_tsan = -O1 -fsanitize=thread -fno-omit-frame-pointer +OPENSSL_CONFIG_tsan = no-asm LDFLAGS_tsan = -fsanitize=thread DEFINES_tsan = NDEBUG VALID_CONFIG_asan = 1 +REQUIRE_CUSTOM_LIBRARIES_asan = 1 CC_asan = clang CXX_asan = clang++ LD_asan = clang LDXX_asan = clang++ CPPFLAGS_asan = -O1 -fsanitize=address -fno-omit-frame-pointer +OPENSSL_CONFIG_asan = no-asm LDFLAGS_asan = -fsanitize=address DEFINES_asan = NDEBUG VALID_CONFIG_msan = 1 +REQUIRE_CUSTOM_LIBRARIES_msan = 1 CC_msan = clang CXX_msan = clang++ LD_msan = clang LDXX_msan = clang++ CPPFLAGS_msan = -O1 -fsanitize=memory -fno-omit-frame-pointer +OPENSSL_CFLAGS_msan = -DPURIFY +OPENSSL_CONFIG_msan = no-asm LDFLAGS_msan = -fsanitize=memory DEFINES_msan = NDEBUG @@ -58,6 +84,7 @@ CPPFLAGS_gcov = -O0 -fprofile-arcs -ftest-coverage LDFLAGS_gcov = -fprofile-arcs -ftest-coverage DEFINES_gcov = NDEBUG + # General settings. # You may want to change these depending on your system. @@ -78,6 +105,12 @@ ifndef VALID_CONFIG_$(CONFIG) $(error Invalid CONFIG value '$(CONFIG)') endif + +# The HOST compiler settings are used to compile the protoc plugins. +# In most cases, you won't have to change anything, but if you are +# cross-compiling, you can override these variables from GNU make's +# command line: make CC=cross-gcc HOST_CC=gcc + HOST_CC = $(CC) HOST_CXX = $(CXX) HOST_LD = $(LD) @@ -90,10 +123,15 @@ LDFLAGS += $(LDFLAGS_$(CONFIG)) CFLAGS += -std=c89 -pedantic CXXFLAGS += -std=c++11 CPPFLAGS += -g -fPIC -Wall -Werror -Wno-long-long -LDFLAGS += -g -pthread -fPIC +LDFLAGS += -g -fPIC INCLUDES = . include gens +ifeq ($(SYSTEM),Darwin) +LIBS = m z +else LIBS = rt m z pthread +LDFLAGS += -pthread +endif LIBSXX = protobuf LIBS_PROTOC = protoc protobuf @@ -131,11 +169,6 @@ HOST_LDLIBS = $(LDLIBS) # These are automatically computed variables. # There shouldn't be any need to change anything from now on. -HOST_SYSTEM = $(shell uname | cut -f 1 -d_) -ifeq ($(SYSTEM),) -SYSTEM = $(HOST_SYSTEM) -endif - ifeq ($(SYSTEM),MINGW32) SHARED_EXT = dll endif @@ -154,9 +187,22 @@ endif OPENSSL_ALPN_CHECK_CMD = $(CC) $(CFLAGS) $(CPPFLAGS) -o /dev/null test/build/openssl-alpn.c -lssl -lcrypto -ldl $(LDFLAGS) ZLIB_CHECK_CMD = $(CC) $(CFLAGS) $(CPPFLAGS) -o /dev/null test/build/zlib.c -lz $(LDFLAGS) +PERFTOOLS_CHECK_CMD = $(CC) $(CFLAGS) $(CPPFLAGS) -o /dev/null test/build/perftools.c -lprofiler $(LDFLAGS) + +HAS_SYSTEM_PERFTOOLS = $(shell $(PERFTOOLS_CHECK_CMD) 2> /dev/null && echo true || echo false) +ifeq ($(HAS_SYSTEM_PERFTOOLS),true) +DEFINES += GRPC_HAVE_PERFTOOLS +LIBS += profiler +endif +ifndef REQUIRE_CUSTOM_LIBRARIES_$(CONFIG) HAS_SYSTEM_OPENSSL_ALPN = $(shell $(OPENSSL_ALPN_CHECK_CMD) 2> /dev/null && echo true || echo false) HAS_SYSTEM_ZLIB = $(shell $(ZLIB_CHECK_CMD) 2> /dev/null && echo true || echo false) +else +# override system libraries if the config requires a custom compiled library +HAS_SYSTEM_OPENSSL_ALPN = false +HAS_SYSTEM_ZLIB = false +endif ifeq ($(wildcard third_party/openssl/ssl/ssl.h),) HAS_EMBEDDED_OPENSSL_ALPN = false @@ -172,7 +218,7 @@ endif ifeq ($(HAS_SYSTEM_ZLIB),false) ifeq ($(HAS_EMBEDDED_ZLIB),true) -ZLIB_DEP = third_party/zlib/libz.a +ZLIB_DEP = libs/$(CONFIG)/zlib/libz.a CPPFLAGS += -Ithird_party/zlib LDFLAGS += -Lthird_party/zlib else @@ -182,10 +228,10 @@ endif ifeq ($(HAS_SYSTEM_OPENSSL_ALPN),false) ifeq ($(HAS_EMBEDDED_OPENSSL_ALPN),true) -OPENSSL_DEP = third_party/openssl/libssl.a -OPENSSL_MERGE_LIBS += third_party/openssl/libssl.a third_party/openssl/libcrypto.a +OPENSSL_DEP = libs/$(CONFIG)/openssl/libssl.a +OPENSSL_MERGE_LIBS += libs/$(CONFIG)/openssl/libssl.a libs/$(CONFIG)/openssl/libcrypto.a CPPFLAGS += -Ithird_party/openssl/include -LDFLAGS += -Lthird_party/openssl +LDFLAGS += -Llibs/$(CONFIG)/openssl LIBS_SECURE = dl else NO_SECURE = true @@ -196,16 +242,13 @@ endif LDLIBS_SECURE += $(addprefix -l, $(LIBS_SECURE)) -ifneq ($(DEP_MISSING),) -NO_DEPS = true -endif - -ifneq ($(MAKECMDGOALS),clean) +ifeq ($(MAKECMDGOALS),clean) NO_DEPS = true endif .SECONDARY = %.pb.h %.pb.cc +PROTOC_PLUGINS= bins/$(CONFIG)/cpp_plugin bins/$(CONFIG)/ruby_plugin ifeq ($(DEP_MISSING),) all: static shared dep_error: @@ -259,89 +302,92 @@ openssl_dep_message: stop: @false +alarm_heap_test: bins/$(CONFIG)/alarm_heap_test +alarm_list_test: bins/$(CONFIG)/alarm_list_test +alarm_test: bins/$(CONFIG)/alarm_test +alpn_test: bins/$(CONFIG)/alpn_test +bin_encoder_test: bins/$(CONFIG)/bin_encoder_test +census_hash_table_test: bins/$(CONFIG)/census_hash_table_test +census_statistics_multiple_writers_circular_buffer_test: bins/$(CONFIG)/census_statistics_multiple_writers_circular_buffer_test +census_statistics_multiple_writers_test: bins/$(CONFIG)/census_statistics_multiple_writers_test +census_statistics_performance_test: bins/$(CONFIG)/census_statistics_performance_test +census_statistics_quick_test: bins/$(CONFIG)/census_statistics_quick_test +census_statistics_small_log_test: bins/$(CONFIG)/census_statistics_small_log_test +census_stats_store_test: bins/$(CONFIG)/census_stats_store_test +census_stub_test: bins/$(CONFIG)/census_stub_test +census_trace_store_test: bins/$(CONFIG)/census_trace_store_test +census_window_stats_test: bins/$(CONFIG)/census_window_stats_test +chttp2_status_conversion_test: bins/$(CONFIG)/chttp2_status_conversion_test +chttp2_stream_encoder_test: bins/$(CONFIG)/chttp2_stream_encoder_test +chttp2_stream_map_test: bins/$(CONFIG)/chttp2_stream_map_test +chttp2_transport_end2end_test: bins/$(CONFIG)/chttp2_transport_end2end_test +dualstack_socket_test: bins/$(CONFIG)/dualstack_socket_test +echo_client: bins/$(CONFIG)/echo_client +echo_server: bins/$(CONFIG)/echo_server +echo_test: bins/$(CONFIG)/echo_test +fd_posix_test: bins/$(CONFIG)/fd_posix_test +fling_client: bins/$(CONFIG)/fling_client +fling_server: bins/$(CONFIG)/fling_server +fling_stream_test: bins/$(CONFIG)/fling_stream_test +fling_test: bins/$(CONFIG)/fling_test gen_hpack_tables: bins/$(CONFIG)/gen_hpack_tables -cpp_plugin: bins/$(CONFIG)/cpp_plugin -ruby_plugin: bins/$(CONFIG)/ruby_plugin -grpc_byte_buffer_reader_test: bins/$(CONFIG)/grpc_byte_buffer_reader_test gpr_cancellable_test: bins/$(CONFIG)/gpr_cancellable_test -gpr_log_test: bins/$(CONFIG)/gpr_log_test -gpr_useful_test: bins/$(CONFIG)/gpr_useful_test gpr_cmdline_test: bins/$(CONFIG)/gpr_cmdline_test gpr_histogram_test: bins/$(CONFIG)/gpr_histogram_test gpr_host_port_test: bins/$(CONFIG)/gpr_host_port_test +gpr_log_test: bins/$(CONFIG)/gpr_log_test gpr_slice_buffer_test: bins/$(CONFIG)/gpr_slice_buffer_test gpr_slice_test: bins/$(CONFIG)/gpr_slice_test gpr_string_test: bins/$(CONFIG)/gpr_string_test gpr_sync_test: bins/$(CONFIG)/gpr_sync_test gpr_thd_test: bins/$(CONFIG)/gpr_thd_test gpr_time_test: bins/$(CONFIG)/gpr_time_test -murmur_hash_test: bins/$(CONFIG)/murmur_hash_test +gpr_useful_test: bins/$(CONFIG)/gpr_useful_test +grpc_base64_test: bins/$(CONFIG)/grpc_base64_test +grpc_byte_buffer_reader_test: bins/$(CONFIG)/grpc_byte_buffer_reader_test +grpc_channel_stack_test: bins/$(CONFIG)/grpc_channel_stack_test +grpc_completion_queue_benchmark: bins/$(CONFIG)/grpc_completion_queue_benchmark +grpc_completion_queue_test: bins/$(CONFIG)/grpc_completion_queue_test +grpc_credentials_test: bins/$(CONFIG)/grpc_credentials_test +grpc_fetch_oauth2: bins/$(CONFIG)/grpc_fetch_oauth2 +grpc_json_token_test: bins/$(CONFIG)/grpc_json_token_test grpc_stream_op_test: bins/$(CONFIG)/grpc_stream_op_test -alpn_test: bins/$(CONFIG)/alpn_test -time_averaged_stats_test: bins/$(CONFIG)/time_averaged_stats_test -chttp2_stream_encoder_test: bins/$(CONFIG)/chttp2_stream_encoder_test -hpack_table_test: bins/$(CONFIG)/hpack_table_test -chttp2_stream_map_test: bins/$(CONFIG)/chttp2_stream_map_test hpack_parser_test: bins/$(CONFIG)/hpack_parser_test -transport_metadata_test: bins/$(CONFIG)/transport_metadata_test -chttp2_status_conversion_test: bins/$(CONFIG)/chttp2_status_conversion_test -chttp2_transport_end2end_test: bins/$(CONFIG)/chttp2_transport_end2end_test -tcp_posix_test: bins/$(CONFIG)/tcp_posix_test -dualstack_socket_test: bins/$(CONFIG)/dualstack_socket_test +hpack_table_test: bins/$(CONFIG)/hpack_table_test +httpcli_format_request_test: bins/$(CONFIG)/httpcli_format_request_test +httpcli_parser_test: bins/$(CONFIG)/httpcli_parser_test +httpcli_test: bins/$(CONFIG)/httpcli_test +lame_client_test: bins/$(CONFIG)/lame_client_test +low_level_ping_pong_benchmark: bins/$(CONFIG)/low_level_ping_pong_benchmark +message_compress_test: bins/$(CONFIG)/message_compress_test +metadata_buffer_test: bins/$(CONFIG)/metadata_buffer_test +murmur_hash_test: bins/$(CONFIG)/murmur_hash_test no_server_test: bins/$(CONFIG)/no_server_test +poll_kick_test: bins/$(CONFIG)/poll_kick_test resolve_address_test: bins/$(CONFIG)/resolve_address_test +secure_endpoint_test: bins/$(CONFIG)/secure_endpoint_test sockaddr_utils_test: bins/$(CONFIG)/sockaddr_utils_test -tcp_server_posix_test: bins/$(CONFIG)/tcp_server_posix_test tcp_client_posix_test: bins/$(CONFIG)/tcp_client_posix_test -grpc_channel_stack_test: bins/$(CONFIG)/grpc_channel_stack_test -metadata_buffer_test: bins/$(CONFIG)/metadata_buffer_test -grpc_completion_queue_test: bins/$(CONFIG)/grpc_completion_queue_test -grpc_completion_queue_benchmark: bins/$(CONFIG)/grpc_completion_queue_benchmark -census_trace_store_test: bins/$(CONFIG)/census_trace_store_test -census_stats_store_test: bins/$(CONFIG)/census_stats_store_test -census_window_stats_test: bins/$(CONFIG)/census_window_stats_test -census_statistics_quick_test: bins/$(CONFIG)/census_statistics_quick_test -census_statistics_small_log_test: bins/$(CONFIG)/census_statistics_small_log_test -census_statistics_performance_test: bins/$(CONFIG)/census_statistics_performance_test -census_statistics_multiple_writers_test: bins/$(CONFIG)/census_statistics_multiple_writers_test -census_statistics_multiple_writers_circular_buffer_test: bins/$(CONFIG)/census_statistics_multiple_writers_circular_buffer_test -census_stub_test: bins/$(CONFIG)/census_stub_test -census_hash_table_test: bins/$(CONFIG)/census_hash_table_test -fling_server: bins/$(CONFIG)/fling_server -fling_client: bins/$(CONFIG)/fling_client -fling_test: bins/$(CONFIG)/fling_test -echo_server: bins/$(CONFIG)/echo_server -echo_client: bins/$(CONFIG)/echo_client -echo_test: bins/$(CONFIG)/echo_test -low_level_ping_pong_benchmark: bins/$(CONFIG)/low_level_ping_pong_benchmark -message_compress_test: bins/$(CONFIG)/message_compress_test -bin_encoder_test: bins/$(CONFIG)/bin_encoder_test -secure_endpoint_test: bins/$(CONFIG)/secure_endpoint_test -httpcli_format_request_test: bins/$(CONFIG)/httpcli_format_request_test -httpcli_parser_test: bins/$(CONFIG)/httpcli_parser_test -httpcli_test: bins/$(CONFIG)/httpcli_test -grpc_credentials_test: bins/$(CONFIG)/grpc_credentials_test -grpc_fetch_oauth2: bins/$(CONFIG)/grpc_fetch_oauth2 -grpc_base64_test: bins/$(CONFIG)/grpc_base64_test -grpc_json_token_test: bins/$(CONFIG)/grpc_json_token_test +tcp_posix_test: bins/$(CONFIG)/tcp_posix_test +tcp_server_posix_test: bins/$(CONFIG)/tcp_server_posix_test +time_averaged_stats_test: bins/$(CONFIG)/time_averaged_stats_test +time_test: bins/$(CONFIG)/time_test timeout_encoding_test: bins/$(CONFIG)/timeout_encoding_test -fd_posix_test: bins/$(CONFIG)/fd_posix_test -fling_stream_test: bins/$(CONFIG)/fling_stream_test -lame_client_test: bins/$(CONFIG)/lame_client_test -thread_pool_test: bins/$(CONFIG)/thread_pool_test -status_test: bins/$(CONFIG)/status_test -sync_client_async_server_test: bins/$(CONFIG)/sync_client_async_server_test -qps_client: bins/$(CONFIG)/qps_client -qps_server: bins/$(CONFIG)/qps_server -interop_server: bins/$(CONFIG)/interop_server -interop_client: bins/$(CONFIG)/interop_client -end2end_test: bins/$(CONFIG)/end2end_test +transport_metadata_test: bins/$(CONFIG)/transport_metadata_test channel_arguments_test: bins/$(CONFIG)/channel_arguments_test +cpp_plugin: bins/$(CONFIG)/cpp_plugin credentials_test: bins/$(CONFIG)/credentials_test -alarm_test: bins/$(CONFIG)/alarm_test -alarm_list_test: bins/$(CONFIG)/alarm_list_test -alarm_heap_test: bins/$(CONFIG)/alarm_heap_test -time_test: bins/$(CONFIG)/time_test +end2end_test: bins/$(CONFIG)/end2end_test +interop_client: bins/$(CONFIG)/interop_client +interop_server: bins/$(CONFIG)/interop_server +tips_client: bins/$(CONFIG)/tips_client +tips_client_test: bins/$(CONFIG)/tips_client_test +qps_client: bins/$(CONFIG)/qps_client +qps_server: bins/$(CONFIG)/qps_server +ruby_plugin: bins/$(CONFIG)/ruby_plugin +status_test: bins/$(CONFIG)/status_test +sync_client_async_server_test: bins/$(CONFIG)/sync_client_async_server_test +thread_pool_test: bins/$(CONFIG)/thread_pool_test chttp2_fake_security_cancel_after_accept_test: bins/$(CONFIG)/chttp2_fake_security_cancel_after_accept_test chttp2_fake_security_cancel_after_accept_and_writes_closed_test: bins/$(CONFIG)/chttp2_fake_security_cancel_after_accept_and_writes_closed_test chttp2_fake_security_cancel_after_invoke_test: bins/$(CONFIG)/chttp2_fake_security_cancel_after_invoke_test @@ -351,6 +397,7 @@ chttp2_fake_security_census_simple_request_test: bins/$(CONFIG)/chttp2_fake_secu chttp2_fake_security_disappearing_server_test: bins/$(CONFIG)/chttp2_fake_security_disappearing_server_test chttp2_fake_security_early_server_shutdown_finishes_inflight_calls_test: bins/$(CONFIG)/chttp2_fake_security_early_server_shutdown_finishes_inflight_calls_test chttp2_fake_security_early_server_shutdown_finishes_tags_test: bins/$(CONFIG)/chttp2_fake_security_early_server_shutdown_finishes_tags_test +chttp2_fake_security_graceful_server_shutdown_test: bins/$(CONFIG)/chttp2_fake_security_graceful_server_shutdown_test chttp2_fake_security_invoke_large_request_test: bins/$(CONFIG)/chttp2_fake_security_invoke_large_request_test chttp2_fake_security_max_concurrent_streams_test: bins/$(CONFIG)/chttp2_fake_security_max_concurrent_streams_test chttp2_fake_security_no_op_test: bins/$(CONFIG)/chttp2_fake_security_no_op_test @@ -372,6 +419,7 @@ chttp2_fullstack_census_simple_request_test: bins/$(CONFIG)/chttp2_fullstack_cen chttp2_fullstack_disappearing_server_test: bins/$(CONFIG)/chttp2_fullstack_disappearing_server_test chttp2_fullstack_early_server_shutdown_finishes_inflight_calls_test: bins/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_inflight_calls_test chttp2_fullstack_early_server_shutdown_finishes_tags_test: bins/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_tags_test +chttp2_fullstack_graceful_server_shutdown_test: bins/$(CONFIG)/chttp2_fullstack_graceful_server_shutdown_test chttp2_fullstack_invoke_large_request_test: bins/$(CONFIG)/chttp2_fullstack_invoke_large_request_test chttp2_fullstack_max_concurrent_streams_test: bins/$(CONFIG)/chttp2_fullstack_max_concurrent_streams_test chttp2_fullstack_no_op_test: bins/$(CONFIG)/chttp2_fullstack_no_op_test @@ -393,6 +441,7 @@ chttp2_simple_ssl_fullstack_census_simple_request_test: bins/$(CONFIG)/chttp2_si chttp2_simple_ssl_fullstack_disappearing_server_test: bins/$(CONFIG)/chttp2_simple_ssl_fullstack_disappearing_server_test chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_inflight_calls_test: bins/$(CONFIG)/chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_inflight_calls_test chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_tags_test: bins/$(CONFIG)/chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_tags_test +chttp2_simple_ssl_fullstack_graceful_server_shutdown_test: bins/$(CONFIG)/chttp2_simple_ssl_fullstack_graceful_server_shutdown_test chttp2_simple_ssl_fullstack_invoke_large_request_test: bins/$(CONFIG)/chttp2_simple_ssl_fullstack_invoke_large_request_test chttp2_simple_ssl_fullstack_max_concurrent_streams_test: bins/$(CONFIG)/chttp2_simple_ssl_fullstack_max_concurrent_streams_test chttp2_simple_ssl_fullstack_no_op_test: bins/$(CONFIG)/chttp2_simple_ssl_fullstack_no_op_test @@ -414,6 +463,7 @@ chttp2_simple_ssl_with_oauth2_fullstack_census_simple_request_test: bins/$(CONFI chttp2_simple_ssl_with_oauth2_fullstack_disappearing_server_test: bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_disappearing_server_test chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_inflight_calls_test: bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_inflight_calls_test chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_tags_test: bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_tags_test +chttp2_simple_ssl_with_oauth2_fullstack_graceful_server_shutdown_test: bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_graceful_server_shutdown_test chttp2_simple_ssl_with_oauth2_fullstack_invoke_large_request_test: bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_invoke_large_request_test chttp2_simple_ssl_with_oauth2_fullstack_max_concurrent_streams_test: bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_max_concurrent_streams_test chttp2_simple_ssl_with_oauth2_fullstack_no_op_test: bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_no_op_test @@ -435,6 +485,7 @@ chttp2_socket_pair_census_simple_request_test: bins/$(CONFIG)/chttp2_socket_pair chttp2_socket_pair_disappearing_server_test: bins/$(CONFIG)/chttp2_socket_pair_disappearing_server_test chttp2_socket_pair_early_server_shutdown_finishes_inflight_calls_test: bins/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_inflight_calls_test chttp2_socket_pair_early_server_shutdown_finishes_tags_test: bins/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_tags_test +chttp2_socket_pair_graceful_server_shutdown_test: bins/$(CONFIG)/chttp2_socket_pair_graceful_server_shutdown_test chttp2_socket_pair_invoke_large_request_test: bins/$(CONFIG)/chttp2_socket_pair_invoke_large_request_test chttp2_socket_pair_max_concurrent_streams_test: bins/$(CONFIG)/chttp2_socket_pair_max_concurrent_streams_test chttp2_socket_pair_no_op_test: bins/$(CONFIG)/chttp2_socket_pair_no_op_test @@ -456,6 +507,7 @@ chttp2_socket_pair_one_byte_at_a_time_census_simple_request_test: bins/$(CONFIG) chttp2_socket_pair_one_byte_at_a_time_disappearing_server_test: bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_disappearing_server_test chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_inflight_calls_test: bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_inflight_calls_test chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_tags_test: bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_tags_test +chttp2_socket_pair_one_byte_at_a_time_graceful_server_shutdown_test: bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_graceful_server_shutdown_test chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_test: bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_test chttp2_socket_pair_one_byte_at_a_time_max_concurrent_streams_test: bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_max_concurrent_streams_test chttp2_socket_pair_one_byte_at_a_time_no_op_test: bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_no_op_test @@ -473,55 +525,107 @@ run_dep_checks: $(OPENSSL_ALPN_CHECK_CMD) || true $(ZLIB_CHECK_CMD) || true -third_party/zlib/libz.a: - (cd third_party/zlib ; CFLAGS="-fPIC -fvisibility=hidden" ./configure --static) - $(MAKE) -C third_party/zlib +libs/$(CONFIG)/zlib/libz.a: + $(E) "[MAKE] Building zlib" + $(Q)(cd third_party/zlib ; CC="$(CC)" CFLAGS="-fPIC -fvisibility=hidden $(CPPFLAGS_$(CONFIG))" ./configure --static) + $(Q)$(MAKE) -C third_party/zlib clean + $(Q)$(MAKE) -C third_party/zlib + $(Q)mkdir -p libs/$(CONFIG)/zlib + $(Q)cp third_party/zlib/libz.a libs/$(CONFIG)/zlib -third_party/openssl/libssl.a: - (cd third_party/openssl ; CC="$(CC) -fPIC -fvisibility=hidden" ./config) - $(MAKE) -C third_party/openssl build_crypto build_ssl +libs/$(CONFIG)/openssl/libssl.a: + $(E) "[MAKE] Building openssl for $(SYSTEM)" +ifeq ($(SYSTEM),Darwin) + $(Q)(cd third_party/openssl ; CC="$(CC) -fPIC -fvisibility=hidden $(CPPFLAGS_$(CONFIG)) $(OPENSSL_CFLAGS_$(CONFIG))" ./Configure darwin64-x86_64-cc $(OPENSSL_CONFIG_$(CONFIG))) +else + $(Q)(cd third_party/openssl ; CC="$(CC) -fPIC -fvisibility=hidden $(CPPFLAGS_$(CONFIG)) $(OPENSSL_CFLAGS_$(CONFIG))" ./config $(OPENSSL_CONFIG_$(CONFIG))) +endif + $(Q)$(MAKE) -C third_party/openssl clean + $(Q)$(MAKE) -C third_party/openssl build_crypto build_ssl + $(Q)mkdir -p libs/$(CONFIG)/openssl + $(Q)cp third_party/openssl/libssl.a third_party/openssl/libcrypto.a libs/$(CONFIG)/openssl static: static_c static_cxx -static_c: dep_c libs/$(CONFIG)/libgpr.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgrpc_unsecure.a +static_c: libs/$(CONFIG)/libgpr.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgrpc_unsecure.a -static_cxx: dep_cxx libs/$(CONFIG)/libgrpc++.a +static_cxx: libs/$(CONFIG)/libgrpc++.a shared: shared_c shared_cxx -shared_c: dep_c libs/$(CONFIG)/libgpr.$(SHARED_EXT) libs/$(CONFIG)/libgrpc.$(SHARED_EXT) libs/$(CONFIG)/libgrpc_unsecure.$(SHARED_EXT) +shared_c: libs/$(CONFIG)/libgpr.$(SHARED_EXT) libs/$(CONFIG)/libgrpc.$(SHARED_EXT) libs/$(CONFIG)/libgrpc_unsecure.$(SHARED_EXT) -shared_cxx: dep_cxx libs/$(CONFIG)/libgrpc++.$(SHARED_EXT) +shared_cxx: libs/$(CONFIG)/libgrpc++.$(SHARED_EXT) privatelibs: privatelibs_c privatelibs_cxx -privatelibs_c: dep_c libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libend2end_fixture_chttp2_fake_security.a libs/$(CONFIG)/libend2end_fixture_chttp2_fullstack.a libs/$(CONFIG)/libend2end_fixture_chttp2_simple_ssl_fullstack.a libs/$(CONFIG)/libend2end_fixture_chttp2_simple_ssl_with_oauth2_fullstack.a libs/$(CONFIG)/libend2end_fixture_chttp2_socket_pair.a libs/$(CONFIG)/libend2end_fixture_chttp2_socket_pair_one_byte_at_a_time.a libs/$(CONFIG)/libend2end_test_cancel_after_accept.a libs/$(CONFIG)/libend2end_test_cancel_after_accept_and_writes_closed.a libs/$(CONFIG)/libend2end_test_cancel_after_invoke.a libs/$(CONFIG)/libend2end_test_cancel_before_invoke.a libs/$(CONFIG)/libend2end_test_cancel_in_a_vacuum.a libs/$(CONFIG)/libend2end_test_census_simple_request.a libs/$(CONFIG)/libend2end_test_disappearing_server.a libs/$(CONFIG)/libend2end_test_early_server_shutdown_finishes_inflight_calls.a libs/$(CONFIG)/libend2end_test_early_server_shutdown_finishes_tags.a libs/$(CONFIG)/libend2end_test_invoke_large_request.a libs/$(CONFIG)/libend2end_test_max_concurrent_streams.a libs/$(CONFIG)/libend2end_test_no_op.a libs/$(CONFIG)/libend2end_test_ping_pong_streaming.a libs/$(CONFIG)/libend2end_test_request_response_with_binary_metadata_and_payload.a libs/$(CONFIG)/libend2end_test_request_response_with_metadata_and_payload.a libs/$(CONFIG)/libend2end_test_request_response_with_payload.a libs/$(CONFIG)/libend2end_test_request_response_with_trailing_metadata_and_payload.a libs/$(CONFIG)/libend2end_test_simple_delayed_request.a libs/$(CONFIG)/libend2end_test_simple_request.a libs/$(CONFIG)/libend2end_test_thread_stress.a libs/$(CONFIG)/libend2end_test_writes_done_hangs_with_pending_read.a libs/$(CONFIG)/libend2end_certs.a +privatelibs_c: libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libend2end_fixture_chttp2_fake_security.a libs/$(CONFIG)/libend2end_fixture_chttp2_fullstack.a libs/$(CONFIG)/libend2end_fixture_chttp2_simple_ssl_fullstack.a libs/$(CONFIG)/libend2end_fixture_chttp2_simple_ssl_with_oauth2_fullstack.a libs/$(CONFIG)/libend2end_fixture_chttp2_socket_pair.a libs/$(CONFIG)/libend2end_fixture_chttp2_socket_pair_one_byte_at_a_time.a libs/$(CONFIG)/libend2end_test_cancel_after_accept.a libs/$(CONFIG)/libend2end_test_cancel_after_accept_and_writes_closed.a libs/$(CONFIG)/libend2end_test_cancel_after_invoke.a libs/$(CONFIG)/libend2end_test_cancel_before_invoke.a libs/$(CONFIG)/libend2end_test_cancel_in_a_vacuum.a libs/$(CONFIG)/libend2end_test_census_simple_request.a libs/$(CONFIG)/libend2end_test_disappearing_server.a libs/$(CONFIG)/libend2end_test_early_server_shutdown_finishes_inflight_calls.a libs/$(CONFIG)/libend2end_test_early_server_shutdown_finishes_tags.a libs/$(CONFIG)/libend2end_test_graceful_server_shutdown.a libs/$(CONFIG)/libend2end_test_invoke_large_request.a libs/$(CONFIG)/libend2end_test_max_concurrent_streams.a libs/$(CONFIG)/libend2end_test_no_op.a libs/$(CONFIG)/libend2end_test_ping_pong_streaming.a libs/$(CONFIG)/libend2end_test_request_response_with_binary_metadata_and_payload.a libs/$(CONFIG)/libend2end_test_request_response_with_metadata_and_payload.a libs/$(CONFIG)/libend2end_test_request_response_with_payload.a libs/$(CONFIG)/libend2end_test_request_response_with_trailing_metadata_and_payload.a libs/$(CONFIG)/libend2end_test_simple_delayed_request.a libs/$(CONFIG)/libend2end_test_simple_request.a libs/$(CONFIG)/libend2end_test_thread_stress.a libs/$(CONFIG)/libend2end_test_writes_done_hangs_with_pending_read.a libs/$(CONFIG)/libend2end_certs.a -privatelibs_cxx: dep_cxx libs/$(CONFIG)/libgrpc++_test_util.a +privatelibs_cxx: libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libtips_client_lib.a buildtests: buildtests_c buildtests_cxx -buildtests_c: bins_dep_c privatelibs_c bins/$(CONFIG)/grpc_byte_buffer_reader_test bins/$(CONFIG)/gpr_cancellable_test bins/$(CONFIG)/gpr_log_test bins/$(CONFIG)/gpr_useful_test bins/$(CONFIG)/gpr_cmdline_test bins/$(CONFIG)/gpr_histogram_test bins/$(CONFIG)/gpr_host_port_test bins/$(CONFIG)/gpr_slice_buffer_test bins/$(CONFIG)/gpr_slice_test bins/$(CONFIG)/gpr_string_test bins/$(CONFIG)/gpr_sync_test bins/$(CONFIG)/gpr_thd_test bins/$(CONFIG)/gpr_time_test bins/$(CONFIG)/murmur_hash_test bins/$(CONFIG)/grpc_stream_op_test bins/$(CONFIG)/alpn_test bins/$(CONFIG)/time_averaged_stats_test bins/$(CONFIG)/chttp2_stream_encoder_test bins/$(CONFIG)/hpack_table_test bins/$(CONFIG)/chttp2_stream_map_test bins/$(CONFIG)/hpack_parser_test bins/$(CONFIG)/transport_metadata_test bins/$(CONFIG)/chttp2_status_conversion_test bins/$(CONFIG)/chttp2_transport_end2end_test bins/$(CONFIG)/tcp_posix_test bins/$(CONFIG)/dualstack_socket_test bins/$(CONFIG)/no_server_test bins/$(CONFIG)/resolve_address_test bins/$(CONFIG)/sockaddr_utils_test bins/$(CONFIG)/tcp_server_posix_test bins/$(CONFIG)/tcp_client_posix_test bins/$(CONFIG)/grpc_channel_stack_test bins/$(CONFIG)/metadata_buffer_test bins/$(CONFIG)/grpc_completion_queue_test bins/$(CONFIG)/census_window_stats_test bins/$(CONFIG)/census_statistics_quick_test bins/$(CONFIG)/census_statistics_small_log_test bins/$(CONFIG)/census_statistics_performance_test bins/$(CONFIG)/census_statistics_multiple_writers_test bins/$(CONFIG)/census_statistics_multiple_writers_circular_buffer_test bins/$(CONFIG)/census_stub_test bins/$(CONFIG)/census_hash_table_test bins/$(CONFIG)/fling_server bins/$(CONFIG)/fling_client bins/$(CONFIG)/fling_test bins/$(CONFIG)/echo_server bins/$(CONFIG)/echo_client bins/$(CONFIG)/echo_test bins/$(CONFIG)/message_compress_test bins/$(CONFIG)/bin_encoder_test bins/$(CONFIG)/secure_endpoint_test bins/$(CONFIG)/httpcli_format_request_test bins/$(CONFIG)/httpcli_parser_test bins/$(CONFIG)/httpcli_test bins/$(CONFIG)/grpc_credentials_test bins/$(CONFIG)/grpc_base64_test bins/$(CONFIG)/grpc_json_token_test bins/$(CONFIG)/timeout_encoding_test bins/$(CONFIG)/fd_posix_test bins/$(CONFIG)/fling_stream_test bins/$(CONFIG)/lame_client_test bins/$(CONFIG)/alarm_test bins/$(CONFIG)/alarm_list_test bins/$(CONFIG)/alarm_heap_test bins/$(CONFIG)/time_test bins/$(CONFIG)/chttp2_fake_security_cancel_after_accept_test bins/$(CONFIG)/chttp2_fake_security_cancel_after_accept_and_writes_closed_test bins/$(CONFIG)/chttp2_fake_security_cancel_after_invoke_test bins/$(CONFIG)/chttp2_fake_security_cancel_before_invoke_test bins/$(CONFIG)/chttp2_fake_security_cancel_in_a_vacuum_test bins/$(CONFIG)/chttp2_fake_security_census_simple_request_test bins/$(CONFIG)/chttp2_fake_security_disappearing_server_test bins/$(CONFIG)/chttp2_fake_security_early_server_shutdown_finishes_inflight_calls_test bins/$(CONFIG)/chttp2_fake_security_early_server_shutdown_finishes_tags_test bins/$(CONFIG)/chttp2_fake_security_invoke_large_request_test bins/$(CONFIG)/chttp2_fake_security_max_concurrent_streams_test bins/$(CONFIG)/chttp2_fake_security_no_op_test bins/$(CONFIG)/chttp2_fake_security_ping_pong_streaming_test bins/$(CONFIG)/chttp2_fake_security_request_response_with_binary_metadata_and_payload_test bins/$(CONFIG)/chttp2_fake_security_request_response_with_metadata_and_payload_test bins/$(CONFIG)/chttp2_fake_security_request_response_with_payload_test bins/$(CONFIG)/chttp2_fake_security_request_response_with_trailing_metadata_and_payload_test bins/$(CONFIG)/chttp2_fake_security_simple_delayed_request_test bins/$(CONFIG)/chttp2_fake_security_simple_request_test bins/$(CONFIG)/chttp2_fake_security_thread_stress_test bins/$(CONFIG)/chttp2_fake_security_writes_done_hangs_with_pending_read_test bins/$(CONFIG)/chttp2_fullstack_cancel_after_accept_test bins/$(CONFIG)/chttp2_fullstack_cancel_after_accept_and_writes_closed_test bins/$(CONFIG)/chttp2_fullstack_cancel_after_invoke_test bins/$(CONFIG)/chttp2_fullstack_cancel_before_invoke_test bins/$(CONFIG)/chttp2_fullstack_cancel_in_a_vacuum_test bins/$(CONFIG)/chttp2_fullstack_census_simple_request_test bins/$(CONFIG)/chttp2_fullstack_disappearing_server_test bins/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_inflight_calls_test bins/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_tags_test bins/$(CONFIG)/chttp2_fullstack_invoke_large_request_test bins/$(CONFIG)/chttp2_fullstack_max_concurrent_streams_test bins/$(CONFIG)/chttp2_fullstack_no_op_test bins/$(CONFIG)/chttp2_fullstack_ping_pong_streaming_test bins/$(CONFIG)/chttp2_fullstack_request_response_with_binary_metadata_and_payload_test bins/$(CONFIG)/chttp2_fullstack_request_response_with_metadata_and_payload_test bins/$(CONFIG)/chttp2_fullstack_request_response_with_payload_test bins/$(CONFIG)/chttp2_fullstack_request_response_with_trailing_metadata_and_payload_test bins/$(CONFIG)/chttp2_fullstack_simple_delayed_request_test bins/$(CONFIG)/chttp2_fullstack_simple_request_test bins/$(CONFIG)/chttp2_fullstack_thread_stress_test bins/$(CONFIG)/chttp2_fullstack_writes_done_hangs_with_pending_read_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_accept_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_accept_and_writes_closed_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_invoke_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_before_invoke_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_in_a_vacuum_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_census_simple_request_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_disappearing_server_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_inflight_calls_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_tags_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_invoke_large_request_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_max_concurrent_streams_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_no_op_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_ping_pong_streaming_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_binary_metadata_and_payload_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_metadata_and_payload_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_payload_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_trailing_metadata_and_payload_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_simple_delayed_request_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_simple_request_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_thread_stress_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_writes_done_hangs_with_pending_read_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_and_writes_closed_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_invoke_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_before_invoke_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_in_a_vacuum_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_census_simple_request_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_disappearing_server_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_inflight_calls_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_tags_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_invoke_large_request_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_max_concurrent_streams_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_no_op_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_ping_pong_streaming_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_binary_metadata_and_payload_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_metadata_and_payload_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_payload_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_trailing_metadata_and_payload_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_simple_delayed_request_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_simple_request_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_thread_stress_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_writes_done_hangs_with_pending_read_test bins/$(CONFIG)/chttp2_socket_pair_cancel_after_accept_test bins/$(CONFIG)/chttp2_socket_pair_cancel_after_accept_and_writes_closed_test bins/$(CONFIG)/chttp2_socket_pair_cancel_after_invoke_test bins/$(CONFIG)/chttp2_socket_pair_cancel_before_invoke_test bins/$(CONFIG)/chttp2_socket_pair_cancel_in_a_vacuum_test bins/$(CONFIG)/chttp2_socket_pair_census_simple_request_test bins/$(CONFIG)/chttp2_socket_pair_disappearing_server_test bins/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_inflight_calls_test bins/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_tags_test bins/$(CONFIG)/chttp2_socket_pair_invoke_large_request_test bins/$(CONFIG)/chttp2_socket_pair_max_concurrent_streams_test bins/$(CONFIG)/chttp2_socket_pair_no_op_test bins/$(CONFIG)/chttp2_socket_pair_ping_pong_streaming_test bins/$(CONFIG)/chttp2_socket_pair_request_response_with_binary_metadata_and_payload_test bins/$(CONFIG)/chttp2_socket_pair_request_response_with_metadata_and_payload_test bins/$(CONFIG)/chttp2_socket_pair_request_response_with_payload_test bins/$(CONFIG)/chttp2_socket_pair_request_response_with_trailing_metadata_and_payload_test bins/$(CONFIG)/chttp2_socket_pair_simple_delayed_request_test bins/$(CONFIG)/chttp2_socket_pair_simple_request_test bins/$(CONFIG)/chttp2_socket_pair_thread_stress_test bins/$(CONFIG)/chttp2_socket_pair_writes_done_hangs_with_pending_read_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_and_writes_closed_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_invoke_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_before_invoke_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_in_a_vacuum_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_census_simple_request_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_disappearing_server_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_inflight_calls_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_tags_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_max_concurrent_streams_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_no_op_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_ping_pong_streaming_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_binary_metadata_and_payload_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_metadata_and_payload_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_payload_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_trailing_metadata_and_payload_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_simple_delayed_request_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_simple_request_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_thread_stress_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_writes_done_hangs_with_pending_read_test +buildtests_c: privatelibs_c bins/$(CONFIG)/alarm_heap_test bins/$(CONFIG)/alarm_list_test bins/$(CONFIG)/alarm_test bins/$(CONFIG)/alpn_test bins/$(CONFIG)/bin_encoder_test bins/$(CONFIG)/census_hash_table_test bins/$(CONFIG)/census_statistics_multiple_writers_circular_buffer_test bins/$(CONFIG)/census_statistics_multiple_writers_test bins/$(CONFIG)/census_statistics_performance_test bins/$(CONFIG)/census_statistics_quick_test bins/$(CONFIG)/census_statistics_small_log_test bins/$(CONFIG)/census_stub_test bins/$(CONFIG)/census_window_stats_test bins/$(CONFIG)/chttp2_status_conversion_test bins/$(CONFIG)/chttp2_stream_encoder_test bins/$(CONFIG)/chttp2_stream_map_test bins/$(CONFIG)/chttp2_transport_end2end_test bins/$(CONFIG)/dualstack_socket_test bins/$(CONFIG)/echo_client bins/$(CONFIG)/echo_server bins/$(CONFIG)/echo_test bins/$(CONFIG)/fd_posix_test bins/$(CONFIG)/fling_client bins/$(CONFIG)/fling_server bins/$(CONFIG)/fling_stream_test bins/$(CONFIG)/fling_test bins/$(CONFIG)/gpr_cancellable_test bins/$(CONFIG)/gpr_cmdline_test bins/$(CONFIG)/gpr_histogram_test bins/$(CONFIG)/gpr_host_port_test bins/$(CONFIG)/gpr_log_test bins/$(CONFIG)/gpr_slice_buffer_test bins/$(CONFIG)/gpr_slice_test bins/$(CONFIG)/gpr_string_test bins/$(CONFIG)/gpr_sync_test bins/$(CONFIG)/gpr_thd_test bins/$(CONFIG)/gpr_time_test bins/$(CONFIG)/gpr_useful_test bins/$(CONFIG)/grpc_base64_test bins/$(CONFIG)/grpc_byte_buffer_reader_test bins/$(CONFIG)/grpc_channel_stack_test bins/$(CONFIG)/grpc_completion_queue_test bins/$(CONFIG)/grpc_credentials_test bins/$(CONFIG)/grpc_json_token_test bins/$(CONFIG)/grpc_stream_op_test bins/$(CONFIG)/hpack_parser_test bins/$(CONFIG)/hpack_table_test bins/$(CONFIG)/httpcli_format_request_test bins/$(CONFIG)/httpcli_parser_test bins/$(CONFIG)/httpcli_test bins/$(CONFIG)/lame_client_test bins/$(CONFIG)/message_compress_test bins/$(CONFIG)/metadata_buffer_test bins/$(CONFIG)/murmur_hash_test bins/$(CONFIG)/no_server_test bins/$(CONFIG)/poll_kick_test bins/$(CONFIG)/resolve_address_test bins/$(CONFIG)/secure_endpoint_test bins/$(CONFIG)/sockaddr_utils_test bins/$(CONFIG)/tcp_client_posix_test bins/$(CONFIG)/tcp_posix_test bins/$(CONFIG)/tcp_server_posix_test bins/$(CONFIG)/time_averaged_stats_test bins/$(CONFIG)/time_test bins/$(CONFIG)/timeout_encoding_test bins/$(CONFIG)/transport_metadata_test bins/$(CONFIG)/chttp2_fake_security_cancel_after_accept_test bins/$(CONFIG)/chttp2_fake_security_cancel_after_accept_and_writes_closed_test bins/$(CONFIG)/chttp2_fake_security_cancel_after_invoke_test bins/$(CONFIG)/chttp2_fake_security_cancel_before_invoke_test bins/$(CONFIG)/chttp2_fake_security_cancel_in_a_vacuum_test bins/$(CONFIG)/chttp2_fake_security_census_simple_request_test bins/$(CONFIG)/chttp2_fake_security_disappearing_server_test bins/$(CONFIG)/chttp2_fake_security_early_server_shutdown_finishes_inflight_calls_test bins/$(CONFIG)/chttp2_fake_security_early_server_shutdown_finishes_tags_test bins/$(CONFIG)/chttp2_fake_security_graceful_server_shutdown_test bins/$(CONFIG)/chttp2_fake_security_invoke_large_request_test bins/$(CONFIG)/chttp2_fake_security_max_concurrent_streams_test bins/$(CONFIG)/chttp2_fake_security_no_op_test bins/$(CONFIG)/chttp2_fake_security_ping_pong_streaming_test bins/$(CONFIG)/chttp2_fake_security_request_response_with_binary_metadata_and_payload_test bins/$(CONFIG)/chttp2_fake_security_request_response_with_metadata_and_payload_test bins/$(CONFIG)/chttp2_fake_security_request_response_with_payload_test bins/$(CONFIG)/chttp2_fake_security_request_response_with_trailing_metadata_and_payload_test bins/$(CONFIG)/chttp2_fake_security_simple_delayed_request_test bins/$(CONFIG)/chttp2_fake_security_simple_request_test bins/$(CONFIG)/chttp2_fake_security_thread_stress_test bins/$(CONFIG)/chttp2_fake_security_writes_done_hangs_with_pending_read_test bins/$(CONFIG)/chttp2_fullstack_cancel_after_accept_test bins/$(CONFIG)/chttp2_fullstack_cancel_after_accept_and_writes_closed_test bins/$(CONFIG)/chttp2_fullstack_cancel_after_invoke_test bins/$(CONFIG)/chttp2_fullstack_cancel_before_invoke_test bins/$(CONFIG)/chttp2_fullstack_cancel_in_a_vacuum_test bins/$(CONFIG)/chttp2_fullstack_census_simple_request_test bins/$(CONFIG)/chttp2_fullstack_disappearing_server_test bins/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_inflight_calls_test bins/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_tags_test bins/$(CONFIG)/chttp2_fullstack_graceful_server_shutdown_test bins/$(CONFIG)/chttp2_fullstack_invoke_large_request_test bins/$(CONFIG)/chttp2_fullstack_max_concurrent_streams_test bins/$(CONFIG)/chttp2_fullstack_no_op_test bins/$(CONFIG)/chttp2_fullstack_ping_pong_streaming_test bins/$(CONFIG)/chttp2_fullstack_request_response_with_binary_metadata_and_payload_test bins/$(CONFIG)/chttp2_fullstack_request_response_with_metadata_and_payload_test bins/$(CONFIG)/chttp2_fullstack_request_response_with_payload_test bins/$(CONFIG)/chttp2_fullstack_request_response_with_trailing_metadata_and_payload_test bins/$(CONFIG)/chttp2_fullstack_simple_delayed_request_test bins/$(CONFIG)/chttp2_fullstack_simple_request_test bins/$(CONFIG)/chttp2_fullstack_thread_stress_test bins/$(CONFIG)/chttp2_fullstack_writes_done_hangs_with_pending_read_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_accept_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_accept_and_writes_closed_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_invoke_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_before_invoke_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_in_a_vacuum_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_census_simple_request_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_disappearing_server_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_inflight_calls_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_tags_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_graceful_server_shutdown_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_invoke_large_request_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_max_concurrent_streams_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_no_op_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_ping_pong_streaming_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_binary_metadata_and_payload_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_metadata_and_payload_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_payload_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_trailing_metadata_and_payload_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_simple_delayed_request_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_simple_request_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_thread_stress_test bins/$(CONFIG)/chttp2_simple_ssl_fullstack_writes_done_hangs_with_pending_read_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_and_writes_closed_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_invoke_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_before_invoke_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_in_a_vacuum_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_census_simple_request_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_disappearing_server_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_inflight_calls_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_tags_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_graceful_server_shutdown_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_invoke_large_request_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_max_concurrent_streams_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_no_op_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_ping_pong_streaming_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_binary_metadata_and_payload_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_metadata_and_payload_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_payload_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_trailing_metadata_and_payload_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_simple_delayed_request_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_simple_request_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_thread_stress_test bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_writes_done_hangs_with_pending_read_test bins/$(CONFIG)/chttp2_socket_pair_cancel_after_accept_test bins/$(CONFIG)/chttp2_socket_pair_cancel_after_accept_and_writes_closed_test bins/$(CONFIG)/chttp2_socket_pair_cancel_after_invoke_test bins/$(CONFIG)/chttp2_socket_pair_cancel_before_invoke_test bins/$(CONFIG)/chttp2_socket_pair_cancel_in_a_vacuum_test bins/$(CONFIG)/chttp2_socket_pair_census_simple_request_test bins/$(CONFIG)/chttp2_socket_pair_disappearing_server_test bins/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_inflight_calls_test bins/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_tags_test bins/$(CONFIG)/chttp2_socket_pair_graceful_server_shutdown_test bins/$(CONFIG)/chttp2_socket_pair_invoke_large_request_test bins/$(CONFIG)/chttp2_socket_pair_max_concurrent_streams_test bins/$(CONFIG)/chttp2_socket_pair_no_op_test bins/$(CONFIG)/chttp2_socket_pair_ping_pong_streaming_test bins/$(CONFIG)/chttp2_socket_pair_request_response_with_binary_metadata_and_payload_test bins/$(CONFIG)/chttp2_socket_pair_request_response_with_metadata_and_payload_test bins/$(CONFIG)/chttp2_socket_pair_request_response_with_payload_test bins/$(CONFIG)/chttp2_socket_pair_request_response_with_trailing_metadata_and_payload_test bins/$(CONFIG)/chttp2_socket_pair_simple_delayed_request_test bins/$(CONFIG)/chttp2_socket_pair_simple_request_test bins/$(CONFIG)/chttp2_socket_pair_thread_stress_test bins/$(CONFIG)/chttp2_socket_pair_writes_done_hangs_with_pending_read_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_and_writes_closed_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_invoke_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_before_invoke_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_in_a_vacuum_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_census_simple_request_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_disappearing_server_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_inflight_calls_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_tags_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_graceful_server_shutdown_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_max_concurrent_streams_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_no_op_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_ping_pong_streaming_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_binary_metadata_and_payload_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_metadata_and_payload_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_payload_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_trailing_metadata_and_payload_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_simple_delayed_request_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_simple_request_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_thread_stress_test bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_writes_done_hangs_with_pending_read_test -buildtests_cxx: bins_dep_cxx privatelibs_cxx bins/$(CONFIG)/thread_pool_test bins/$(CONFIG)/status_test bins/$(CONFIG)/sync_client_async_server_test bins/$(CONFIG)/qps_client bins/$(CONFIG)/qps_server bins/$(CONFIG)/interop_server bins/$(CONFIG)/interop_client bins/$(CONFIG)/end2end_test bins/$(CONFIG)/channel_arguments_test bins/$(CONFIG)/credentials_test +buildtests_cxx: privatelibs_cxx bins/$(CONFIG)/channel_arguments_test bins/$(CONFIG)/credentials_test bins/$(CONFIG)/end2end_test bins/$(CONFIG)/interop_client bins/$(CONFIG)/interop_server bins/$(CONFIG)/tips_client bins/$(CONFIG)/tips_client_test bins/$(CONFIG)/qps_client bins/$(CONFIG)/qps_server bins/$(CONFIG)/status_test bins/$(CONFIG)/sync_client_async_server_test bins/$(CONFIG)/thread_pool_test test: test_c test_cxx test_c: buildtests_c - $(E) "[RUN] Testing grpc_byte_buffer_reader_test" - $(Q) ./bins/$(CONFIG)/grpc_byte_buffer_reader_test || ( echo test grpc_byte_buffer_reader_test failed ; exit 1 ) + $(E) "[RUN] Testing alarm_heap_test" + $(Q) ./bins/$(CONFIG)/alarm_heap_test || ( echo test alarm_heap_test failed ; exit 1 ) + $(E) "[RUN] Testing alarm_list_test" + $(Q) ./bins/$(CONFIG)/alarm_list_test || ( echo test alarm_list_test failed ; exit 1 ) + $(E) "[RUN] Testing alarm_test" + $(Q) ./bins/$(CONFIG)/alarm_test || ( echo test alarm_test failed ; exit 1 ) + $(E) "[RUN] Testing alpn_test" + $(Q) ./bins/$(CONFIG)/alpn_test || ( echo test alpn_test failed ; exit 1 ) + $(E) "[RUN] Testing bin_encoder_test" + $(Q) ./bins/$(CONFIG)/bin_encoder_test || ( echo test bin_encoder_test failed ; exit 1 ) + $(E) "[RUN] Testing census_hash_table_test" + $(Q) ./bins/$(CONFIG)/census_hash_table_test || ( echo test census_hash_table_test failed ; exit 1 ) + $(E) "[RUN] Testing census_statistics_multiple_writers_circular_buffer_test" + $(Q) ./bins/$(CONFIG)/census_statistics_multiple_writers_circular_buffer_test || ( echo test census_statistics_multiple_writers_circular_buffer_test failed ; exit 1 ) + $(E) "[RUN] Testing census_statistics_multiple_writers_test" + $(Q) ./bins/$(CONFIG)/census_statistics_multiple_writers_test || ( echo test census_statistics_multiple_writers_test failed ; exit 1 ) + $(E) "[RUN] Testing census_statistics_performance_test" + $(Q) ./bins/$(CONFIG)/census_statistics_performance_test || ( echo test census_statistics_performance_test failed ; exit 1 ) + $(E) "[RUN] Testing census_statistics_quick_test" + $(Q) ./bins/$(CONFIG)/census_statistics_quick_test || ( echo test census_statistics_quick_test failed ; exit 1 ) + $(E) "[RUN] Testing census_statistics_small_log_test" + $(Q) ./bins/$(CONFIG)/census_statistics_small_log_test || ( echo test census_statistics_small_log_test failed ; exit 1 ) + $(E) "[RUN] Testing census_stub_test" + $(Q) ./bins/$(CONFIG)/census_stub_test || ( echo test census_stub_test failed ; exit 1 ) + $(E) "[RUN] Testing census_window_stats_test" + $(Q) ./bins/$(CONFIG)/census_window_stats_test || ( echo test census_window_stats_test failed ; exit 1 ) + $(E) "[RUN] Testing chttp2_status_conversion_test" + $(Q) ./bins/$(CONFIG)/chttp2_status_conversion_test || ( echo test chttp2_status_conversion_test failed ; exit 1 ) + $(E) "[RUN] Testing chttp2_stream_encoder_test" + $(Q) ./bins/$(CONFIG)/chttp2_stream_encoder_test || ( echo test chttp2_stream_encoder_test failed ; exit 1 ) + $(E) "[RUN] Testing chttp2_stream_map_test" + $(Q) ./bins/$(CONFIG)/chttp2_stream_map_test || ( echo test chttp2_stream_map_test failed ; exit 1 ) + $(E) "[RUN] Testing chttp2_transport_end2end_test" + $(Q) ./bins/$(CONFIG)/chttp2_transport_end2end_test || ( echo test chttp2_transport_end2end_test failed ; exit 1 ) + $(E) "[RUN] Testing dualstack_socket_test" + $(Q) ./bins/$(CONFIG)/dualstack_socket_test || ( echo test dualstack_socket_test failed ; exit 1 ) + $(E) "[RUN] Testing echo_test" + $(Q) ./bins/$(CONFIG)/echo_test || ( echo test echo_test failed ; exit 1 ) + $(E) "[RUN] Testing fd_posix_test" + $(Q) ./bins/$(CONFIG)/fd_posix_test || ( echo test fd_posix_test failed ; exit 1 ) + $(E) "[RUN] Testing fling_stream_test" + $(Q) ./bins/$(CONFIG)/fling_stream_test || ( echo test fling_stream_test failed ; exit 1 ) + $(E) "[RUN] Testing fling_test" + $(Q) ./bins/$(CONFIG)/fling_test || ( echo test fling_test failed ; exit 1 ) $(E) "[RUN] Testing gpr_cancellable_test" $(Q) ./bins/$(CONFIG)/gpr_cancellable_test || ( echo test gpr_cancellable_test failed ; exit 1 ) - $(E) "[RUN] Testing gpr_log_test" - $(Q) ./bins/$(CONFIG)/gpr_log_test || ( echo test gpr_log_test failed ; exit 1 ) - $(E) "[RUN] Testing gpr_useful_test" - $(Q) ./bins/$(CONFIG)/gpr_useful_test || ( echo test gpr_useful_test failed ; exit 1 ) $(E) "[RUN] Testing gpr_cmdline_test" $(Q) ./bins/$(CONFIG)/gpr_cmdline_test || ( echo test gpr_cmdline_test failed ; exit 1 ) $(E) "[RUN] Testing gpr_histogram_test" $(Q) ./bins/$(CONFIG)/gpr_histogram_test || ( echo test gpr_histogram_test failed ; exit 1 ) $(E) "[RUN] Testing gpr_host_port_test" $(Q) ./bins/$(CONFIG)/gpr_host_port_test || ( echo test gpr_host_port_test failed ; exit 1 ) + $(E) "[RUN] Testing gpr_log_test" + $(Q) ./bins/$(CONFIG)/gpr_log_test || ( echo test gpr_log_test failed ; exit 1 ) $(E) "[RUN] Testing gpr_slice_buffer_test" $(Q) ./bins/$(CONFIG)/gpr_slice_buffer_test || ( echo test gpr_slice_buffer_test failed ; exit 1 ) $(E) "[RUN] Testing gpr_slice_test" @@ -534,102 +638,64 @@ test_c: buildtests_c $(Q) ./bins/$(CONFIG)/gpr_thd_test || ( echo test gpr_thd_test failed ; exit 1 ) $(E) "[RUN] Testing gpr_time_test" $(Q) ./bins/$(CONFIG)/gpr_time_test || ( echo test gpr_time_test failed ; exit 1 ) - $(E) "[RUN] Testing murmur_hash_test" - $(Q) ./bins/$(CONFIG)/murmur_hash_test || ( echo test murmur_hash_test failed ; exit 1 ) - $(E) "[RUN] Testing grpc_stream_op_test" - $(Q) ./bins/$(CONFIG)/grpc_stream_op_test || ( echo test grpc_stream_op_test failed ; exit 1 ) - $(E) "[RUN] Testing alpn_test" - $(Q) ./bins/$(CONFIG)/alpn_test || ( echo test alpn_test failed ; exit 1 ) - $(E) "[RUN] Testing time_averaged_stats_test" - $(Q) ./bins/$(CONFIG)/time_averaged_stats_test || ( echo test time_averaged_stats_test failed ; exit 1 ) - $(E) "[RUN] Testing chttp2_stream_encoder_test" - $(Q) ./bins/$(CONFIG)/chttp2_stream_encoder_test || ( echo test chttp2_stream_encoder_test failed ; exit 1 ) - $(E) "[RUN] Testing hpack_table_test" - $(Q) ./bins/$(CONFIG)/hpack_table_test || ( echo test hpack_table_test failed ; exit 1 ) - $(E) "[RUN] Testing chttp2_stream_map_test" - $(Q) ./bins/$(CONFIG)/chttp2_stream_map_test || ( echo test chttp2_stream_map_test failed ; exit 1 ) - $(E) "[RUN] Testing hpack_parser_test" - $(Q) ./bins/$(CONFIG)/hpack_parser_test || ( echo test hpack_parser_test failed ; exit 1 ) - $(E) "[RUN] Testing transport_metadata_test" - $(Q) ./bins/$(CONFIG)/transport_metadata_test || ( echo test transport_metadata_test failed ; exit 1 ) - $(E) "[RUN] Testing chttp2_status_conversion_test" - $(Q) ./bins/$(CONFIG)/chttp2_status_conversion_test || ( echo test chttp2_status_conversion_test failed ; exit 1 ) - $(E) "[RUN] Testing chttp2_transport_end2end_test" - $(Q) ./bins/$(CONFIG)/chttp2_transport_end2end_test || ( echo test chttp2_transport_end2end_test failed ; exit 1 ) - $(E) "[RUN] Testing tcp_posix_test" - $(Q) ./bins/$(CONFIG)/tcp_posix_test || ( echo test tcp_posix_test failed ; exit 1 ) - $(E) "[RUN] Testing dualstack_socket_test" - $(Q) ./bins/$(CONFIG)/dualstack_socket_test || ( echo test dualstack_socket_test failed ; exit 1 ) - $(E) "[RUN] Testing no_server_test" - $(Q) ./bins/$(CONFIG)/no_server_test || ( echo test no_server_test failed ; exit 1 ) - $(E) "[RUN] Testing resolve_address_test" - $(Q) ./bins/$(CONFIG)/resolve_address_test || ( echo test resolve_address_test failed ; exit 1 ) - $(E) "[RUN] Testing sockaddr_utils_test" - $(Q) ./bins/$(CONFIG)/sockaddr_utils_test || ( echo test sockaddr_utils_test failed ; exit 1 ) - $(E) "[RUN] Testing tcp_server_posix_test" - $(Q) ./bins/$(CONFIG)/tcp_server_posix_test || ( echo test tcp_server_posix_test failed ; exit 1 ) - $(E) "[RUN] Testing tcp_client_posix_test" - $(Q) ./bins/$(CONFIG)/tcp_client_posix_test || ( echo test tcp_client_posix_test failed ; exit 1 ) + $(E) "[RUN] Testing gpr_useful_test" + $(Q) ./bins/$(CONFIG)/gpr_useful_test || ( echo test gpr_useful_test failed ; exit 1 ) + $(E) "[RUN] Testing grpc_base64_test" + $(Q) ./bins/$(CONFIG)/grpc_base64_test || ( echo test grpc_base64_test failed ; exit 1 ) + $(E) "[RUN] Testing grpc_byte_buffer_reader_test" + $(Q) ./bins/$(CONFIG)/grpc_byte_buffer_reader_test || ( echo test grpc_byte_buffer_reader_test failed ; exit 1 ) $(E) "[RUN] Testing grpc_channel_stack_test" $(Q) ./bins/$(CONFIG)/grpc_channel_stack_test || ( echo test grpc_channel_stack_test failed ; exit 1 ) - $(E) "[RUN] Testing metadata_buffer_test" - $(Q) ./bins/$(CONFIG)/metadata_buffer_test || ( echo test metadata_buffer_test failed ; exit 1 ) $(E) "[RUN] Testing grpc_completion_queue_test" $(Q) ./bins/$(CONFIG)/grpc_completion_queue_test || ( echo test grpc_completion_queue_test failed ; exit 1 ) - $(E) "[RUN] Testing census_window_stats_test" - $(Q) ./bins/$(CONFIG)/census_window_stats_test || ( echo test census_window_stats_test failed ; exit 1 ) - $(E) "[RUN] Testing census_statistics_quick_test" - $(Q) ./bins/$(CONFIG)/census_statistics_quick_test || ( echo test census_statistics_quick_test failed ; exit 1 ) - $(E) "[RUN] Testing census_statistics_small_log_test" - $(Q) ./bins/$(CONFIG)/census_statistics_small_log_test || ( echo test census_statistics_small_log_test failed ; exit 1 ) - $(E) "[RUN] Testing census_statistics_performance_test" - $(Q) ./bins/$(CONFIG)/census_statistics_performance_test || ( echo test census_statistics_performance_test failed ; exit 1 ) - $(E) "[RUN] Testing census_statistics_multiple_writers_test" - $(Q) ./bins/$(CONFIG)/census_statistics_multiple_writers_test || ( echo test census_statistics_multiple_writers_test failed ; exit 1 ) - $(E) "[RUN] Testing census_statistics_multiple_writers_circular_buffer_test" - $(Q) ./bins/$(CONFIG)/census_statistics_multiple_writers_circular_buffer_test || ( echo test census_statistics_multiple_writers_circular_buffer_test failed ; exit 1 ) - $(E) "[RUN] Testing census_stub_test" - $(Q) ./bins/$(CONFIG)/census_stub_test || ( echo test census_stub_test failed ; exit 1 ) - $(E) "[RUN] Testing census_hash_table_test" - $(Q) ./bins/$(CONFIG)/census_hash_table_test || ( echo test census_hash_table_test failed ; exit 1 ) - $(E) "[RUN] Testing fling_test" - $(Q) ./bins/$(CONFIG)/fling_test || ( echo test fling_test failed ; exit 1 ) - $(E) "[RUN] Testing echo_test" - $(Q) ./bins/$(CONFIG)/echo_test || ( echo test echo_test failed ; exit 1 ) - $(E) "[RUN] Testing message_compress_test" - $(Q) ./bins/$(CONFIG)/message_compress_test || ( echo test message_compress_test failed ; exit 1 ) - $(E) "[RUN] Testing bin_encoder_test" - $(Q) ./bins/$(CONFIG)/bin_encoder_test || ( echo test bin_encoder_test failed ; exit 1 ) - $(E) "[RUN] Testing secure_endpoint_test" - $(Q) ./bins/$(CONFIG)/secure_endpoint_test || ( echo test secure_endpoint_test failed ; exit 1 ) + $(E) "[RUN] Testing grpc_credentials_test" + $(Q) ./bins/$(CONFIG)/grpc_credentials_test || ( echo test grpc_credentials_test failed ; exit 1 ) + $(E) "[RUN] Testing grpc_json_token_test" + $(Q) ./bins/$(CONFIG)/grpc_json_token_test || ( echo test grpc_json_token_test failed ; exit 1 ) + $(E) "[RUN] Testing grpc_stream_op_test" + $(Q) ./bins/$(CONFIG)/grpc_stream_op_test || ( echo test grpc_stream_op_test failed ; exit 1 ) + $(E) "[RUN] Testing hpack_parser_test" + $(Q) ./bins/$(CONFIG)/hpack_parser_test || ( echo test hpack_parser_test failed ; exit 1 ) + $(E) "[RUN] Testing hpack_table_test" + $(Q) ./bins/$(CONFIG)/hpack_table_test || ( echo test hpack_table_test failed ; exit 1 ) $(E) "[RUN] Testing httpcli_format_request_test" $(Q) ./bins/$(CONFIG)/httpcli_format_request_test || ( echo test httpcli_format_request_test failed ; exit 1 ) $(E) "[RUN] Testing httpcli_parser_test" $(Q) ./bins/$(CONFIG)/httpcli_parser_test || ( echo test httpcli_parser_test failed ; exit 1 ) $(E) "[RUN] Testing httpcli_test" $(Q) ./bins/$(CONFIG)/httpcli_test || ( echo test httpcli_test failed ; exit 1 ) - $(E) "[RUN] Testing grpc_credentials_test" - $(Q) ./bins/$(CONFIG)/grpc_credentials_test || ( echo test grpc_credentials_test failed ; exit 1 ) - $(E) "[RUN] Testing grpc_base64_test" - $(Q) ./bins/$(CONFIG)/grpc_base64_test || ( echo test grpc_base64_test failed ; exit 1 ) - $(E) "[RUN] Testing grpc_json_token_test" - $(Q) ./bins/$(CONFIG)/grpc_json_token_test || ( echo test grpc_json_token_test failed ; exit 1 ) - $(E) "[RUN] Testing timeout_encoding_test" - $(Q) ./bins/$(CONFIG)/timeout_encoding_test || ( echo test timeout_encoding_test failed ; exit 1 ) - $(E) "[RUN] Testing fd_posix_test" - $(Q) ./bins/$(CONFIG)/fd_posix_test || ( echo test fd_posix_test failed ; exit 1 ) - $(E) "[RUN] Testing fling_stream_test" - $(Q) ./bins/$(CONFIG)/fling_stream_test || ( echo test fling_stream_test failed ; exit 1 ) $(E) "[RUN] Testing lame_client_test" $(Q) ./bins/$(CONFIG)/lame_client_test || ( echo test lame_client_test failed ; exit 1 ) - $(E) "[RUN] Testing alarm_test" - $(Q) ./bins/$(CONFIG)/alarm_test || ( echo test alarm_test failed ; exit 1 ) - $(E) "[RUN] Testing alarm_list_test" - $(Q) ./bins/$(CONFIG)/alarm_list_test || ( echo test alarm_list_test failed ; exit 1 ) - $(E) "[RUN] Testing alarm_heap_test" - $(Q) ./bins/$(CONFIG)/alarm_heap_test || ( echo test alarm_heap_test failed ; exit 1 ) + $(E) "[RUN] Testing message_compress_test" + $(Q) ./bins/$(CONFIG)/message_compress_test || ( echo test message_compress_test failed ; exit 1 ) + $(E) "[RUN] Testing metadata_buffer_test" + $(Q) ./bins/$(CONFIG)/metadata_buffer_test || ( echo test metadata_buffer_test failed ; exit 1 ) + $(E) "[RUN] Testing murmur_hash_test" + $(Q) ./bins/$(CONFIG)/murmur_hash_test || ( echo test murmur_hash_test failed ; exit 1 ) + $(E) "[RUN] Testing no_server_test" + $(Q) ./bins/$(CONFIG)/no_server_test || ( echo test no_server_test failed ; exit 1 ) + $(E) "[RUN] Testing poll_kick_test" + $(Q) ./bins/$(CONFIG)/poll_kick_test || ( echo test poll_kick_test failed ; exit 1 ) + $(E) "[RUN] Testing resolve_address_test" + $(Q) ./bins/$(CONFIG)/resolve_address_test || ( echo test resolve_address_test failed ; exit 1 ) + $(E) "[RUN] Testing secure_endpoint_test" + $(Q) ./bins/$(CONFIG)/secure_endpoint_test || ( echo test secure_endpoint_test failed ; exit 1 ) + $(E) "[RUN] Testing sockaddr_utils_test" + $(Q) ./bins/$(CONFIG)/sockaddr_utils_test || ( echo test sockaddr_utils_test failed ; exit 1 ) + $(E) "[RUN] Testing tcp_client_posix_test" + $(Q) ./bins/$(CONFIG)/tcp_client_posix_test || ( echo test tcp_client_posix_test failed ; exit 1 ) + $(E) "[RUN] Testing tcp_posix_test" + $(Q) ./bins/$(CONFIG)/tcp_posix_test || ( echo test tcp_posix_test failed ; exit 1 ) + $(E) "[RUN] Testing tcp_server_posix_test" + $(Q) ./bins/$(CONFIG)/tcp_server_posix_test || ( echo test tcp_server_posix_test failed ; exit 1 ) + $(E) "[RUN] Testing time_averaged_stats_test" + $(Q) ./bins/$(CONFIG)/time_averaged_stats_test || ( echo test time_averaged_stats_test failed ; exit 1 ) $(E) "[RUN] Testing time_test" $(Q) ./bins/$(CONFIG)/time_test || ( echo test time_test failed ; exit 1 ) + $(E) "[RUN] Testing timeout_encoding_test" + $(Q) ./bins/$(CONFIG)/timeout_encoding_test || ( echo test timeout_encoding_test failed ; exit 1 ) + $(E) "[RUN] Testing transport_metadata_test" + $(Q) ./bins/$(CONFIG)/transport_metadata_test || ( echo test transport_metadata_test failed ; exit 1 ) $(E) "[RUN] Testing chttp2_fake_security_cancel_after_accept_test" $(Q) ./bins/$(CONFIG)/chttp2_fake_security_cancel_after_accept_test || ( echo test chttp2_fake_security_cancel_after_accept_test failed ; exit 1 ) $(E) "[RUN] Testing chttp2_fake_security_cancel_after_accept_and_writes_closed_test" @@ -648,6 +714,8 @@ test_c: buildtests_c $(Q) ./bins/$(CONFIG)/chttp2_fake_security_early_server_shutdown_finishes_inflight_calls_test || ( echo test chttp2_fake_security_early_server_shutdown_finishes_inflight_calls_test failed ; exit 1 ) $(E) "[RUN] Testing chttp2_fake_security_early_server_shutdown_finishes_tags_test" $(Q) ./bins/$(CONFIG)/chttp2_fake_security_early_server_shutdown_finishes_tags_test || ( echo test chttp2_fake_security_early_server_shutdown_finishes_tags_test failed ; exit 1 ) + $(E) "[RUN] Testing chttp2_fake_security_graceful_server_shutdown_test" + $(Q) ./bins/$(CONFIG)/chttp2_fake_security_graceful_server_shutdown_test || ( echo test chttp2_fake_security_graceful_server_shutdown_test failed ; exit 1 ) $(E) "[RUN] Testing chttp2_fake_security_invoke_large_request_test" $(Q) ./bins/$(CONFIG)/chttp2_fake_security_invoke_large_request_test || ( echo test chttp2_fake_security_invoke_large_request_test failed ; exit 1 ) $(E) "[RUN] Testing chttp2_fake_security_max_concurrent_streams_test" @@ -690,6 +758,8 @@ test_c: buildtests_c $(Q) ./bins/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_inflight_calls_test || ( echo test chttp2_fullstack_early_server_shutdown_finishes_inflight_calls_test failed ; exit 1 ) $(E) "[RUN] Testing chttp2_fullstack_early_server_shutdown_finishes_tags_test" $(Q) ./bins/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_tags_test || ( echo test chttp2_fullstack_early_server_shutdown_finishes_tags_test failed ; exit 1 ) + $(E) "[RUN] Testing chttp2_fullstack_graceful_server_shutdown_test" + $(Q) ./bins/$(CONFIG)/chttp2_fullstack_graceful_server_shutdown_test || ( echo test chttp2_fullstack_graceful_server_shutdown_test failed ; exit 1 ) $(E) "[RUN] Testing chttp2_fullstack_invoke_large_request_test" $(Q) ./bins/$(CONFIG)/chttp2_fullstack_invoke_large_request_test || ( echo test chttp2_fullstack_invoke_large_request_test failed ; exit 1 ) $(E) "[RUN] Testing chttp2_fullstack_max_concurrent_streams_test" @@ -732,6 +802,8 @@ test_c: buildtests_c $(Q) ./bins/$(CONFIG)/chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_inflight_calls_test || ( echo test chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_inflight_calls_test failed ; exit 1 ) $(E) "[RUN] Testing chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_tags_test" $(Q) ./bins/$(CONFIG)/chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_tags_test || ( echo test chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_tags_test failed ; exit 1 ) + $(E) "[RUN] Testing chttp2_simple_ssl_fullstack_graceful_server_shutdown_test" + $(Q) ./bins/$(CONFIG)/chttp2_simple_ssl_fullstack_graceful_server_shutdown_test || ( echo test chttp2_simple_ssl_fullstack_graceful_server_shutdown_test failed ; exit 1 ) $(E) "[RUN] Testing chttp2_simple_ssl_fullstack_invoke_large_request_test" $(Q) ./bins/$(CONFIG)/chttp2_simple_ssl_fullstack_invoke_large_request_test || ( echo test chttp2_simple_ssl_fullstack_invoke_large_request_test failed ; exit 1 ) $(E) "[RUN] Testing chttp2_simple_ssl_fullstack_max_concurrent_streams_test" @@ -774,6 +846,8 @@ test_c: buildtests_c $(Q) ./bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_inflight_calls_test || ( echo test chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_inflight_calls_test failed ; exit 1 ) $(E) "[RUN] Testing chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_tags_test" $(Q) ./bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_tags_test || ( echo test chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_tags_test failed ; exit 1 ) + $(E) "[RUN] Testing chttp2_simple_ssl_with_oauth2_fullstack_graceful_server_shutdown_test" + $(Q) ./bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_graceful_server_shutdown_test || ( echo test chttp2_simple_ssl_with_oauth2_fullstack_graceful_server_shutdown_test failed ; exit 1 ) $(E) "[RUN] Testing chttp2_simple_ssl_with_oauth2_fullstack_invoke_large_request_test" $(Q) ./bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_invoke_large_request_test || ( echo test chttp2_simple_ssl_with_oauth2_fullstack_invoke_large_request_test failed ; exit 1 ) $(E) "[RUN] Testing chttp2_simple_ssl_with_oauth2_fullstack_max_concurrent_streams_test" @@ -816,6 +890,8 @@ test_c: buildtests_c $(Q) ./bins/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_inflight_calls_test || ( echo test chttp2_socket_pair_early_server_shutdown_finishes_inflight_calls_test failed ; exit 1 ) $(E) "[RUN] Testing chttp2_socket_pair_early_server_shutdown_finishes_tags_test" $(Q) ./bins/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_tags_test || ( echo test chttp2_socket_pair_early_server_shutdown_finishes_tags_test failed ; exit 1 ) + $(E) "[RUN] Testing chttp2_socket_pair_graceful_server_shutdown_test" + $(Q) ./bins/$(CONFIG)/chttp2_socket_pair_graceful_server_shutdown_test || ( echo test chttp2_socket_pair_graceful_server_shutdown_test failed ; exit 1 ) $(E) "[RUN] Testing chttp2_socket_pair_invoke_large_request_test" $(Q) ./bins/$(CONFIG)/chttp2_socket_pair_invoke_large_request_test || ( echo test chttp2_socket_pair_invoke_large_request_test failed ; exit 1 ) $(E) "[RUN] Testing chttp2_socket_pair_max_concurrent_streams_test" @@ -858,6 +934,8 @@ test_c: buildtests_c $(Q) ./bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_inflight_calls_test || ( echo test chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_inflight_calls_test failed ; exit 1 ) $(E) "[RUN] Testing chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_tags_test" $(Q) ./bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_tags_test || ( echo test chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_tags_test failed ; exit 1 ) + $(E) "[RUN] Testing chttp2_socket_pair_one_byte_at_a_time_graceful_server_shutdown_test" + $(Q) ./bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_graceful_server_shutdown_test || ( echo test chttp2_socket_pair_one_byte_at_a_time_graceful_server_shutdown_test failed ; exit 1 ) $(E) "[RUN] Testing chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_test" $(Q) ./bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_test || ( echo test chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_test failed ; exit 1 ) $(E) "[RUN] Testing chttp2_socket_pair_one_byte_at_a_time_max_concurrent_streams_test" @@ -885,28 +963,28 @@ test_c: buildtests_c test_cxx: buildtests_cxx - $(E) "[RUN] Testing thread_pool_test" - $(Q) ./bins/$(CONFIG)/thread_pool_test || ( echo test thread_pool_test failed ; exit 1 ) - $(E) "[RUN] Testing status_test" - $(Q) ./bins/$(CONFIG)/status_test || ( echo test status_test failed ; exit 1 ) - $(E) "[RUN] Testing sync_client_async_server_test" - $(Q) ./bins/$(CONFIG)/sync_client_async_server_test || ( echo test sync_client_async_server_test failed ; exit 1 ) - $(E) "[RUN] Testing qps_client" - $(Q) ./bins/$(CONFIG)/qps_client || ( echo test qps_client failed ; exit 1 ) - $(E) "[RUN] Testing qps_server" - $(Q) ./bins/$(CONFIG)/qps_server || ( echo test qps_server failed ; exit 1 ) - $(E) "[RUN] Testing end2end_test" - $(Q) ./bins/$(CONFIG)/end2end_test || ( echo test end2end_test failed ; exit 1 ) $(E) "[RUN] Testing channel_arguments_test" $(Q) ./bins/$(CONFIG)/channel_arguments_test || ( echo test channel_arguments_test failed ; exit 1 ) $(E) "[RUN] Testing credentials_test" $(Q) ./bins/$(CONFIG)/credentials_test || ( echo test credentials_test failed ; exit 1 ) + $(E) "[RUN] Testing end2end_test" + $(Q) ./bins/$(CONFIG)/end2end_test || ( echo test end2end_test failed ; exit 1 ) + $(E) "[RUN] Testing tips_client_test" + $(Q) ./bins/$(CONFIG)/tips_client_test || ( echo test tips_client_test failed ; exit 1 ) + $(E) "[RUN] Testing qps_client" + $(Q) ./bins/$(CONFIG)/qps_client || ( echo test qps_client failed ; exit 1 ) + $(E) "[RUN] Testing qps_server" + $(Q) ./bins/$(CONFIG)/qps_server || ( echo test qps_server failed ; exit 1 ) + $(E) "[RUN] Testing status_test" + $(Q) ./bins/$(CONFIG)/status_test || ( echo test status_test failed ; exit 1 ) + $(E) "[RUN] Testing sync_client_async_server_test" + $(Q) ./bins/$(CONFIG)/sync_client_async_server_test || ( echo test sync_client_async_server_test failed ; exit 1 ) + $(E) "[RUN] Testing thread_pool_test" + $(Q) ./bins/$(CONFIG)/thread_pool_test || ( echo test thread_pool_test failed ; exit 1 ) tools: privatelibs bins/$(CONFIG)/gen_hpack_tables bins/$(CONFIG)/grpc_fetch_oauth2 -protoc_plugins: bins/$(CONFIG)/cpp_plugin bins/$(CONFIG)/ruby_plugin - buildbenchmarks: privatelibs bins/$(CONFIG)/grpc_completion_queue_benchmark bins/$(CONFIG)/low_level_ping_pong_benchmark benchmarks: buildbenchmarks @@ -917,6 +995,11 @@ strip-static: strip-static_c strip-static_cxx strip-shared: strip-shared_c strip-shared_cxx + +# TODO(nnoble): the strip target is stripping in-place, instead +# of copying files in a temporary folder. +# This prevents proper debugging after running make install. + strip-static_c: static_c $(E) "[STRIP] Stripping libgpr.a" $(Q) $(STRIP) libs/$(CONFIG)/libgpr.a @@ -941,109 +1024,77 @@ strip-shared_cxx: shared_cxx $(E) "[STRIP] Stripping libgrpc++.so" $(Q) $(STRIP) libs/$(CONFIG)/libgrpc++.$(SHARED_EXT) -deps/$(CONFIG)/gens/test/cpp/interop/empty.pb.dep: - $(Q) mkdir -p `dirname $@` - $(Q) touch $@ - -gens/test/cpp/interop/empty.pb.cc: test/cpp/interop/empty.proto protoc_plugins +gens/examples/tips/empty.pb.cc: examples/tips/empty.proto $(PROTOC_PLUGINS) $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) --cpp_out=gens --grpc_out=gens --plugin=protoc-gen-grpc=bins/$(CONFIG)/cpp_plugin $< -deps/$(CONFIG)/gens/test/cpp/interop/messages.pb.dep: - $(Q) mkdir -p `dirname $@` - $(Q) touch $@ - -gens/test/cpp/interop/messages.pb.cc: test/cpp/interop/messages.proto protoc_plugins +gens/examples/tips/label.pb.cc: examples/tips/label.proto $(PROTOC_PLUGINS) $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) --cpp_out=gens --grpc_out=gens --plugin=protoc-gen-grpc=bins/$(CONFIG)/cpp_plugin $< -deps/$(CONFIG)/gens/test/cpp/interop/test.pb.dep: - $(Q) mkdir -p `dirname $@` - $(Q) touch $@ - -gens/test/cpp/interop/test.pb.cc: test/cpp/interop/test.proto protoc_plugins +gens/examples/tips/pubsub.pb.cc: examples/tips/pubsub.proto $(PROTOC_PLUGINS) $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) --cpp_out=gens --grpc_out=gens --plugin=protoc-gen-grpc=bins/$(CONFIG)/cpp_plugin $< -deps/$(CONFIG)/gens/test/cpp/qps/qpstest.pb.dep: - $(Q) mkdir -p `dirname $@` - $(Q) touch $@ - -gens/test/cpp/qps/qpstest.pb.cc: test/cpp/qps/qpstest.proto protoc_plugins +gens/test/cpp/interop/empty.pb.cc: test/cpp/interop/empty.proto $(PROTOC_PLUGINS) $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) --cpp_out=gens --grpc_out=gens --plugin=protoc-gen-grpc=bins/$(CONFIG)/cpp_plugin $< -deps/$(CONFIG)/gens/test/cpp/util/echo.pb.dep: - $(Q) mkdir -p `dirname $@` - $(Q) touch $@ - -gens/test/cpp/util/echo.pb.cc: test/cpp/util/echo.proto protoc_plugins +gens/test/cpp/interop/messages.pb.cc: test/cpp/interop/messages.proto $(PROTOC_PLUGINS) $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) --cpp_out=gens --grpc_out=gens --plugin=protoc-gen-grpc=bins/$(CONFIG)/cpp_plugin $< -deps/$(CONFIG)/gens/test/cpp/util/echo_duplicate.pb.dep: +gens/test/cpp/interop/test.pb.cc: test/cpp/interop/test.proto $(PROTOC_PLUGINS) + $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` - $(Q) touch $@ + $(Q) $(PROTOC) --cpp_out=gens --grpc_out=gens --plugin=protoc-gen-grpc=bins/$(CONFIG)/cpp_plugin $< -gens/test/cpp/util/echo_duplicate.pb.cc: test/cpp/util/echo_duplicate.proto protoc_plugins +gens/test/cpp/qps/qpstest.pb.cc: test/cpp/qps/qpstest.proto $(PROTOC_PLUGINS) $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) --cpp_out=gens --grpc_out=gens --plugin=protoc-gen-grpc=bins/$(CONFIG)/cpp_plugin $< -deps/$(CONFIG)/gens/test/cpp/util/messages.pb.dep: +gens/test/cpp/util/echo.pb.cc: test/cpp/util/echo.proto $(PROTOC_PLUGINS) + $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` - $(Q) touch $@ + $(Q) $(PROTOC) --cpp_out=gens --grpc_out=gens --plugin=protoc-gen-grpc=bins/$(CONFIG)/cpp_plugin $< -gens/test/cpp/util/messages.pb.cc: test/cpp/util/messages.proto protoc_plugins +gens/test/cpp/util/echo_duplicate.pb.cc: test/cpp/util/echo_duplicate.proto $(PROTOC_PLUGINS) $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) --cpp_out=gens --grpc_out=gens --plugin=protoc-gen-grpc=bins/$(CONFIG)/cpp_plugin $< - -deps/$(CONFIG)/%.dep : %.c - $(E) "[DEP] Generating dependencies for $<" +gens/test/cpp/util/messages.pb.cc: test/cpp/util/messages.proto $(PROTOC_PLUGINS) + $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` - $(Q) $(CC) $(CFLAGS) $(CPPFLAGS_NO_ARCH) -MG -M $< > $@ + $(Q) $(PROTOC) --cpp_out=gens --grpc_out=gens --plugin=protoc-gen-grpc=bins/$(CONFIG)/cpp_plugin $< -deps/$(CONFIG)/%.dep : %.cc - $(E) "[DEP] Generating dependencies for $<" - $(Q) mkdir -p `dirname $@` - $(Q) $(CXX) $(CXXFLAGS) $(CPPFLAGS_NO_ARCH) -MG -M $< > $@ objs/$(CONFIG)/%.o : %.c $(E) "[C] Compiling $<" $(Q) mkdir -p `dirname $@` - $(Q) $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $< + $(Q) $(CC) $(CFLAGS) $(CPPFLAGS) -MMD -MF $(addsuffix .dep, $(basename $@)) -c -o $@ $< objs/$(CONFIG)/%.o : gens/%.pb.cc $(E) "[CXX] Compiling $<" $(Q) mkdir -p `dirname $@` - $(Q) $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -o $@ $< + $(Q) $(CXX) $(CXXFLAGS) $(CPPFLAGS) -MMD -MF $(addsuffix .dep, $(basename $@)) -c -o $@ $< objs/$(CONFIG)/src/compiler/%.o : src/compiler/%.cc $(E) "[HOSTCXX] Compiling $<" $(Q) mkdir -p `dirname $@` - $(Q) $(HOST_CXX) $(HOST_CXXFLAGS) $(HOST_CPPFLAGS) -c -o $@ $< + $(Q) $(HOST_CXX) $(HOST_CXXFLAGS) $(HOST_CPPFLAGS) -MMD -MF $(addsuffix .dep, $(basename $@)) -c -o $@ $< objs/$(CONFIG)/%.o : %.cc $(E) "[CXX] Compiling $<" $(Q) mkdir -p `dirname $@` - $(Q) $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -o $@ $< + $(Q) $(CXX) $(CXXFLAGS) $(CPPFLAGS) -MMD -MF $(addsuffix .dep, $(basename $@)) -c -o $@ $< -dep: dep_c dep_cxx - -dep_c: deps_libgpr deps_libgrpc deps_libgrpc_unsecure deps_libgpr_test_util deps_libgrpc_test_util deps_libend2end_fixture_chttp2_fake_security deps_libend2end_fixture_chttp2_fullstack deps_libend2end_fixture_chttp2_simple_ssl_fullstack deps_libend2end_fixture_chttp2_simple_ssl_with_oauth2_fullstack deps_libend2end_fixture_chttp2_socket_pair deps_libend2end_fixture_chttp2_socket_pair_one_byte_at_a_time deps_libend2end_test_cancel_after_accept deps_libend2end_test_cancel_after_accept_and_writes_closed deps_libend2end_test_cancel_after_invoke deps_libend2end_test_cancel_before_invoke deps_libend2end_test_cancel_in_a_vacuum deps_libend2end_test_census_simple_request deps_libend2end_test_disappearing_server deps_libend2end_test_early_server_shutdown_finishes_inflight_calls deps_libend2end_test_early_server_shutdown_finishes_tags deps_libend2end_test_invoke_large_request deps_libend2end_test_max_concurrent_streams deps_libend2end_test_no_op deps_libend2end_test_ping_pong_streaming deps_libend2end_test_request_response_with_binary_metadata_and_payload deps_libend2end_test_request_response_with_metadata_and_payload deps_libend2end_test_request_response_with_payload deps_libend2end_test_request_response_with_trailing_metadata_and_payload deps_libend2end_test_simple_delayed_request deps_libend2end_test_simple_request deps_libend2end_test_thread_stress deps_libend2end_test_writes_done_hangs_with_pending_read deps_libend2end_certs - -bins_dep_c: deps_gen_hpack_tables deps_grpc_byte_buffer_reader_test deps_gpr_cancellable_test deps_gpr_log_test deps_gpr_useful_test deps_gpr_cmdline_test deps_gpr_histogram_test deps_gpr_host_port_test deps_gpr_slice_buffer_test deps_gpr_slice_test deps_gpr_string_test deps_gpr_sync_test deps_gpr_thd_test deps_gpr_time_test deps_murmur_hash_test deps_grpc_stream_op_test deps_alpn_test deps_time_averaged_stats_test deps_chttp2_stream_encoder_test deps_hpack_table_test deps_chttp2_stream_map_test deps_hpack_parser_test deps_transport_metadata_test deps_chttp2_status_conversion_test deps_chttp2_transport_end2end_test deps_tcp_posix_test deps_dualstack_socket_test deps_no_server_test deps_resolve_address_test deps_sockaddr_utils_test deps_tcp_server_posix_test deps_tcp_client_posix_test deps_grpc_channel_stack_test deps_metadata_buffer_test deps_grpc_completion_queue_test deps_grpc_completion_queue_benchmark deps_census_trace_store_test deps_census_stats_store_test deps_census_window_stats_test deps_census_statistics_quick_test deps_census_statistics_small_log_test deps_census_statistics_performance_test deps_census_statistics_multiple_writers_test deps_census_statistics_multiple_writers_circular_buffer_test deps_census_stub_test deps_census_hash_table_test deps_fling_server deps_fling_client deps_fling_test deps_echo_server deps_echo_client deps_echo_test deps_low_level_ping_pong_benchmark deps_message_compress_test deps_bin_encoder_test deps_secure_endpoint_test deps_httpcli_format_request_test deps_httpcli_parser_test deps_httpcli_test deps_grpc_credentials_test deps_grpc_fetch_oauth2 deps_grpc_base64_test deps_grpc_json_token_test deps_timeout_encoding_test deps_fd_posix_test deps_fling_stream_test deps_lame_client_test deps_alarm_test deps_alarm_list_test deps_alarm_heap_test deps_time_test deps_chttp2_fake_security_cancel_after_accept_test deps_chttp2_fake_security_cancel_after_accept_and_writes_closed_test deps_chttp2_fake_security_cancel_after_invoke_test deps_chttp2_fake_security_cancel_before_invoke_test deps_chttp2_fake_security_cancel_in_a_vacuum_test deps_chttp2_fake_security_census_simple_request_test deps_chttp2_fake_security_disappearing_server_test deps_chttp2_fake_security_early_server_shutdown_finishes_inflight_calls_test deps_chttp2_fake_security_early_server_shutdown_finishes_tags_test deps_chttp2_fake_security_invoke_large_request_test deps_chttp2_fake_security_max_concurrent_streams_test deps_chttp2_fake_security_no_op_test deps_chttp2_fake_security_ping_pong_streaming_test deps_chttp2_fake_security_request_response_with_binary_metadata_and_payload_test deps_chttp2_fake_security_request_response_with_metadata_and_payload_test deps_chttp2_fake_security_request_response_with_payload_test deps_chttp2_fake_security_request_response_with_trailing_metadata_and_payload_test deps_chttp2_fake_security_simple_delayed_request_test deps_chttp2_fake_security_simple_request_test deps_chttp2_fake_security_thread_stress_test deps_chttp2_fake_security_writes_done_hangs_with_pending_read_test deps_chttp2_fullstack_cancel_after_accept_test deps_chttp2_fullstack_cancel_after_accept_and_writes_closed_test deps_chttp2_fullstack_cancel_after_invoke_test deps_chttp2_fullstack_cancel_before_invoke_test deps_chttp2_fullstack_cancel_in_a_vacuum_test deps_chttp2_fullstack_census_simple_request_test deps_chttp2_fullstack_disappearing_server_test deps_chttp2_fullstack_early_server_shutdown_finishes_inflight_calls_test deps_chttp2_fullstack_early_server_shutdown_finishes_tags_test deps_chttp2_fullstack_invoke_large_request_test deps_chttp2_fullstack_max_concurrent_streams_test deps_chttp2_fullstack_no_op_test deps_chttp2_fullstack_ping_pong_streaming_test deps_chttp2_fullstack_request_response_with_binary_metadata_and_payload_test deps_chttp2_fullstack_request_response_with_metadata_and_payload_test deps_chttp2_fullstack_request_response_with_payload_test deps_chttp2_fullstack_request_response_with_trailing_metadata_and_payload_test deps_chttp2_fullstack_simple_delayed_request_test deps_chttp2_fullstack_simple_request_test deps_chttp2_fullstack_thread_stress_test deps_chttp2_fullstack_writes_done_hangs_with_pending_read_test deps_chttp2_simple_ssl_fullstack_cancel_after_accept_test deps_chttp2_simple_ssl_fullstack_cancel_after_accept_and_writes_closed_test deps_chttp2_simple_ssl_fullstack_cancel_after_invoke_test deps_chttp2_simple_ssl_fullstack_cancel_before_invoke_test deps_chttp2_simple_ssl_fullstack_cancel_in_a_vacuum_test deps_chttp2_simple_ssl_fullstack_census_simple_request_test deps_chttp2_simple_ssl_fullstack_disappearing_server_test deps_chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_inflight_calls_test deps_chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_tags_test deps_chttp2_simple_ssl_fullstack_invoke_large_request_test deps_chttp2_simple_ssl_fullstack_max_concurrent_streams_test deps_chttp2_simple_ssl_fullstack_no_op_test deps_chttp2_simple_ssl_fullstack_ping_pong_streaming_test deps_chttp2_simple_ssl_fullstack_request_response_with_binary_metadata_and_payload_test deps_chttp2_simple_ssl_fullstack_request_response_with_metadata_and_payload_test deps_chttp2_simple_ssl_fullstack_request_response_with_payload_test deps_chttp2_simple_ssl_fullstack_request_response_with_trailing_metadata_and_payload_test deps_chttp2_simple_ssl_fullstack_simple_delayed_request_test deps_chttp2_simple_ssl_fullstack_simple_request_test deps_chttp2_simple_ssl_fullstack_thread_stress_test deps_chttp2_simple_ssl_fullstack_writes_done_hangs_with_pending_read_test deps_chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_test deps_chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_and_writes_closed_test deps_chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_invoke_test deps_chttp2_simple_ssl_with_oauth2_fullstack_cancel_before_invoke_test deps_chttp2_simple_ssl_with_oauth2_fullstack_cancel_in_a_vacuum_test deps_chttp2_simple_ssl_with_oauth2_fullstack_census_simple_request_test deps_chttp2_simple_ssl_with_oauth2_fullstack_disappearing_server_test deps_chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_inflight_calls_test deps_chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_tags_test deps_chttp2_simple_ssl_with_oauth2_fullstack_invoke_large_request_test deps_chttp2_simple_ssl_with_oauth2_fullstack_max_concurrent_streams_test deps_chttp2_simple_ssl_with_oauth2_fullstack_no_op_test deps_chttp2_simple_ssl_with_oauth2_fullstack_ping_pong_streaming_test deps_chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_binary_metadata_and_payload_test deps_chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_metadata_and_payload_test deps_chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_payload_test deps_chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_trailing_metadata_and_payload_test deps_chttp2_simple_ssl_with_oauth2_fullstack_simple_delayed_request_test deps_chttp2_simple_ssl_with_oauth2_fullstack_simple_request_test deps_chttp2_simple_ssl_with_oauth2_fullstack_thread_stress_test deps_chttp2_simple_ssl_with_oauth2_fullstack_writes_done_hangs_with_pending_read_test deps_chttp2_socket_pair_cancel_after_accept_test deps_chttp2_socket_pair_cancel_after_accept_and_writes_closed_test deps_chttp2_socket_pair_cancel_after_invoke_test deps_chttp2_socket_pair_cancel_before_invoke_test deps_chttp2_socket_pair_cancel_in_a_vacuum_test deps_chttp2_socket_pair_census_simple_request_test deps_chttp2_socket_pair_disappearing_server_test deps_chttp2_socket_pair_early_server_shutdown_finishes_inflight_calls_test deps_chttp2_socket_pair_early_server_shutdown_finishes_tags_test deps_chttp2_socket_pair_invoke_large_request_test deps_chttp2_socket_pair_max_concurrent_streams_test deps_chttp2_socket_pair_no_op_test deps_chttp2_socket_pair_ping_pong_streaming_test deps_chttp2_socket_pair_request_response_with_binary_metadata_and_payload_test deps_chttp2_socket_pair_request_response_with_metadata_and_payload_test deps_chttp2_socket_pair_request_response_with_payload_test deps_chttp2_socket_pair_request_response_with_trailing_metadata_and_payload_test deps_chttp2_socket_pair_simple_delayed_request_test deps_chttp2_socket_pair_simple_request_test deps_chttp2_socket_pair_thread_stress_test deps_chttp2_socket_pair_writes_done_hangs_with_pending_read_test deps_chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_test deps_chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_and_writes_closed_test deps_chttp2_socket_pair_one_byte_at_a_time_cancel_after_invoke_test deps_chttp2_socket_pair_one_byte_at_a_time_cancel_before_invoke_test deps_chttp2_socket_pair_one_byte_at_a_time_cancel_in_a_vacuum_test deps_chttp2_socket_pair_one_byte_at_a_time_census_simple_request_test deps_chttp2_socket_pair_one_byte_at_a_time_disappearing_server_test deps_chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_inflight_calls_test deps_chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_tags_test deps_chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_test deps_chttp2_socket_pair_one_byte_at_a_time_max_concurrent_streams_test deps_chttp2_socket_pair_one_byte_at_a_time_no_op_test deps_chttp2_socket_pair_one_byte_at_a_time_ping_pong_streaming_test deps_chttp2_socket_pair_one_byte_at_a_time_request_response_with_binary_metadata_and_payload_test deps_chttp2_socket_pair_one_byte_at_a_time_request_response_with_metadata_and_payload_test deps_chttp2_socket_pair_one_byte_at_a_time_request_response_with_payload_test deps_chttp2_socket_pair_one_byte_at_a_time_request_response_with_trailing_metadata_and_payload_test deps_chttp2_socket_pair_one_byte_at_a_time_simple_delayed_request_test deps_chttp2_socket_pair_one_byte_at_a_time_simple_request_test deps_chttp2_socket_pair_one_byte_at_a_time_thread_stress_test deps_chttp2_socket_pair_one_byte_at_a_time_writes_done_hangs_with_pending_read_test - -dep_cxx: deps_libgrpc++ deps_libgrpc++_test_util - -bins_dep_cxx: deps_cpp_plugin deps_ruby_plugin deps_thread_pool_test deps_status_test deps_sync_client_async_server_test deps_qps_client deps_qps_server deps_interop_server deps_interop_client deps_end2end_test deps_channel_arguments_test deps_credentials_test install: install_c install_cxx @@ -1133,8 +1184,8 @@ ifneq ($(SYSTEM),Darwin) endif endif -clean: clean_libgpr clean_libgrpc clean_libgrpc_unsecure clean_libgpr_test_util clean_libgrpc_test_util clean_libgrpc++ clean_libgrpc++_test_util clean_libend2end_fixture_chttp2_fake_security clean_libend2end_fixture_chttp2_fullstack clean_libend2end_fixture_chttp2_simple_ssl_fullstack clean_libend2end_fixture_chttp2_simple_ssl_with_oauth2_fullstack clean_libend2end_fixture_chttp2_socket_pair clean_libend2end_fixture_chttp2_socket_pair_one_byte_at_a_time clean_libend2end_test_cancel_after_accept clean_libend2end_test_cancel_after_accept_and_writes_closed clean_libend2end_test_cancel_after_invoke clean_libend2end_test_cancel_before_invoke clean_libend2end_test_cancel_in_a_vacuum clean_libend2end_test_census_simple_request clean_libend2end_test_disappearing_server clean_libend2end_test_early_server_shutdown_finishes_inflight_calls clean_libend2end_test_early_server_shutdown_finishes_tags clean_libend2end_test_invoke_large_request clean_libend2end_test_max_concurrent_streams clean_libend2end_test_no_op clean_libend2end_test_ping_pong_streaming clean_libend2end_test_request_response_with_binary_metadata_and_payload clean_libend2end_test_request_response_with_metadata_and_payload clean_libend2end_test_request_response_with_payload clean_libend2end_test_request_response_with_trailing_metadata_and_payload clean_libend2end_test_simple_delayed_request clean_libend2end_test_simple_request clean_libend2end_test_thread_stress clean_libend2end_test_writes_done_hangs_with_pending_read clean_libend2end_certs clean_gen_hpack_tables clean_cpp_plugin clean_ruby_plugin clean_grpc_byte_buffer_reader_test clean_gpr_cancellable_test clean_gpr_log_test clean_gpr_useful_test clean_gpr_cmdline_test clean_gpr_histogram_test clean_gpr_host_port_test clean_gpr_slice_buffer_test clean_gpr_slice_test clean_gpr_string_test clean_gpr_sync_test clean_gpr_thd_test clean_gpr_time_test clean_murmur_hash_test clean_grpc_stream_op_test clean_alpn_test clean_time_averaged_stats_test clean_chttp2_stream_encoder_test clean_hpack_table_test clean_chttp2_stream_map_test clean_hpack_parser_test clean_transport_metadata_test clean_chttp2_status_conversion_test clean_chttp2_transport_end2end_test clean_tcp_posix_test clean_dualstack_socket_test clean_no_server_test clean_resolve_address_test clean_sockaddr_utils_test clean_tcp_server_posix_test clean_tcp_client_posix_test clean_grpc_channel_stack_test clean_metadata_buffer_test clean_grpc_completion_queue_test clean_grpc_completion_queue_benchmark clean_census_trace_store_test clean_census_stats_store_test clean_census_window_stats_test clean_census_statistics_quick_test clean_census_statistics_small_log_test clean_census_statistics_performance_test clean_census_statistics_multiple_writers_test clean_census_statistics_multiple_writers_circular_buffer_test clean_census_stub_test clean_census_hash_table_test clean_fling_server clean_fling_client clean_fling_test clean_echo_server clean_echo_client clean_echo_test clean_low_level_ping_pong_benchmark clean_message_compress_test clean_bin_encoder_test clean_secure_endpoint_test clean_httpcli_format_request_test clean_httpcli_parser_test clean_httpcli_test clean_grpc_credentials_test clean_grpc_fetch_oauth2 clean_grpc_base64_test clean_grpc_json_token_test clean_timeout_encoding_test clean_fd_posix_test clean_fling_stream_test clean_lame_client_test clean_thread_pool_test clean_status_test clean_sync_client_async_server_test clean_qps_client clean_qps_server clean_interop_server clean_interop_client clean_end2end_test clean_channel_arguments_test clean_credentials_test clean_alarm_test clean_alarm_list_test clean_alarm_heap_test clean_time_test clean_chttp2_fake_security_cancel_after_accept_test clean_chttp2_fake_security_cancel_after_accept_and_writes_closed_test clean_chttp2_fake_security_cancel_after_invoke_test clean_chttp2_fake_security_cancel_before_invoke_test clean_chttp2_fake_security_cancel_in_a_vacuum_test clean_chttp2_fake_security_census_simple_request_test clean_chttp2_fake_security_disappearing_server_test clean_chttp2_fake_security_early_server_shutdown_finishes_inflight_calls_test clean_chttp2_fake_security_early_server_shutdown_finishes_tags_test clean_chttp2_fake_security_invoke_large_request_test clean_chttp2_fake_security_max_concurrent_streams_test clean_chttp2_fake_security_no_op_test clean_chttp2_fake_security_ping_pong_streaming_test clean_chttp2_fake_security_request_response_with_binary_metadata_and_payload_test clean_chttp2_fake_security_request_response_with_metadata_and_payload_test clean_chttp2_fake_security_request_response_with_payload_test clean_chttp2_fake_security_request_response_with_trailing_metadata_and_payload_test clean_chttp2_fake_security_simple_delayed_request_test clean_chttp2_fake_security_simple_request_test clean_chttp2_fake_security_thread_stress_test clean_chttp2_fake_security_writes_done_hangs_with_pending_read_test clean_chttp2_fullstack_cancel_after_accept_test clean_chttp2_fullstack_cancel_after_accept_and_writes_closed_test clean_chttp2_fullstack_cancel_after_invoke_test clean_chttp2_fullstack_cancel_before_invoke_test clean_chttp2_fullstack_cancel_in_a_vacuum_test clean_chttp2_fullstack_census_simple_request_test clean_chttp2_fullstack_disappearing_server_test clean_chttp2_fullstack_early_server_shutdown_finishes_inflight_calls_test clean_chttp2_fullstack_early_server_shutdown_finishes_tags_test clean_chttp2_fullstack_invoke_large_request_test clean_chttp2_fullstack_max_concurrent_streams_test clean_chttp2_fullstack_no_op_test clean_chttp2_fullstack_ping_pong_streaming_test clean_chttp2_fullstack_request_response_with_binary_metadata_and_payload_test clean_chttp2_fullstack_request_response_with_metadata_and_payload_test clean_chttp2_fullstack_request_response_with_payload_test clean_chttp2_fullstack_request_response_with_trailing_metadata_and_payload_test clean_chttp2_fullstack_simple_delayed_request_test clean_chttp2_fullstack_simple_request_test clean_chttp2_fullstack_thread_stress_test clean_chttp2_fullstack_writes_done_hangs_with_pending_read_test clean_chttp2_simple_ssl_fullstack_cancel_after_accept_test clean_chttp2_simple_ssl_fullstack_cancel_after_accept_and_writes_closed_test clean_chttp2_simple_ssl_fullstack_cancel_after_invoke_test clean_chttp2_simple_ssl_fullstack_cancel_before_invoke_test clean_chttp2_simple_ssl_fullstack_cancel_in_a_vacuum_test clean_chttp2_simple_ssl_fullstack_census_simple_request_test clean_chttp2_simple_ssl_fullstack_disappearing_server_test clean_chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_inflight_calls_test clean_chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_tags_test clean_chttp2_simple_ssl_fullstack_invoke_large_request_test clean_chttp2_simple_ssl_fullstack_max_concurrent_streams_test clean_chttp2_simple_ssl_fullstack_no_op_test clean_chttp2_simple_ssl_fullstack_ping_pong_streaming_test clean_chttp2_simple_ssl_fullstack_request_response_with_binary_metadata_and_payload_test clean_chttp2_simple_ssl_fullstack_request_response_with_metadata_and_payload_test clean_chttp2_simple_ssl_fullstack_request_response_with_payload_test clean_chttp2_simple_ssl_fullstack_request_response_with_trailing_metadata_and_payload_test clean_chttp2_simple_ssl_fullstack_simple_delayed_request_test clean_chttp2_simple_ssl_fullstack_simple_request_test clean_chttp2_simple_ssl_fullstack_thread_stress_test clean_chttp2_simple_ssl_fullstack_writes_done_hangs_with_pending_read_test clean_chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_test clean_chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_and_writes_closed_test clean_chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_invoke_test clean_chttp2_simple_ssl_with_oauth2_fullstack_cancel_before_invoke_test clean_chttp2_simple_ssl_with_oauth2_fullstack_cancel_in_a_vacuum_test clean_chttp2_simple_ssl_with_oauth2_fullstack_census_simple_request_test clean_chttp2_simple_ssl_with_oauth2_fullstack_disappearing_server_test clean_chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_inflight_calls_test clean_chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_tags_test clean_chttp2_simple_ssl_with_oauth2_fullstack_invoke_large_request_test clean_chttp2_simple_ssl_with_oauth2_fullstack_max_concurrent_streams_test clean_chttp2_simple_ssl_with_oauth2_fullstack_no_op_test clean_chttp2_simple_ssl_with_oauth2_fullstack_ping_pong_streaming_test clean_chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_binary_metadata_and_payload_test clean_chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_metadata_and_payload_test clean_chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_payload_test clean_chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_trailing_metadata_and_payload_test clean_chttp2_simple_ssl_with_oauth2_fullstack_simple_delayed_request_test clean_chttp2_simple_ssl_with_oauth2_fullstack_simple_request_test clean_chttp2_simple_ssl_with_oauth2_fullstack_thread_stress_test clean_chttp2_simple_ssl_with_oauth2_fullstack_writes_done_hangs_with_pending_read_test clean_chttp2_socket_pair_cancel_after_accept_test clean_chttp2_socket_pair_cancel_after_accept_and_writes_closed_test clean_chttp2_socket_pair_cancel_after_invoke_test clean_chttp2_socket_pair_cancel_before_invoke_test clean_chttp2_socket_pair_cancel_in_a_vacuum_test clean_chttp2_socket_pair_census_simple_request_test clean_chttp2_socket_pair_disappearing_server_test clean_chttp2_socket_pair_early_server_shutdown_finishes_inflight_calls_test clean_chttp2_socket_pair_early_server_shutdown_finishes_tags_test clean_chttp2_socket_pair_invoke_large_request_test clean_chttp2_socket_pair_max_concurrent_streams_test clean_chttp2_socket_pair_no_op_test clean_chttp2_socket_pair_ping_pong_streaming_test clean_chttp2_socket_pair_request_response_with_binary_metadata_and_payload_test clean_chttp2_socket_pair_request_response_with_metadata_and_payload_test clean_chttp2_socket_pair_request_response_with_payload_test clean_chttp2_socket_pair_request_response_with_trailing_metadata_and_payload_test clean_chttp2_socket_pair_simple_delayed_request_test clean_chttp2_socket_pair_simple_request_test clean_chttp2_socket_pair_thread_stress_test clean_chttp2_socket_pair_writes_done_hangs_with_pending_read_test clean_chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_test clean_chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_and_writes_closed_test clean_chttp2_socket_pair_one_byte_at_a_time_cancel_after_invoke_test clean_chttp2_socket_pair_one_byte_at_a_time_cancel_before_invoke_test clean_chttp2_socket_pair_one_byte_at_a_time_cancel_in_a_vacuum_test clean_chttp2_socket_pair_one_byte_at_a_time_census_simple_request_test clean_chttp2_socket_pair_one_byte_at_a_time_disappearing_server_test clean_chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_inflight_calls_test clean_chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_tags_test clean_chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_test clean_chttp2_socket_pair_one_byte_at_a_time_max_concurrent_streams_test clean_chttp2_socket_pair_one_byte_at_a_time_no_op_test clean_chttp2_socket_pair_one_byte_at_a_time_ping_pong_streaming_test clean_chttp2_socket_pair_one_byte_at_a_time_request_response_with_binary_metadata_and_payload_test clean_chttp2_socket_pair_one_byte_at_a_time_request_response_with_metadata_and_payload_test clean_chttp2_socket_pair_one_byte_at_a_time_request_response_with_payload_test clean_chttp2_socket_pair_one_byte_at_a_time_request_response_with_trailing_metadata_and_payload_test clean_chttp2_socket_pair_one_byte_at_a_time_simple_delayed_request_test clean_chttp2_socket_pair_one_byte_at_a_time_simple_request_test clean_chttp2_socket_pair_one_byte_at_a_time_thread_stress_test clean_chttp2_socket_pair_one_byte_at_a_time_writes_done_hangs_with_pending_read_test - $(Q) $(RM) -r deps objs libs bins gens +clean: + $(Q) $(RM) -rf objs libs bins gens # The various libraries @@ -1148,14 +1199,14 @@ LIBGPR_SRC = \ src/core/support/cpu_posix.c \ src/core/support/histogram.c \ src/core/support/host_port.c \ - src/core/support/log_android.c \ src/core/support/log.c \ + src/core/support/log_android.c \ src/core/support/log_linux.c \ src/core/support/log_posix.c \ src/core/support/log_win32.c \ src/core/support/murmur_hash.c \ - src/core/support/slice_buffer.c \ src/core/support/slice.c \ + src/core/support/slice_buffer.c \ src/core/support/string.c \ src/core/support/string_posix.c \ src/core/support/string_win32.c \ @@ -1170,9 +1221,9 @@ LIBGPR_SRC = \ PUBLIC_HEADERS_C += \ include/grpc/support/alloc.h \ + include/grpc/support/atm.h \ include/grpc/support/atm_gcc_atomic.h \ include/grpc/support/atm_gcc_sync.h \ - include/grpc/support/atm.h \ include/grpc/support/atm_win32.h \ include/grpc/support/cancellable_platform.h \ include/grpc/support/cmdline.h \ @@ -1180,11 +1231,11 @@ PUBLIC_HEADERS_C += \ include/grpc/support/host_port.h \ include/grpc/support/log.h \ include/grpc/support/port_platform.h \ - include/grpc/support/slice_buffer.h \ include/grpc/support/slice.h \ + include/grpc/support/slice_buffer.h \ include/grpc/support/string.h \ - include/grpc/support/sync_generic.h \ include/grpc/support/sync.h \ + include/grpc/support/sync_generic.h \ include/grpc/support/sync_posix.h \ include/grpc/support/sync_win32.h \ include/grpc/support/thd.h \ @@ -1196,22 +1247,25 @@ PUBLIC_HEADERS_C += \ include/grpc/support/useful.h \ LIBGPR_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGPR_SRC)))) -LIBGPR_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(LIBGPR_SRC)))) -libs/$(CONFIG)/libgpr.a: $(LIBGPR_OBJS) +libs/$(CONFIG)/libgpr.a: $(ZLIB_DEP) $(LIBGPR_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` + $(Q) rm -f libs/$(CONFIG)/libgpr.a $(Q) $(AR) rcs libs/$(CONFIG)/libgpr.a $(LIBGPR_OBJS) +ifeq ($(SYSTEM),Darwin) + $(Q) ranlib libs/$(CONFIG)/libgpr.a +endif ifeq ($(SYSTEM),MINGW32) -libs/$(CONFIG)/gpr.$(SHARED_EXT): $(LIBGPR_OBJS) +libs/$(CONFIG)/gpr.$(SHARED_EXT): $(LIBGPR_OBJS) $(ZLIB_DEP) $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LD) $(LDFLAGS) -Llibs/$(CONFIG) -shared -Wl,--output-def=libs/$(CONFIG)/gpr.def -Wl,--out-implib=libs/$(CONFIG)/libgpr-imp.a -o libs/$(CONFIG)/gpr.$(SHARED_EXT) $(LIBGPR_OBJS) $(LDLIBS) else -libs/$(CONFIG)/libgpr.$(SHARED_EXT): $(LIBGPR_OBJS) +libs/$(CONFIG)/libgpr.$(SHARED_EXT): $(LIBGPR_OBJS) $(ZLIB_DEP) $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` ifeq ($(SYSTEM),Darwin) @@ -1223,10 +1277,8 @@ endif endif -deps_libgpr: $(LIBGPR_DEPS) - ifneq ($(NO_DEPS),true) --include $(LIBGPR_DEPS) +-include $(LIBGPR_OBJS:.o=.dep) endif objs/$(CONFIG)/src/core/support/alloc.o: @@ -1236,14 +1288,14 @@ objs/$(CONFIG)/src/core/support/cpu_linux.o: objs/$(CONFIG)/src/core/support/cpu_posix.o: objs/$(CONFIG)/src/core/support/histogram.o: objs/$(CONFIG)/src/core/support/host_port.o: -objs/$(CONFIG)/src/core/support/log_android.o: objs/$(CONFIG)/src/core/support/log.o: +objs/$(CONFIG)/src/core/support/log_android.o: objs/$(CONFIG)/src/core/support/log_linux.o: objs/$(CONFIG)/src/core/support/log_posix.o: objs/$(CONFIG)/src/core/support/log_win32.o: objs/$(CONFIG)/src/core/support/murmur_hash.o: -objs/$(CONFIG)/src/core/support/slice_buffer.o: objs/$(CONFIG)/src/core/support/slice.o: +objs/$(CONFIG)/src/core/support/slice_buffer.o: objs/$(CONFIG)/src/core/support/string.o: objs/$(CONFIG)/src/core/support/string_posix.o: objs/$(CONFIG)/src/core/support/string_win32.o: @@ -1256,12 +1308,48 @@ objs/$(CONFIG)/src/core/support/time.o: objs/$(CONFIG)/src/core/support/time_posix.o: objs/$(CONFIG)/src/core/support/time_win32.o: -clean_libgpr: - $(E) "[CLEAN] Cleaning libgpr files" - $(Q) $(RM) $(LIBGPR_OBJS) - $(Q) $(RM) $(LIBGPR_DEPS) - $(Q) $(RM) libs/$(CONFIG)/libgpr.a - $(Q) $(RM) libs/$(CONFIG)/libgpr.$(SHARED_EXT) + +LIBGPR_TEST_UTIL_SRC = \ + test/core/util/test_config.c \ + + +LIBGPR_TEST_UTIL_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGPR_TEST_UTIL_SRC)))) + +ifeq ($(NO_SECURE),true) + +# You can't build secure libraries if you don't have OpenSSL with ALPN. + +libs/$(CONFIG)/libgpr_test_util.a: openssl_dep_error + + +else + +ifneq ($(OPENSSL_DEP),) +test/core/util/test_config.c: $(OPENSSL_DEP) +endif + +libs/$(CONFIG)/libgpr_test_util.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBGPR_TEST_UTIL_OBJS) + $(E) "[AR] Creating $@" + $(Q) mkdir -p `dirname $@` + $(Q) rm -f libs/$(CONFIG)/libgpr_test_util.a + $(Q) $(AR) rcs libs/$(CONFIG)/libgpr_test_util.a $(LIBGPR_TEST_UTIL_OBJS) +ifeq ($(SYSTEM),Darwin) + $(Q) ranlib libs/$(CONFIG)/libgpr_test_util.a +endif + + + + + +endif + +ifneq ($(NO_SECURE),true) +ifneq ($(NO_DEPS),true) +-include $(LIBGPR_TEST_UTIL_OBJS:.o=.dep) +endif +endif + +objs/$(CONFIG)/test/core/util/test_config.o: LIBGRPC_SRC = \ @@ -1304,6 +1392,7 @@ LIBGRPC_SRC = \ src/core/iomgr/fd_posix.c \ src/core/iomgr/iomgr.c \ src/core/iomgr/iomgr_posix.c \ + src/core/iomgr/pollset_kick_posix.c \ src/core/iomgr/pollset_multipoller_with_poll_posix.c \ src/core/iomgr/pollset_posix.c \ src/core/iomgr/resolve_address_posix.c \ @@ -1366,10 +1455,11 @@ PUBLIC_HEADERS_C += \ include/grpc/status.h \ LIBGRPC_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC_SRC)))) -LIBGRPC_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(LIBGRPC_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure libraries if you don't have OpenSSL with ALPN. + libs/$(CONFIG)/libgrpc.a: openssl_dep_error ifeq ($(SYSTEM),MINGW32) @@ -1380,9 +1470,106 @@ endif else -libs/$(CONFIG)/libgrpc.a: $(OPENSSL_DEP) $(LIBGRPC_OBJS) +ifneq ($(OPENSSL_DEP),) +src/core/security/auth.c: $(OPENSSL_DEP) +src/core/security/base64.c: $(OPENSSL_DEP) +src/core/security/credentials.c: $(OPENSSL_DEP) +src/core/security/factories.c: $(OPENSSL_DEP) +src/core/security/google_root_certs.c: $(OPENSSL_DEP) +src/core/security/json_token.c: $(OPENSSL_DEP) +src/core/security/secure_endpoint.c: $(OPENSSL_DEP) +src/core/security/secure_transport_setup.c: $(OPENSSL_DEP) +src/core/security/security_context.c: $(OPENSSL_DEP) +src/core/security/server_secure_chttp2.c: $(OPENSSL_DEP) +src/core/tsi/fake_transport_security.c: $(OPENSSL_DEP) +src/core/tsi/ssl_transport_security.c: $(OPENSSL_DEP) +src/core/tsi/transport_security.c: $(OPENSSL_DEP) +src/core/channel/call_op_string.c: $(OPENSSL_DEP) +src/core/channel/census_filter.c: $(OPENSSL_DEP) +src/core/channel/channel_args.c: $(OPENSSL_DEP) +src/core/channel/channel_stack.c: $(OPENSSL_DEP) +src/core/channel/child_channel.c: $(OPENSSL_DEP) +src/core/channel/client_channel.c: $(OPENSSL_DEP) +src/core/channel/client_setup.c: $(OPENSSL_DEP) +src/core/channel/connected_channel.c: $(OPENSSL_DEP) +src/core/channel/http_client_filter.c: $(OPENSSL_DEP) +src/core/channel/http_filter.c: $(OPENSSL_DEP) +src/core/channel/http_server_filter.c: $(OPENSSL_DEP) +src/core/channel/metadata_buffer.c: $(OPENSSL_DEP) +src/core/channel/noop_filter.c: $(OPENSSL_DEP) +src/core/compression/algorithm.c: $(OPENSSL_DEP) +src/core/compression/message_compress.c: $(OPENSSL_DEP) +src/core/httpcli/format_request.c: $(OPENSSL_DEP) +src/core/httpcli/httpcli.c: $(OPENSSL_DEP) +src/core/httpcli/httpcli_security_context.c: $(OPENSSL_DEP) +src/core/httpcli/parser.c: $(OPENSSL_DEP) +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/fd_posix.c: $(OPENSSL_DEP) +src/core/iomgr/iomgr.c: $(OPENSSL_DEP) +src/core/iomgr/iomgr_posix.c: $(OPENSSL_DEP) +src/core/iomgr/pollset_kick_posix.c: $(OPENSSL_DEP) +src/core/iomgr/pollset_multipoller_with_poll_posix.c: $(OPENSSL_DEP) +src/core/iomgr/pollset_posix.c: $(OPENSSL_DEP) +src/core/iomgr/resolve_address_posix.c: $(OPENSSL_DEP) +src/core/iomgr/sockaddr_utils.c: $(OPENSSL_DEP) +src/core/iomgr/socket_utils_common_posix.c: $(OPENSSL_DEP) +src/core/iomgr/socket_utils_linux.c: $(OPENSSL_DEP) +src/core/iomgr/socket_utils_posix.c: $(OPENSSL_DEP) +src/core/iomgr/tcp_client_posix.c: $(OPENSSL_DEP) +src/core/iomgr/tcp_posix.c: $(OPENSSL_DEP) +src/core/iomgr/tcp_server_posix.c: $(OPENSSL_DEP) +src/core/iomgr/time_averaged_stats.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) +src/core/statistics/census_tracing.c: $(OPENSSL_DEP) +src/core/statistics/hash_table.c: $(OPENSSL_DEP) +src/core/statistics/window_stats.c: $(OPENSSL_DEP) +src/core/surface/byte_buffer.c: $(OPENSSL_DEP) +src/core/surface/byte_buffer_reader.c: $(OPENSSL_DEP) +src/core/surface/call.c: $(OPENSSL_DEP) +src/core/surface/channel.c: $(OPENSSL_DEP) +src/core/surface/channel_create.c: $(OPENSSL_DEP) +src/core/surface/client.c: $(OPENSSL_DEP) +src/core/surface/completion_queue.c: $(OPENSSL_DEP) +src/core/surface/event_string.c: $(OPENSSL_DEP) +src/core/surface/init.c: $(OPENSSL_DEP) +src/core/surface/lame_client.c: $(OPENSSL_DEP) +src/core/surface/secure_channel_create.c: $(OPENSSL_DEP) +src/core/surface/secure_server_create.c: $(OPENSSL_DEP) +src/core/surface/server.c: $(OPENSSL_DEP) +src/core/surface/server_chttp2.c: $(OPENSSL_DEP) +src/core/surface/server_create.c: $(OPENSSL_DEP) +src/core/transport/chttp2/alpn.c: $(OPENSSL_DEP) +src/core/transport/chttp2/bin_encoder.c: $(OPENSSL_DEP) +src/core/transport/chttp2/frame_data.c: $(OPENSSL_DEP) +src/core/transport/chttp2/frame_goaway.c: $(OPENSSL_DEP) +src/core/transport/chttp2/frame_ping.c: $(OPENSSL_DEP) +src/core/transport/chttp2/frame_rst_stream.c: $(OPENSSL_DEP) +src/core/transport/chttp2/frame_settings.c: $(OPENSSL_DEP) +src/core/transport/chttp2/frame_window_update.c: $(OPENSSL_DEP) +src/core/transport/chttp2/hpack_parser.c: $(OPENSSL_DEP) +src/core/transport/chttp2/hpack_table.c: $(OPENSSL_DEP) +src/core/transport/chttp2/huffsyms.c: $(OPENSSL_DEP) +src/core/transport/chttp2/status_conversion.c: $(OPENSSL_DEP) +src/core/transport/chttp2/stream_encoder.c: $(OPENSSL_DEP) +src/core/transport/chttp2/stream_map.c: $(OPENSSL_DEP) +src/core/transport/chttp2/timeout_encoding.c: $(OPENSSL_DEP) +src/core/transport/chttp2/varint.c: $(OPENSSL_DEP) +src/core/transport/chttp2_transport.c: $(OPENSSL_DEP) +src/core/transport/metadata.c: $(OPENSSL_DEP) +src/core/transport/stream_op.c: $(OPENSSL_DEP) +src/core/transport/transport.c: $(OPENSSL_DEP) +third_party/cJSON/cJSON.c: $(OPENSSL_DEP) +endif + +libs/$(CONFIG)/libgrpc.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBGRPC_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` + $(Q) rm -f libs/$(CONFIG)/libgrpc.a $(Q) $(AR) rcs libs/$(CONFIG)/libgrpc.a $(LIBGRPC_OBJS) $(Q) rm -rf tmp-merge $(Q) mkdir tmp-merge @@ -1391,16 +1578,19 @@ libs/$(CONFIG)/libgrpc.a: $(OPENSSL_DEP) $(LIBGRPC_OBJS) $(Q) rm -f libs/$(CONFIG)/libgrpc.a tmp-merge/__.SYMDEF* $(Q) ar rcs libs/$(CONFIG)/libgrpc.a tmp-merge/* $(Q) rm -rf tmp-merge +ifeq ($(SYSTEM),Darwin) + $(Q) ranlib libs/$(CONFIG)/libgrpc.a +endif ifeq ($(SYSTEM),MINGW32) -libs/$(CONFIG)/grpc.$(SHARED_EXT): $(LIBGRPC_OBJS) libs/$(CONFIG)/gpr.$(SHARED_EXT) $(OPENSSL_DEP) +libs/$(CONFIG)/grpc.$(SHARED_EXT): $(LIBGRPC_OBJS) $(ZLIB_DEP)libs/$(CONFIG)/gpr.$(SHARED_EXT) $(OPENSSL_DEP) $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LD) $(LDFLAGS) -Llibs/$(CONFIG) -shared -Wl,--output-def=libs/$(CONFIG)/grpc.def -Wl,--out-implib=libs/$(CONFIG)/libgrpc-imp.a -o libs/$(CONFIG)/grpc.$(SHARED_EXT) $(LIBGRPC_OBJS) $(LDLIBS) $(LDLIBS_SECURE) $(OPENSSL_MERGE_LIBS) -lgpr-imp else -libs/$(CONFIG)/libgrpc.$(SHARED_EXT): $(LIBGRPC_OBJS) libs/$(CONFIG)/libgpr.$(SHARED_EXT) $(OPENSSL_DEP) +libs/$(CONFIG)/libgrpc.$(SHARED_EXT): $(LIBGRPC_OBJS) $(ZLIB_DEP) libs/$(CONFIG)/libgpr.$(SHARED_EXT) $(OPENSSL_DEP) $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` ifeq ($(SYSTEM),Darwin) @@ -1414,11 +1604,9 @@ endif endif -deps_libgrpc: $(LIBGRPC_DEPS) - ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(LIBGRPC_DEPS) +-include $(LIBGRPC_OBJS:.o=.dep) endif endif @@ -1461,6 +1649,7 @@ objs/$(CONFIG)/src/core/iomgr/endpoint_pair_posix.o: objs/$(CONFIG)/src/core/iomgr/fd_posix.o: objs/$(CONFIG)/src/core/iomgr/iomgr.o: objs/$(CONFIG)/src/core/iomgr/iomgr_posix.o: +objs/$(CONFIG)/src/core/iomgr/pollset_kick_posix.o: objs/$(CONFIG)/src/core/iomgr/pollset_multipoller_with_poll_posix.o: objs/$(CONFIG)/src/core/iomgr/pollset_posix.o: objs/$(CONFIG)/src/core/iomgr/resolve_address_posix.o: @@ -1515,12 +1704,81 @@ objs/$(CONFIG)/src/core/transport/stream_op.o: objs/$(CONFIG)/src/core/transport/transport.o: objs/$(CONFIG)/third_party/cJSON/cJSON.o: -clean_libgrpc: - $(E) "[CLEAN] Cleaning libgrpc files" - $(Q) $(RM) $(LIBGRPC_OBJS) - $(Q) $(RM) $(LIBGRPC_DEPS) - $(Q) $(RM) libs/$(CONFIG)/libgrpc.a - $(Q) $(RM) libs/$(CONFIG)/libgrpc.$(SHARED_EXT) + +LIBGRPC_TEST_UTIL_SRC = \ + test/core/end2end/cq_verifier.c \ + test/core/end2end/data/prod_roots_certs.c \ + test/core/end2end/data/server1_cert.c \ + test/core/end2end/data/server1_key.c \ + test/core/end2end/data/test_root_cert.c \ + test/core/iomgr/endpoint_tests.c \ + test/core/statistics/census_log_tests.c \ + test/core/transport/transport_end2end_tests.c \ + test/core/util/grpc_profiler.c \ + test/core/util/parse_hexstring.c \ + test/core/util/port_posix.c \ + test/core/util/slice_splitter.c \ + + +LIBGRPC_TEST_UTIL_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC_TEST_UTIL_SRC)))) + +ifeq ($(NO_SECURE),true) + +# You can't build secure libraries if you don't have OpenSSL with ALPN. + +libs/$(CONFIG)/libgrpc_test_util.a: openssl_dep_error + + +else + +ifneq ($(OPENSSL_DEP),) +test/core/end2end/cq_verifier.c: $(OPENSSL_DEP) +test/core/end2end/data/prod_roots_certs.c: $(OPENSSL_DEP) +test/core/end2end/data/server1_cert.c: $(OPENSSL_DEP) +test/core/end2end/data/server1_key.c: $(OPENSSL_DEP) +test/core/end2end/data/test_root_cert.c: $(OPENSSL_DEP) +test/core/iomgr/endpoint_tests.c: $(OPENSSL_DEP) +test/core/statistics/census_log_tests.c: $(OPENSSL_DEP) +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/slice_splitter.c: $(OPENSSL_DEP) +endif + +libs/$(CONFIG)/libgrpc_test_util.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBGRPC_TEST_UTIL_OBJS) + $(E) "[AR] Creating $@" + $(Q) mkdir -p `dirname $@` + $(Q) rm -f libs/$(CONFIG)/libgrpc_test_util.a + $(Q) $(AR) rcs libs/$(CONFIG)/libgrpc_test_util.a $(LIBGRPC_TEST_UTIL_OBJS) +ifeq ($(SYSTEM),Darwin) + $(Q) ranlib libs/$(CONFIG)/libgrpc_test_util.a +endif + + + + + +endif + +ifneq ($(NO_SECURE),true) +ifneq ($(NO_DEPS),true) +-include $(LIBGRPC_TEST_UTIL_OBJS:.o=.dep) +endif +endif + +objs/$(CONFIG)/test/core/end2end/cq_verifier.o: +objs/$(CONFIG)/test/core/end2end/data/prod_roots_certs.o: +objs/$(CONFIG)/test/core/end2end/data/server1_cert.o: +objs/$(CONFIG)/test/core/end2end/data/server1_key.o: +objs/$(CONFIG)/test/core/end2end/data/test_root_cert.o: +objs/$(CONFIG)/test/core/iomgr/endpoint_tests.o: +objs/$(CONFIG)/test/core/statistics/census_log_tests.o: +objs/$(CONFIG)/test/core/transport/transport_end2end_tests.o: +objs/$(CONFIG)/test/core/util/grpc_profiler.o: +objs/$(CONFIG)/test/core/util/parse_hexstring.o: +objs/$(CONFIG)/test/core/util/port_posix.o: +objs/$(CONFIG)/test/core/util/slice_splitter.o: LIBGRPC_UNSECURE_SRC = \ @@ -1550,6 +1808,7 @@ LIBGRPC_UNSECURE_SRC = \ src/core/iomgr/fd_posix.c \ src/core/iomgr/iomgr.c \ src/core/iomgr/iomgr_posix.c \ + src/core/iomgr/pollset_kick_posix.c \ src/core/iomgr/pollset_multipoller_with_poll_posix.c \ src/core/iomgr/pollset_posix.c \ src/core/iomgr/resolve_address_posix.c \ @@ -1611,22 +1870,25 @@ PUBLIC_HEADERS_C += \ include/grpc/status.h \ LIBGRPC_UNSECURE_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC_UNSECURE_SRC)))) -LIBGRPC_UNSECURE_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(LIBGRPC_UNSECURE_SRC)))) -libs/$(CONFIG)/libgrpc_unsecure.a: $(LIBGRPC_UNSECURE_OBJS) +libs/$(CONFIG)/libgrpc_unsecure.a: $(ZLIB_DEP) $(LIBGRPC_UNSECURE_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` + $(Q) rm -f libs/$(CONFIG)/libgrpc_unsecure.a $(Q) $(AR) rcs libs/$(CONFIG)/libgrpc_unsecure.a $(LIBGRPC_UNSECURE_OBJS) +ifeq ($(SYSTEM),Darwin) + $(Q) ranlib libs/$(CONFIG)/libgrpc_unsecure.a +endif ifeq ($(SYSTEM),MINGW32) -libs/$(CONFIG)/grpc_unsecure.$(SHARED_EXT): $(LIBGRPC_UNSECURE_OBJS) libs/$(CONFIG)/gpr.$(SHARED_EXT) +libs/$(CONFIG)/grpc_unsecure.$(SHARED_EXT): $(LIBGRPC_UNSECURE_OBJS) $(ZLIB_DEP)libs/$(CONFIG)/gpr.$(SHARED_EXT) $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LD) $(LDFLAGS) -Llibs/$(CONFIG) -shared -Wl,--output-def=libs/$(CONFIG)/grpc_unsecure.def -Wl,--out-implib=libs/$(CONFIG)/libgrpc_unsecure-imp.a -o libs/$(CONFIG)/grpc_unsecure.$(SHARED_EXT) $(LIBGRPC_UNSECURE_OBJS) $(LDLIBS) -lgpr-imp else -libs/$(CONFIG)/libgrpc_unsecure.$(SHARED_EXT): $(LIBGRPC_UNSECURE_OBJS) libs/$(CONFIG)/libgpr.$(SHARED_EXT) +libs/$(CONFIG)/libgrpc_unsecure.$(SHARED_EXT): $(LIBGRPC_UNSECURE_OBJS) $(ZLIB_DEP) libs/$(CONFIG)/libgpr.$(SHARED_EXT) $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` ifeq ($(SYSTEM),Darwin) @@ -1638,10 +1900,8 @@ endif endif -deps_libgrpc_unsecure: $(LIBGRPC_UNSECURE_DEPS) - ifneq ($(NO_DEPS),true) --include $(LIBGRPC_UNSECURE_DEPS) +-include $(LIBGRPC_UNSECURE_OBJS:.o=.dep) endif objs/$(CONFIG)/src/core/channel/call_op_string.o: @@ -1670,6 +1930,7 @@ objs/$(CONFIG)/src/core/iomgr/endpoint_pair_posix.o: objs/$(CONFIG)/src/core/iomgr/fd_posix.o: objs/$(CONFIG)/src/core/iomgr/iomgr.o: objs/$(CONFIG)/src/core/iomgr/iomgr_posix.o: +objs/$(CONFIG)/src/core/iomgr/pollset_kick_posix.o: objs/$(CONFIG)/src/core/iomgr/pollset_multipoller_with_poll_posix.o: objs/$(CONFIG)/src/core/iomgr/pollset_posix.o: objs/$(CONFIG)/src/core/iomgr/resolve_address_posix.o: @@ -1724,121 +1985,6 @@ objs/$(CONFIG)/src/core/transport/stream_op.o: objs/$(CONFIG)/src/core/transport/transport.o: objs/$(CONFIG)/third_party/cJSON/cJSON.o: -clean_libgrpc_unsecure: - $(E) "[CLEAN] Cleaning libgrpc_unsecure files" - $(Q) $(RM) $(LIBGRPC_UNSECURE_OBJS) - $(Q) $(RM) $(LIBGRPC_UNSECURE_DEPS) - $(Q) $(RM) libs/$(CONFIG)/libgrpc_unsecure.a - $(Q) $(RM) libs/$(CONFIG)/libgrpc_unsecure.$(SHARED_EXT) - - -LIBGPR_TEST_UTIL_SRC = \ - test/core/util/test_config.c \ - - -LIBGPR_TEST_UTIL_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGPR_TEST_UTIL_SRC)))) -LIBGPR_TEST_UTIL_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(LIBGPR_TEST_UTIL_SRC)))) - -ifeq ($(NO_SECURE),true) - -libs/$(CONFIG)/libgpr_test_util.a: openssl_dep_error - - -else - -libs/$(CONFIG)/libgpr_test_util.a: $(OPENSSL_DEP) $(LIBGPR_TEST_UTIL_OBJS) - $(E) "[AR] Creating $@" - $(Q) mkdir -p `dirname $@` - $(Q) $(AR) rcs libs/$(CONFIG)/libgpr_test_util.a $(LIBGPR_TEST_UTIL_OBJS) - - - - - -endif - -deps_libgpr_test_util: $(LIBGPR_TEST_UTIL_DEPS) - -ifneq ($(NO_SECURE),true) -ifneq ($(NO_DEPS),true) --include $(LIBGPR_TEST_UTIL_DEPS) -endif -endif - -objs/$(CONFIG)/test/core/util/test_config.o: - -clean_libgpr_test_util: - $(E) "[CLEAN] Cleaning libgpr_test_util files" - $(Q) $(RM) $(LIBGPR_TEST_UTIL_OBJS) - $(Q) $(RM) $(LIBGPR_TEST_UTIL_DEPS) - $(Q) $(RM) libs/$(CONFIG)/libgpr_test_util.a - $(Q) $(RM) libs/$(CONFIG)/libgpr_test_util.$(SHARED_EXT) - - -LIBGRPC_TEST_UTIL_SRC = \ - test/core/end2end/cq_verifier.c \ - test/core/end2end/data/test_root_cert.c \ - test/core/end2end/data/prod_roots_certs.c \ - test/core/end2end/data/server1_cert.c \ - test/core/end2end/data/server1_key.c \ - test/core/iomgr/endpoint_tests.c \ - test/core/statistics/census_log_tests.c \ - test/core/transport/transport_end2end_tests.c \ - test/core/util/grpc_profiler.c \ - test/core/util/port_posix.c \ - test/core/util/parse_hexstring.c \ - test/core/util/slice_splitter.c \ - - -LIBGRPC_TEST_UTIL_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC_TEST_UTIL_SRC)))) -LIBGRPC_TEST_UTIL_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(LIBGRPC_TEST_UTIL_SRC)))) - -ifeq ($(NO_SECURE),true) - -libs/$(CONFIG)/libgrpc_test_util.a: openssl_dep_error - - -else - -libs/$(CONFIG)/libgrpc_test_util.a: $(OPENSSL_DEP) $(LIBGRPC_TEST_UTIL_OBJS) - $(E) "[AR] Creating $@" - $(Q) mkdir -p `dirname $@` - $(Q) $(AR) rcs libs/$(CONFIG)/libgrpc_test_util.a $(LIBGRPC_TEST_UTIL_OBJS) - - - - - -endif - -deps_libgrpc_test_util: $(LIBGRPC_TEST_UTIL_DEPS) - -ifneq ($(NO_SECURE),true) -ifneq ($(NO_DEPS),true) --include $(LIBGRPC_TEST_UTIL_DEPS) -endif -endif - -objs/$(CONFIG)/test/core/end2end/cq_verifier.o: -objs/$(CONFIG)/test/core/end2end/data/test_root_cert.o: -objs/$(CONFIG)/test/core/end2end/data/prod_roots_certs.o: -objs/$(CONFIG)/test/core/end2end/data/server1_cert.o: -objs/$(CONFIG)/test/core/end2end/data/server1_key.o: -objs/$(CONFIG)/test/core/iomgr/endpoint_tests.o: -objs/$(CONFIG)/test/core/statistics/census_log_tests.o: -objs/$(CONFIG)/test/core/transport/transport_end2end_tests.o: -objs/$(CONFIG)/test/core/util/grpc_profiler.o: -objs/$(CONFIG)/test/core/util/port_posix.o: -objs/$(CONFIG)/test/core/util/parse_hexstring.o: -objs/$(CONFIG)/test/core/util/slice_splitter.o: - -clean_libgrpc_test_util: - $(E) "[CLEAN] Cleaning libgrpc_test_util files" - $(Q) $(RM) $(LIBGRPC_TEST_UTIL_OBJS) - $(Q) $(RM) $(LIBGRPC_TEST_UTIL_DEPS) - $(Q) $(RM) libs/$(CONFIG)/libgrpc_test_util.a - $(Q) $(RM) libs/$(CONFIG)/libgrpc_test_util.$(SHARED_EXT) - LIBGRPC++_SRC = \ src/cpp/client/channel.cc \ @@ -1847,24 +1993,24 @@ LIBGRPC++_SRC = \ src/cpp/client/create_channel.cc \ src/cpp/client/credentials.cc \ src/cpp/client/internal_stub.cc \ - src/cpp/proto/proto_utils.cc \ src/cpp/common/rpc_method.cc \ + src/cpp/proto/proto_utils.cc \ src/cpp/server/async_server.cc \ src/cpp/server/async_server_context.cc \ src/cpp/server/completion_queue.cc \ + src/cpp/server/server.cc \ src/cpp/server/server_builder.cc \ src/cpp/server/server_context_impl.cc \ - src/cpp/server/server.cc \ - src/cpp/server/server_rpc_handler.cc \ src/cpp/server/server_credentials.cc \ + src/cpp/server/server_rpc_handler.cc \ src/cpp/server/thread_pool.cc \ src/cpp/stream/stream_context.cc \ src/cpp/util/status.cc \ src/cpp/util/time.cc \ PUBLIC_HEADERS_CXX += \ - include/grpc++/async_server_context.h \ include/grpc++/async_server.h \ + include/grpc++/async_server_context.h \ include/grpc++/channel_arguments.h \ include/grpc++/channel_interface.h \ include/grpc++/client_context.h \ @@ -1875,19 +2021,20 @@ PUBLIC_HEADERS_CXX += \ include/grpc++/impl/internal_stub.h \ include/grpc++/impl/rpc_method.h \ include/grpc++/impl/rpc_service_method.h \ + include/grpc++/server.h \ include/grpc++/server_builder.h \ include/grpc++/server_context.h \ include/grpc++/server_credentials.h \ - include/grpc++/server.h \ include/grpc++/status.h \ - include/grpc++/stream_context_interface.h \ include/grpc++/stream.h \ + include/grpc++/stream_context_interface.h \ LIBGRPC++_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC++_SRC)))) -LIBGRPC++_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(LIBGRPC++_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure libraries if you don't have OpenSSL with ALPN. + libs/$(CONFIG)/libgrpc++.a: openssl_dep_error ifeq ($(SYSTEM),MINGW32) @@ -1898,20 +2045,47 @@ endif else -libs/$(CONFIG)/libgrpc++.a: $(OPENSSL_DEP) $(LIBGRPC++_OBJS) +ifneq ($(OPENSSL_DEP),) +src/cpp/client/channel.cc: $(OPENSSL_DEP) +src/cpp/client/channel_arguments.cc: $(OPENSSL_DEP) +src/cpp/client/client_context.cc: $(OPENSSL_DEP) +src/cpp/client/create_channel.cc: $(OPENSSL_DEP) +src/cpp/client/credentials.cc: $(OPENSSL_DEP) +src/cpp/client/internal_stub.cc: $(OPENSSL_DEP) +src/cpp/common/rpc_method.cc: $(OPENSSL_DEP) +src/cpp/proto/proto_utils.cc: $(OPENSSL_DEP) +src/cpp/server/async_server.cc: $(OPENSSL_DEP) +src/cpp/server/async_server_context.cc: $(OPENSSL_DEP) +src/cpp/server/completion_queue.cc: $(OPENSSL_DEP) +src/cpp/server/server.cc: $(OPENSSL_DEP) +src/cpp/server/server_builder.cc: $(OPENSSL_DEP) +src/cpp/server/server_context_impl.cc: $(OPENSSL_DEP) +src/cpp/server/server_credentials.cc: $(OPENSSL_DEP) +src/cpp/server/server_rpc_handler.cc: $(OPENSSL_DEP) +src/cpp/server/thread_pool.cc: $(OPENSSL_DEP) +src/cpp/stream/stream_context.cc: $(OPENSSL_DEP) +src/cpp/util/status.cc: $(OPENSSL_DEP) +src/cpp/util/time.cc: $(OPENSSL_DEP) +endif + +libs/$(CONFIG)/libgrpc++.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBGRPC++_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` + $(Q) rm -f libs/$(CONFIG)/libgrpc++.a $(Q) $(AR) rcs libs/$(CONFIG)/libgrpc++.a $(LIBGRPC++_OBJS) +ifeq ($(SYSTEM),Darwin) + $(Q) ranlib libs/$(CONFIG)/libgrpc++.a +endif ifeq ($(SYSTEM),MINGW32) -libs/$(CONFIG)/grpc++.$(SHARED_EXT): $(LIBGRPC++_OBJS) libs/$(CONFIG)/grpc.$(SHARED_EXT) $(OPENSSL_DEP) +libs/$(CONFIG)/grpc++.$(SHARED_EXT): $(LIBGRPC++_OBJS) $(ZLIB_DEP)libs/$(CONFIG)/grpc.$(SHARED_EXT) $(OPENSSL_DEP) $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LDXX) $(LDFLAGS) -Llibs/$(CONFIG) -shared -Wl,--output-def=libs/$(CONFIG)/grpc++.def -Wl,--out-implib=libs/$(CONFIG)/libgrpc++-imp.a -o libs/$(CONFIG)/grpc++.$(SHARED_EXT) $(LIBGRPC++_OBJS) $(LDLIBS) $(LDLIBS_SECURE) $(OPENSSL_MERGE_LIBS) -lgrpc-imp else -libs/$(CONFIG)/libgrpc++.$(SHARED_EXT): $(LIBGRPC++_OBJS) libs/$(CONFIG)/libgrpc.$(SHARED_EXT) $(OPENSSL_DEP) +libs/$(CONFIG)/libgrpc++.$(SHARED_EXT): $(LIBGRPC++_OBJS) $(ZLIB_DEP) libs/$(CONFIG)/libgrpc.$(SHARED_EXT) $(OPENSSL_DEP) $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` ifeq ($(SYSTEM),Darwin) @@ -1925,11 +2099,9 @@ endif endif -deps_libgrpc++: $(LIBGRPC++_DEPS) - ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(LIBGRPC++_DEPS) +-include $(LIBGRPC++_OBJS:.o=.dep) endif endif @@ -1939,51 +2111,57 @@ objs/$(CONFIG)/src/cpp/client/client_context.o: objs/$(CONFIG)/src/cpp/client/create_channel.o: objs/$(CONFIG)/src/cpp/client/credentials.o: objs/$(CONFIG)/src/cpp/client/internal_stub.o: -objs/$(CONFIG)/src/cpp/proto/proto_utils.o: objs/$(CONFIG)/src/cpp/common/rpc_method.o: +objs/$(CONFIG)/src/cpp/proto/proto_utils.o: objs/$(CONFIG)/src/cpp/server/async_server.o: objs/$(CONFIG)/src/cpp/server/async_server_context.o: objs/$(CONFIG)/src/cpp/server/completion_queue.o: +objs/$(CONFIG)/src/cpp/server/server.o: objs/$(CONFIG)/src/cpp/server/server_builder.o: objs/$(CONFIG)/src/cpp/server/server_context_impl.o: -objs/$(CONFIG)/src/cpp/server/server.o: -objs/$(CONFIG)/src/cpp/server/server_rpc_handler.o: objs/$(CONFIG)/src/cpp/server/server_credentials.o: +objs/$(CONFIG)/src/cpp/server/server_rpc_handler.o: objs/$(CONFIG)/src/cpp/server/thread_pool.o: objs/$(CONFIG)/src/cpp/stream/stream_context.o: objs/$(CONFIG)/src/cpp/util/status.o: objs/$(CONFIG)/src/cpp/util/time.o: -clean_libgrpc++: - $(E) "[CLEAN] Cleaning libgrpc++ files" - $(Q) $(RM) $(LIBGRPC++_OBJS) - $(Q) $(RM) $(LIBGRPC++_DEPS) - $(Q) $(RM) libs/$(CONFIG)/libgrpc++.a - $(Q) $(RM) libs/$(CONFIG)/libgrpc++.$(SHARED_EXT) - LIBGRPC++_TEST_UTIL_SRC = \ - gens/test/cpp/util/messages.pb.cc \ gens/test/cpp/util/echo.pb.cc \ gens/test/cpp/util/echo_duplicate.pb.cc \ - test/cpp/util/create_test_channel.cc \ + gens/test/cpp/util/messages.pb.cc \ test/cpp/end2end/async_test_server.cc \ + test/cpp/util/create_test_channel.cc \ LIBGRPC++_TEST_UTIL_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC++_TEST_UTIL_SRC)))) -LIBGRPC++_TEST_UTIL_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(LIBGRPC++_TEST_UTIL_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure libraries if you don't have OpenSSL with ALPN. + libs/$(CONFIG)/libgrpc++_test_util.a: openssl_dep_error else -libs/$(CONFIG)/libgrpc++_test_util.a: $(OPENSSL_DEP) $(LIBGRPC++_TEST_UTIL_OBJS) +ifneq ($(OPENSSL_DEP),) +test/cpp/util/echo.proto: $(OPENSSL_DEP) +test/cpp/util/echo_duplicate.proto: $(OPENSSL_DEP) +test/cpp/util/messages.proto: $(OPENSSL_DEP) +test/cpp/end2end/async_test_server.cc: $(OPENSSL_DEP) +test/cpp/util/create_test_channel.cc: $(OPENSSL_DEP) +endif + +libs/$(CONFIG)/libgrpc++_test_util.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBGRPC++_TEST_UTIL_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` + $(Q) rm -f libs/$(CONFIG)/libgrpc++_test_util.a $(Q) $(AR) rcs libs/$(CONFIG)/libgrpc++_test_util.a $(LIBGRPC++_TEST_UTIL_OBJS) +ifeq ($(SYSTEM),Darwin) + $(Q) ranlib libs/$(CONFIG)/libgrpc++_test_util.a +endif @@ -1991,26 +2169,65 @@ libs/$(CONFIG)/libgrpc++_test_util.a: $(OPENSSL_DEP) $(LIBGRPC++_TEST_UTIL_OBJS) endif -deps_libgrpc++_test_util: $(LIBGRPC++_TEST_UTIL_DEPS) - ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(LIBGRPC++_TEST_UTIL_DEPS) +-include $(LIBGRPC++_TEST_UTIL_OBJS:.o=.dep) +endif +endif + + + + +objs/$(CONFIG)/test/cpp/end2end/async_test_server.o: gens/test/cpp/util/echo.pb.cc gens/test/cpp/util/echo_duplicate.pb.cc gens/test/cpp/util/messages.pb.cc +objs/$(CONFIG)/test/cpp/util/create_test_channel.o: gens/test/cpp/util/echo.pb.cc gens/test/cpp/util/echo_duplicate.pb.cc gens/test/cpp/util/messages.pb.cc + + +LIBTIPS_CLIENT_LIB_SRC = \ + gens/examples/tips/label.pb.cc \ + gens/examples/tips/empty.pb.cc \ + gens/examples/tips/pubsub.pb.cc \ + examples/tips/client.cc \ + + +LIBTIPS_CLIENT_LIB_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBTIPS_CLIENT_LIB_SRC)))) + +ifeq ($(NO_SECURE),true) + +# You can't build secure libraries if you don't have OpenSSL with ALPN. + +libs/$(CONFIG)/libtips_client_lib.a: openssl_dep_error + + +else + +ifneq ($(OPENSSL_DEP),) +examples/tips/label.proto: $(OPENSSL_DEP) +examples/tips/empty.proto: $(OPENSSL_DEP) +examples/tips/pubsub.proto: $(OPENSSL_DEP) +examples/tips/client.cc: $(OPENSSL_DEP) endif + +libs/$(CONFIG)/libtips_client_lib.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBTIPS_CLIENT_LIB_OBJS) + $(E) "[AR] Creating $@" + $(Q) mkdir -p `dirname $@` + $(Q) $(AR) rcs libs/$(CONFIG)/libtips_client_lib.a $(LIBTIPS_CLIENT_LIB_OBJS) + + + + + endif +ifneq ($(NO_SECURE),true) +ifneq ($(NO_DEPS),true) +-include $(LIBTIPS_CLIENT_LIB_OBJS:.o=.dep) +endif +endif -objs/$(CONFIG)/test/cpp/util/create_test_channel.o: gens/test/cpp/util/messages.pb.cc gens/test/cpp/util/echo.pb.cc gens/test/cpp/util/echo_duplicate.pb.cc -objs/$(CONFIG)/test/cpp/end2end/async_test_server.o: gens/test/cpp/util/messages.pb.cc gens/test/cpp/util/echo.pb.cc gens/test/cpp/util/echo_duplicate.pb.cc -clean_libgrpc++_test_util: - $(E) "[CLEAN] Cleaning libgrpc++_test_util files" - $(Q) $(RM) $(LIBGRPC++_TEST_UTIL_OBJS) - $(Q) $(RM) $(LIBGRPC++_TEST_UTIL_DEPS) - $(Q) $(RM) libs/$(CONFIG)/libgrpc++_test_util.a - $(Q) $(RM) libs/$(CONFIG)/libgrpc++_test_util.$(SHARED_EXT) +objs/$(CONFIG)/examples/tips/client.o: gens/examples/tips/label.pb.cc gens/examples/tips/empty.pb.cc gens/examples/tips/pubsub.pb.cc LIBEND2END_FIXTURE_CHTTP2_FAKE_SECURITY_SRC = \ @@ -2018,19 +2235,28 @@ LIBEND2END_FIXTURE_CHTTP2_FAKE_SECURITY_SRC = \ LIBEND2END_FIXTURE_CHTTP2_FAKE_SECURITY_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBEND2END_FIXTURE_CHTTP2_FAKE_SECURITY_SRC)))) -LIBEND2END_FIXTURE_CHTTP2_FAKE_SECURITY_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(LIBEND2END_FIXTURE_CHTTP2_FAKE_SECURITY_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure libraries if you don't have OpenSSL with ALPN. + libs/$(CONFIG)/libend2end_fixture_chttp2_fake_security.a: openssl_dep_error else -libs/$(CONFIG)/libend2end_fixture_chttp2_fake_security.a: $(OPENSSL_DEP) $(LIBEND2END_FIXTURE_CHTTP2_FAKE_SECURITY_OBJS) +ifneq ($(OPENSSL_DEP),) +test/core/end2end/fixtures/chttp2_fake_security.c: $(OPENSSL_DEP) +endif + +libs/$(CONFIG)/libend2end_fixture_chttp2_fake_security.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBEND2END_FIXTURE_CHTTP2_FAKE_SECURITY_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` + $(Q) rm -f libs/$(CONFIG)/libend2end_fixture_chttp2_fake_security.a $(Q) $(AR) rcs libs/$(CONFIG)/libend2end_fixture_chttp2_fake_security.a $(LIBEND2END_FIXTURE_CHTTP2_FAKE_SECURITY_OBJS) +ifeq ($(SYSTEM),Darwin) + $(Q) ranlib libs/$(CONFIG)/libend2end_fixture_chttp2_fake_security.a +endif @@ -2038,42 +2264,42 @@ libs/$(CONFIG)/libend2end_fixture_chttp2_fake_security.a: $(OPENSSL_DEP) $(LIBEN endif -deps_libend2end_fixture_chttp2_fake_security: $(LIBEND2END_FIXTURE_CHTTP2_FAKE_SECURITY_DEPS) - ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(LIBEND2END_FIXTURE_CHTTP2_FAKE_SECURITY_DEPS) +-include $(LIBEND2END_FIXTURE_CHTTP2_FAKE_SECURITY_OBJS:.o=.dep) endif endif objs/$(CONFIG)/test/core/end2end/fixtures/chttp2_fake_security.o: -clean_libend2end_fixture_chttp2_fake_security: - $(E) "[CLEAN] Cleaning libend2end_fixture_chttp2_fake_security files" - $(Q) $(RM) $(LIBEND2END_FIXTURE_CHTTP2_FAKE_SECURITY_OBJS) - $(Q) $(RM) $(LIBEND2END_FIXTURE_CHTTP2_FAKE_SECURITY_DEPS) - $(Q) $(RM) libs/$(CONFIG)/libend2end_fixture_chttp2_fake_security.a - $(Q) $(RM) libs/$(CONFIG)/libend2end_fixture_chttp2_fake_security.$(SHARED_EXT) - LIBEND2END_FIXTURE_CHTTP2_FULLSTACK_SRC = \ test/core/end2end/fixtures/chttp2_fullstack.c \ LIBEND2END_FIXTURE_CHTTP2_FULLSTACK_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBEND2END_FIXTURE_CHTTP2_FULLSTACK_SRC)))) -LIBEND2END_FIXTURE_CHTTP2_FULLSTACK_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(LIBEND2END_FIXTURE_CHTTP2_FULLSTACK_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure libraries if you don't have OpenSSL with ALPN. + libs/$(CONFIG)/libend2end_fixture_chttp2_fullstack.a: openssl_dep_error else -libs/$(CONFIG)/libend2end_fixture_chttp2_fullstack.a: $(OPENSSL_DEP) $(LIBEND2END_FIXTURE_CHTTP2_FULLSTACK_OBJS) +ifneq ($(OPENSSL_DEP),) +test/core/end2end/fixtures/chttp2_fullstack.c: $(OPENSSL_DEP) +endif + +libs/$(CONFIG)/libend2end_fixture_chttp2_fullstack.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBEND2END_FIXTURE_CHTTP2_FULLSTACK_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` + $(Q) rm -f libs/$(CONFIG)/libend2end_fixture_chttp2_fullstack.a $(Q) $(AR) rcs libs/$(CONFIG)/libend2end_fixture_chttp2_fullstack.a $(LIBEND2END_FIXTURE_CHTTP2_FULLSTACK_OBJS) +ifeq ($(SYSTEM),Darwin) + $(Q) ranlib libs/$(CONFIG)/libend2end_fixture_chttp2_fullstack.a +endif @@ -2081,42 +2307,42 @@ libs/$(CONFIG)/libend2end_fixture_chttp2_fullstack.a: $(OPENSSL_DEP) $(LIBEND2EN endif -deps_libend2end_fixture_chttp2_fullstack: $(LIBEND2END_FIXTURE_CHTTP2_FULLSTACK_DEPS) - ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(LIBEND2END_FIXTURE_CHTTP2_FULLSTACK_DEPS) +-include $(LIBEND2END_FIXTURE_CHTTP2_FULLSTACK_OBJS:.o=.dep) endif endif objs/$(CONFIG)/test/core/end2end/fixtures/chttp2_fullstack.o: -clean_libend2end_fixture_chttp2_fullstack: - $(E) "[CLEAN] Cleaning libend2end_fixture_chttp2_fullstack files" - $(Q) $(RM) $(LIBEND2END_FIXTURE_CHTTP2_FULLSTACK_OBJS) - $(Q) $(RM) $(LIBEND2END_FIXTURE_CHTTP2_FULLSTACK_DEPS) - $(Q) $(RM) libs/$(CONFIG)/libend2end_fixture_chttp2_fullstack.a - $(Q) $(RM) libs/$(CONFIG)/libend2end_fixture_chttp2_fullstack.$(SHARED_EXT) - LIBEND2END_FIXTURE_CHTTP2_SIMPLE_SSL_FULLSTACK_SRC = \ test/core/end2end/fixtures/chttp2_simple_ssl_fullstack.c \ LIBEND2END_FIXTURE_CHTTP2_SIMPLE_SSL_FULLSTACK_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBEND2END_FIXTURE_CHTTP2_SIMPLE_SSL_FULLSTACK_SRC)))) -LIBEND2END_FIXTURE_CHTTP2_SIMPLE_SSL_FULLSTACK_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(LIBEND2END_FIXTURE_CHTTP2_SIMPLE_SSL_FULLSTACK_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure libraries if you don't have OpenSSL with ALPN. + libs/$(CONFIG)/libend2end_fixture_chttp2_simple_ssl_fullstack.a: openssl_dep_error else -libs/$(CONFIG)/libend2end_fixture_chttp2_simple_ssl_fullstack.a: $(OPENSSL_DEP) $(LIBEND2END_FIXTURE_CHTTP2_SIMPLE_SSL_FULLSTACK_OBJS) +ifneq ($(OPENSSL_DEP),) +test/core/end2end/fixtures/chttp2_simple_ssl_fullstack.c: $(OPENSSL_DEP) +endif + +libs/$(CONFIG)/libend2end_fixture_chttp2_simple_ssl_fullstack.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBEND2END_FIXTURE_CHTTP2_SIMPLE_SSL_FULLSTACK_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` + $(Q) rm -f libs/$(CONFIG)/libend2end_fixture_chttp2_simple_ssl_fullstack.a $(Q) $(AR) rcs libs/$(CONFIG)/libend2end_fixture_chttp2_simple_ssl_fullstack.a $(LIBEND2END_FIXTURE_CHTTP2_SIMPLE_SSL_FULLSTACK_OBJS) +ifeq ($(SYSTEM),Darwin) + $(Q) ranlib libs/$(CONFIG)/libend2end_fixture_chttp2_simple_ssl_fullstack.a +endif @@ -2124,42 +2350,42 @@ libs/$(CONFIG)/libend2end_fixture_chttp2_simple_ssl_fullstack.a: $(OPENSSL_DEP) endif -deps_libend2end_fixture_chttp2_simple_ssl_fullstack: $(LIBEND2END_FIXTURE_CHTTP2_SIMPLE_SSL_FULLSTACK_DEPS) - ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(LIBEND2END_FIXTURE_CHTTP2_SIMPLE_SSL_FULLSTACK_DEPS) +-include $(LIBEND2END_FIXTURE_CHTTP2_SIMPLE_SSL_FULLSTACK_OBJS:.o=.dep) endif endif objs/$(CONFIG)/test/core/end2end/fixtures/chttp2_simple_ssl_fullstack.o: -clean_libend2end_fixture_chttp2_simple_ssl_fullstack: - $(E) "[CLEAN] Cleaning libend2end_fixture_chttp2_simple_ssl_fullstack files" - $(Q) $(RM) $(LIBEND2END_FIXTURE_CHTTP2_SIMPLE_SSL_FULLSTACK_OBJS) - $(Q) $(RM) $(LIBEND2END_FIXTURE_CHTTP2_SIMPLE_SSL_FULLSTACK_DEPS) - $(Q) $(RM) libs/$(CONFIG)/libend2end_fixture_chttp2_simple_ssl_fullstack.a - $(Q) $(RM) libs/$(CONFIG)/libend2end_fixture_chttp2_simple_ssl_fullstack.$(SHARED_EXT) - LIBEND2END_FIXTURE_CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_SRC = \ test/core/end2end/fixtures/chttp2_simple_ssl_with_oauth2_fullstack.c \ LIBEND2END_FIXTURE_CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBEND2END_FIXTURE_CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_SRC)))) -LIBEND2END_FIXTURE_CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(LIBEND2END_FIXTURE_CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure libraries if you don't have OpenSSL with ALPN. + libs/$(CONFIG)/libend2end_fixture_chttp2_simple_ssl_with_oauth2_fullstack.a: openssl_dep_error else -libs/$(CONFIG)/libend2end_fixture_chttp2_simple_ssl_with_oauth2_fullstack.a: $(OPENSSL_DEP) $(LIBEND2END_FIXTURE_CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_OBJS) +ifneq ($(OPENSSL_DEP),) +test/core/end2end/fixtures/chttp2_simple_ssl_with_oauth2_fullstack.c: $(OPENSSL_DEP) +endif + +libs/$(CONFIG)/libend2end_fixture_chttp2_simple_ssl_with_oauth2_fullstack.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBEND2END_FIXTURE_CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` + $(Q) rm -f libs/$(CONFIG)/libend2end_fixture_chttp2_simple_ssl_with_oauth2_fullstack.a $(Q) $(AR) rcs libs/$(CONFIG)/libend2end_fixture_chttp2_simple_ssl_with_oauth2_fullstack.a $(LIBEND2END_FIXTURE_CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_OBJS) +ifeq ($(SYSTEM),Darwin) + $(Q) ranlib libs/$(CONFIG)/libend2end_fixture_chttp2_simple_ssl_with_oauth2_fullstack.a +endif @@ -2167,42 +2393,42 @@ libs/$(CONFIG)/libend2end_fixture_chttp2_simple_ssl_with_oauth2_fullstack.a: $(O endif -deps_libend2end_fixture_chttp2_simple_ssl_with_oauth2_fullstack: $(LIBEND2END_FIXTURE_CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_DEPS) - ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(LIBEND2END_FIXTURE_CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_DEPS) +-include $(LIBEND2END_FIXTURE_CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_OBJS:.o=.dep) endif endif objs/$(CONFIG)/test/core/end2end/fixtures/chttp2_simple_ssl_with_oauth2_fullstack.o: -clean_libend2end_fixture_chttp2_simple_ssl_with_oauth2_fullstack: - $(E) "[CLEAN] Cleaning libend2end_fixture_chttp2_simple_ssl_with_oauth2_fullstack files" - $(Q) $(RM) $(LIBEND2END_FIXTURE_CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_OBJS) - $(Q) $(RM) $(LIBEND2END_FIXTURE_CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_DEPS) - $(Q) $(RM) libs/$(CONFIG)/libend2end_fixture_chttp2_simple_ssl_with_oauth2_fullstack.a - $(Q) $(RM) libs/$(CONFIG)/libend2end_fixture_chttp2_simple_ssl_with_oauth2_fullstack.$(SHARED_EXT) - LIBEND2END_FIXTURE_CHTTP2_SOCKET_PAIR_SRC = \ test/core/end2end/fixtures/chttp2_socket_pair.c \ LIBEND2END_FIXTURE_CHTTP2_SOCKET_PAIR_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBEND2END_FIXTURE_CHTTP2_SOCKET_PAIR_SRC)))) -LIBEND2END_FIXTURE_CHTTP2_SOCKET_PAIR_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(LIBEND2END_FIXTURE_CHTTP2_SOCKET_PAIR_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure libraries if you don't have OpenSSL with ALPN. + libs/$(CONFIG)/libend2end_fixture_chttp2_socket_pair.a: openssl_dep_error else -libs/$(CONFIG)/libend2end_fixture_chttp2_socket_pair.a: $(OPENSSL_DEP) $(LIBEND2END_FIXTURE_CHTTP2_SOCKET_PAIR_OBJS) +ifneq ($(OPENSSL_DEP),) +test/core/end2end/fixtures/chttp2_socket_pair.c: $(OPENSSL_DEP) +endif + +libs/$(CONFIG)/libend2end_fixture_chttp2_socket_pair.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBEND2END_FIXTURE_CHTTP2_SOCKET_PAIR_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` + $(Q) rm -f libs/$(CONFIG)/libend2end_fixture_chttp2_socket_pair.a $(Q) $(AR) rcs libs/$(CONFIG)/libend2end_fixture_chttp2_socket_pair.a $(LIBEND2END_FIXTURE_CHTTP2_SOCKET_PAIR_OBJS) +ifeq ($(SYSTEM),Darwin) + $(Q) ranlib libs/$(CONFIG)/libend2end_fixture_chttp2_socket_pair.a +endif @@ -2210,42 +2436,42 @@ libs/$(CONFIG)/libend2end_fixture_chttp2_socket_pair.a: $(OPENSSL_DEP) $(LIBEND2 endif -deps_libend2end_fixture_chttp2_socket_pair: $(LIBEND2END_FIXTURE_CHTTP2_SOCKET_PAIR_DEPS) - ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(LIBEND2END_FIXTURE_CHTTP2_SOCKET_PAIR_DEPS) +-include $(LIBEND2END_FIXTURE_CHTTP2_SOCKET_PAIR_OBJS:.o=.dep) endif endif objs/$(CONFIG)/test/core/end2end/fixtures/chttp2_socket_pair.o: -clean_libend2end_fixture_chttp2_socket_pair: - $(E) "[CLEAN] Cleaning libend2end_fixture_chttp2_socket_pair files" - $(Q) $(RM) $(LIBEND2END_FIXTURE_CHTTP2_SOCKET_PAIR_OBJS) - $(Q) $(RM) $(LIBEND2END_FIXTURE_CHTTP2_SOCKET_PAIR_DEPS) - $(Q) $(RM) libs/$(CONFIG)/libend2end_fixture_chttp2_socket_pair.a - $(Q) $(RM) libs/$(CONFIG)/libend2end_fixture_chttp2_socket_pair.$(SHARED_EXT) - LIBEND2END_FIXTURE_CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_SRC = \ test/core/end2end/fixtures/chttp2_socket_pair_one_byte_at_a_time.c \ LIBEND2END_FIXTURE_CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBEND2END_FIXTURE_CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_SRC)))) -LIBEND2END_FIXTURE_CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(LIBEND2END_FIXTURE_CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure libraries if you don't have OpenSSL with ALPN. + libs/$(CONFIG)/libend2end_fixture_chttp2_socket_pair_one_byte_at_a_time.a: openssl_dep_error else -libs/$(CONFIG)/libend2end_fixture_chttp2_socket_pair_one_byte_at_a_time.a: $(OPENSSL_DEP) $(LIBEND2END_FIXTURE_CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_OBJS) +ifneq ($(OPENSSL_DEP),) +test/core/end2end/fixtures/chttp2_socket_pair_one_byte_at_a_time.c: $(OPENSSL_DEP) +endif + +libs/$(CONFIG)/libend2end_fixture_chttp2_socket_pair_one_byte_at_a_time.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBEND2END_FIXTURE_CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` + $(Q) rm -f libs/$(CONFIG)/libend2end_fixture_chttp2_socket_pair_one_byte_at_a_time.a $(Q) $(AR) rcs libs/$(CONFIG)/libend2end_fixture_chttp2_socket_pair_one_byte_at_a_time.a $(LIBEND2END_FIXTURE_CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_OBJS) +ifeq ($(SYSTEM),Darwin) + $(Q) ranlib libs/$(CONFIG)/libend2end_fixture_chttp2_socket_pair_one_byte_at_a_time.a +endif @@ -2253,310 +2479,273 @@ libs/$(CONFIG)/libend2end_fixture_chttp2_socket_pair_one_byte_at_a_time.a: $(OPE endif -deps_libend2end_fixture_chttp2_socket_pair_one_byte_at_a_time: $(LIBEND2END_FIXTURE_CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_DEPS) - ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(LIBEND2END_FIXTURE_CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_DEPS) +-include $(LIBEND2END_FIXTURE_CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_OBJS:.o=.dep) endif endif objs/$(CONFIG)/test/core/end2end/fixtures/chttp2_socket_pair_one_byte_at_a_time.o: -clean_libend2end_fixture_chttp2_socket_pair_one_byte_at_a_time: - $(E) "[CLEAN] Cleaning libend2end_fixture_chttp2_socket_pair_one_byte_at_a_time files" - $(Q) $(RM) $(LIBEND2END_FIXTURE_CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_OBJS) - $(Q) $(RM) $(LIBEND2END_FIXTURE_CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_DEPS) - $(Q) $(RM) libs/$(CONFIG)/libend2end_fixture_chttp2_socket_pair_one_byte_at_a_time.a - $(Q) $(RM) libs/$(CONFIG)/libend2end_fixture_chttp2_socket_pair_one_byte_at_a_time.$(SHARED_EXT) - LIBEND2END_TEST_CANCEL_AFTER_ACCEPT_SRC = \ test/core/end2end/tests/cancel_after_accept.c \ LIBEND2END_TEST_CANCEL_AFTER_ACCEPT_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBEND2END_TEST_CANCEL_AFTER_ACCEPT_SRC)))) -LIBEND2END_TEST_CANCEL_AFTER_ACCEPT_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(LIBEND2END_TEST_CANCEL_AFTER_ACCEPT_SRC)))) -libs/$(CONFIG)/libend2end_test_cancel_after_accept.a: $(LIBEND2END_TEST_CANCEL_AFTER_ACCEPT_OBJS) +libs/$(CONFIG)/libend2end_test_cancel_after_accept.a: $(ZLIB_DEP) $(LIBEND2END_TEST_CANCEL_AFTER_ACCEPT_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` + $(Q) rm -f libs/$(CONFIG)/libend2end_test_cancel_after_accept.a $(Q) $(AR) rcs libs/$(CONFIG)/libend2end_test_cancel_after_accept.a $(LIBEND2END_TEST_CANCEL_AFTER_ACCEPT_OBJS) +ifeq ($(SYSTEM),Darwin) + $(Q) ranlib libs/$(CONFIG)/libend2end_test_cancel_after_accept.a +endif -deps_libend2end_test_cancel_after_accept: $(LIBEND2END_TEST_CANCEL_AFTER_ACCEPT_DEPS) - ifneq ($(NO_DEPS),true) --include $(LIBEND2END_TEST_CANCEL_AFTER_ACCEPT_DEPS) +-include $(LIBEND2END_TEST_CANCEL_AFTER_ACCEPT_OBJS:.o=.dep) endif objs/$(CONFIG)/test/core/end2end/tests/cancel_after_accept.o: -clean_libend2end_test_cancel_after_accept: - $(E) "[CLEAN] Cleaning libend2end_test_cancel_after_accept files" - $(Q) $(RM) $(LIBEND2END_TEST_CANCEL_AFTER_ACCEPT_OBJS) - $(Q) $(RM) $(LIBEND2END_TEST_CANCEL_AFTER_ACCEPT_DEPS) - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_cancel_after_accept.a - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_cancel_after_accept.$(SHARED_EXT) - LIBEND2END_TEST_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_SRC = \ test/core/end2end/tests/cancel_after_accept_and_writes_closed.c \ LIBEND2END_TEST_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBEND2END_TEST_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_SRC)))) -LIBEND2END_TEST_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(LIBEND2END_TEST_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_SRC)))) -libs/$(CONFIG)/libend2end_test_cancel_after_accept_and_writes_closed.a: $(LIBEND2END_TEST_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_OBJS) +libs/$(CONFIG)/libend2end_test_cancel_after_accept_and_writes_closed.a: $(ZLIB_DEP) $(LIBEND2END_TEST_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` + $(Q) rm -f libs/$(CONFIG)/libend2end_test_cancel_after_accept_and_writes_closed.a $(Q) $(AR) rcs libs/$(CONFIG)/libend2end_test_cancel_after_accept_and_writes_closed.a $(LIBEND2END_TEST_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_OBJS) +ifeq ($(SYSTEM),Darwin) + $(Q) ranlib libs/$(CONFIG)/libend2end_test_cancel_after_accept_and_writes_closed.a +endif -deps_libend2end_test_cancel_after_accept_and_writes_closed: $(LIBEND2END_TEST_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_DEPS) - ifneq ($(NO_DEPS),true) --include $(LIBEND2END_TEST_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_DEPS) +-include $(LIBEND2END_TEST_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_OBJS:.o=.dep) endif objs/$(CONFIG)/test/core/end2end/tests/cancel_after_accept_and_writes_closed.o: -clean_libend2end_test_cancel_after_accept_and_writes_closed: - $(E) "[CLEAN] Cleaning libend2end_test_cancel_after_accept_and_writes_closed files" - $(Q) $(RM) $(LIBEND2END_TEST_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_OBJS) - $(Q) $(RM) $(LIBEND2END_TEST_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_DEPS) - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_cancel_after_accept_and_writes_closed.a - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_cancel_after_accept_and_writes_closed.$(SHARED_EXT) - LIBEND2END_TEST_CANCEL_AFTER_INVOKE_SRC = \ test/core/end2end/tests/cancel_after_invoke.c \ LIBEND2END_TEST_CANCEL_AFTER_INVOKE_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBEND2END_TEST_CANCEL_AFTER_INVOKE_SRC)))) -LIBEND2END_TEST_CANCEL_AFTER_INVOKE_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(LIBEND2END_TEST_CANCEL_AFTER_INVOKE_SRC)))) -libs/$(CONFIG)/libend2end_test_cancel_after_invoke.a: $(LIBEND2END_TEST_CANCEL_AFTER_INVOKE_OBJS) +libs/$(CONFIG)/libend2end_test_cancel_after_invoke.a: $(ZLIB_DEP) $(LIBEND2END_TEST_CANCEL_AFTER_INVOKE_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` + $(Q) rm -f libs/$(CONFIG)/libend2end_test_cancel_after_invoke.a $(Q) $(AR) rcs libs/$(CONFIG)/libend2end_test_cancel_after_invoke.a $(LIBEND2END_TEST_CANCEL_AFTER_INVOKE_OBJS) +ifeq ($(SYSTEM),Darwin) + $(Q) ranlib libs/$(CONFIG)/libend2end_test_cancel_after_invoke.a +endif -deps_libend2end_test_cancel_after_invoke: $(LIBEND2END_TEST_CANCEL_AFTER_INVOKE_DEPS) - ifneq ($(NO_DEPS),true) --include $(LIBEND2END_TEST_CANCEL_AFTER_INVOKE_DEPS) +-include $(LIBEND2END_TEST_CANCEL_AFTER_INVOKE_OBJS:.o=.dep) endif objs/$(CONFIG)/test/core/end2end/tests/cancel_after_invoke.o: -clean_libend2end_test_cancel_after_invoke: - $(E) "[CLEAN] Cleaning libend2end_test_cancel_after_invoke files" - $(Q) $(RM) $(LIBEND2END_TEST_CANCEL_AFTER_INVOKE_OBJS) - $(Q) $(RM) $(LIBEND2END_TEST_CANCEL_AFTER_INVOKE_DEPS) - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_cancel_after_invoke.a - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_cancel_after_invoke.$(SHARED_EXT) - LIBEND2END_TEST_CANCEL_BEFORE_INVOKE_SRC = \ test/core/end2end/tests/cancel_before_invoke.c \ LIBEND2END_TEST_CANCEL_BEFORE_INVOKE_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBEND2END_TEST_CANCEL_BEFORE_INVOKE_SRC)))) -LIBEND2END_TEST_CANCEL_BEFORE_INVOKE_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(LIBEND2END_TEST_CANCEL_BEFORE_INVOKE_SRC)))) -libs/$(CONFIG)/libend2end_test_cancel_before_invoke.a: $(LIBEND2END_TEST_CANCEL_BEFORE_INVOKE_OBJS) +libs/$(CONFIG)/libend2end_test_cancel_before_invoke.a: $(ZLIB_DEP) $(LIBEND2END_TEST_CANCEL_BEFORE_INVOKE_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` + $(Q) rm -f libs/$(CONFIG)/libend2end_test_cancel_before_invoke.a $(Q) $(AR) rcs libs/$(CONFIG)/libend2end_test_cancel_before_invoke.a $(LIBEND2END_TEST_CANCEL_BEFORE_INVOKE_OBJS) +ifeq ($(SYSTEM),Darwin) + $(Q) ranlib libs/$(CONFIG)/libend2end_test_cancel_before_invoke.a +endif -deps_libend2end_test_cancel_before_invoke: $(LIBEND2END_TEST_CANCEL_BEFORE_INVOKE_DEPS) - ifneq ($(NO_DEPS),true) --include $(LIBEND2END_TEST_CANCEL_BEFORE_INVOKE_DEPS) +-include $(LIBEND2END_TEST_CANCEL_BEFORE_INVOKE_OBJS:.o=.dep) endif objs/$(CONFIG)/test/core/end2end/tests/cancel_before_invoke.o: -clean_libend2end_test_cancel_before_invoke: - $(E) "[CLEAN] Cleaning libend2end_test_cancel_before_invoke files" - $(Q) $(RM) $(LIBEND2END_TEST_CANCEL_BEFORE_INVOKE_OBJS) - $(Q) $(RM) $(LIBEND2END_TEST_CANCEL_BEFORE_INVOKE_DEPS) - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_cancel_before_invoke.a - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_cancel_before_invoke.$(SHARED_EXT) - LIBEND2END_TEST_CANCEL_IN_A_VACUUM_SRC = \ test/core/end2end/tests/cancel_in_a_vacuum.c \ LIBEND2END_TEST_CANCEL_IN_A_VACUUM_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBEND2END_TEST_CANCEL_IN_A_VACUUM_SRC)))) -LIBEND2END_TEST_CANCEL_IN_A_VACUUM_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(LIBEND2END_TEST_CANCEL_IN_A_VACUUM_SRC)))) -libs/$(CONFIG)/libend2end_test_cancel_in_a_vacuum.a: $(LIBEND2END_TEST_CANCEL_IN_A_VACUUM_OBJS) +libs/$(CONFIG)/libend2end_test_cancel_in_a_vacuum.a: $(ZLIB_DEP) $(LIBEND2END_TEST_CANCEL_IN_A_VACUUM_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` + $(Q) rm -f libs/$(CONFIG)/libend2end_test_cancel_in_a_vacuum.a $(Q) $(AR) rcs libs/$(CONFIG)/libend2end_test_cancel_in_a_vacuum.a $(LIBEND2END_TEST_CANCEL_IN_A_VACUUM_OBJS) +ifeq ($(SYSTEM),Darwin) + $(Q) ranlib libs/$(CONFIG)/libend2end_test_cancel_in_a_vacuum.a +endif -deps_libend2end_test_cancel_in_a_vacuum: $(LIBEND2END_TEST_CANCEL_IN_A_VACUUM_DEPS) - ifneq ($(NO_DEPS),true) --include $(LIBEND2END_TEST_CANCEL_IN_A_VACUUM_DEPS) +-include $(LIBEND2END_TEST_CANCEL_IN_A_VACUUM_OBJS:.o=.dep) endif objs/$(CONFIG)/test/core/end2end/tests/cancel_in_a_vacuum.o: -clean_libend2end_test_cancel_in_a_vacuum: - $(E) "[CLEAN] Cleaning libend2end_test_cancel_in_a_vacuum files" - $(Q) $(RM) $(LIBEND2END_TEST_CANCEL_IN_A_VACUUM_OBJS) - $(Q) $(RM) $(LIBEND2END_TEST_CANCEL_IN_A_VACUUM_DEPS) - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_cancel_in_a_vacuum.a - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_cancel_in_a_vacuum.$(SHARED_EXT) - LIBEND2END_TEST_CENSUS_SIMPLE_REQUEST_SRC = \ test/core/end2end/tests/census_simple_request.c \ LIBEND2END_TEST_CENSUS_SIMPLE_REQUEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBEND2END_TEST_CENSUS_SIMPLE_REQUEST_SRC)))) -LIBEND2END_TEST_CENSUS_SIMPLE_REQUEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(LIBEND2END_TEST_CENSUS_SIMPLE_REQUEST_SRC)))) -libs/$(CONFIG)/libend2end_test_census_simple_request.a: $(LIBEND2END_TEST_CENSUS_SIMPLE_REQUEST_OBJS) +libs/$(CONFIG)/libend2end_test_census_simple_request.a: $(ZLIB_DEP) $(LIBEND2END_TEST_CENSUS_SIMPLE_REQUEST_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` + $(Q) rm -f libs/$(CONFIG)/libend2end_test_census_simple_request.a $(Q) $(AR) rcs libs/$(CONFIG)/libend2end_test_census_simple_request.a $(LIBEND2END_TEST_CENSUS_SIMPLE_REQUEST_OBJS) +ifeq ($(SYSTEM),Darwin) + $(Q) ranlib libs/$(CONFIG)/libend2end_test_census_simple_request.a +endif -deps_libend2end_test_census_simple_request: $(LIBEND2END_TEST_CENSUS_SIMPLE_REQUEST_DEPS) - ifneq ($(NO_DEPS),true) --include $(LIBEND2END_TEST_CENSUS_SIMPLE_REQUEST_DEPS) +-include $(LIBEND2END_TEST_CENSUS_SIMPLE_REQUEST_OBJS:.o=.dep) endif objs/$(CONFIG)/test/core/end2end/tests/census_simple_request.o: -clean_libend2end_test_census_simple_request: - $(E) "[CLEAN] Cleaning libend2end_test_census_simple_request files" - $(Q) $(RM) $(LIBEND2END_TEST_CENSUS_SIMPLE_REQUEST_OBJS) - $(Q) $(RM) $(LIBEND2END_TEST_CENSUS_SIMPLE_REQUEST_DEPS) - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_census_simple_request.a - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_census_simple_request.$(SHARED_EXT) - LIBEND2END_TEST_DISAPPEARING_SERVER_SRC = \ test/core/end2end/tests/disappearing_server.c \ LIBEND2END_TEST_DISAPPEARING_SERVER_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBEND2END_TEST_DISAPPEARING_SERVER_SRC)))) -LIBEND2END_TEST_DISAPPEARING_SERVER_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(LIBEND2END_TEST_DISAPPEARING_SERVER_SRC)))) -libs/$(CONFIG)/libend2end_test_disappearing_server.a: $(LIBEND2END_TEST_DISAPPEARING_SERVER_OBJS) +libs/$(CONFIG)/libend2end_test_disappearing_server.a: $(ZLIB_DEP) $(LIBEND2END_TEST_DISAPPEARING_SERVER_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` + $(Q) rm -f libs/$(CONFIG)/libend2end_test_disappearing_server.a $(Q) $(AR) rcs libs/$(CONFIG)/libend2end_test_disappearing_server.a $(LIBEND2END_TEST_DISAPPEARING_SERVER_OBJS) +ifeq ($(SYSTEM),Darwin) + $(Q) ranlib libs/$(CONFIG)/libend2end_test_disappearing_server.a +endif -deps_libend2end_test_disappearing_server: $(LIBEND2END_TEST_DISAPPEARING_SERVER_DEPS) - ifneq ($(NO_DEPS),true) --include $(LIBEND2END_TEST_DISAPPEARING_SERVER_DEPS) +-include $(LIBEND2END_TEST_DISAPPEARING_SERVER_OBJS:.o=.dep) endif objs/$(CONFIG)/test/core/end2end/tests/disappearing_server.o: -clean_libend2end_test_disappearing_server: - $(E) "[CLEAN] Cleaning libend2end_test_disappearing_server files" - $(Q) $(RM) $(LIBEND2END_TEST_DISAPPEARING_SERVER_OBJS) - $(Q) $(RM) $(LIBEND2END_TEST_DISAPPEARING_SERVER_DEPS) - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_disappearing_server.a - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_disappearing_server.$(SHARED_EXT) - LIBEND2END_TEST_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_SRC = \ test/core/end2end/tests/early_server_shutdown_finishes_inflight_calls.c \ LIBEND2END_TEST_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBEND2END_TEST_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_SRC)))) -LIBEND2END_TEST_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(LIBEND2END_TEST_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_SRC)))) -libs/$(CONFIG)/libend2end_test_early_server_shutdown_finishes_inflight_calls.a: $(LIBEND2END_TEST_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_OBJS) +libs/$(CONFIG)/libend2end_test_early_server_shutdown_finishes_inflight_calls.a: $(ZLIB_DEP) $(LIBEND2END_TEST_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` + $(Q) rm -f libs/$(CONFIG)/libend2end_test_early_server_shutdown_finishes_inflight_calls.a $(Q) $(AR) rcs libs/$(CONFIG)/libend2end_test_early_server_shutdown_finishes_inflight_calls.a $(LIBEND2END_TEST_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_OBJS) +ifeq ($(SYSTEM),Darwin) + $(Q) ranlib libs/$(CONFIG)/libend2end_test_early_server_shutdown_finishes_inflight_calls.a +endif -deps_libend2end_test_early_server_shutdown_finishes_inflight_calls: $(LIBEND2END_TEST_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_DEPS) - ifneq ($(NO_DEPS),true) --include $(LIBEND2END_TEST_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_DEPS) +-include $(LIBEND2END_TEST_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_OBJS:.o=.dep) endif objs/$(CONFIG)/test/core/end2end/tests/early_server_shutdown_finishes_inflight_calls.o: -clean_libend2end_test_early_server_shutdown_finishes_inflight_calls: - $(E) "[CLEAN] Cleaning libend2end_test_early_server_shutdown_finishes_inflight_calls files" - $(Q) $(RM) $(LIBEND2END_TEST_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_OBJS) - $(Q) $(RM) $(LIBEND2END_TEST_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_DEPS) - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_early_server_shutdown_finishes_inflight_calls.a - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_early_server_shutdown_finishes_inflight_calls.$(SHARED_EXT) - LIBEND2END_TEST_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_SRC = \ test/core/end2end/tests/early_server_shutdown_finishes_tags.c \ LIBEND2END_TEST_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBEND2END_TEST_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_SRC)))) -LIBEND2END_TEST_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(LIBEND2END_TEST_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_SRC)))) -libs/$(CONFIG)/libend2end_test_early_server_shutdown_finishes_tags.a: $(LIBEND2END_TEST_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_OBJS) +libs/$(CONFIG)/libend2end_test_early_server_shutdown_finishes_tags.a: $(ZLIB_DEP) $(LIBEND2END_TEST_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` + $(Q) rm -f libs/$(CONFIG)/libend2end_test_early_server_shutdown_finishes_tags.a $(Q) $(AR) rcs libs/$(CONFIG)/libend2end_test_early_server_shutdown_finishes_tags.a $(LIBEND2END_TEST_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_OBJS) +ifeq ($(SYSTEM),Darwin) + $(Q) ranlib libs/$(CONFIG)/libend2end_test_early_server_shutdown_finishes_tags.a +endif -deps_libend2end_test_early_server_shutdown_finishes_tags: $(LIBEND2END_TEST_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_DEPS) - ifneq ($(NO_DEPS),true) --include $(LIBEND2END_TEST_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_DEPS) +-include $(LIBEND2END_TEST_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_OBJS:.o=.dep) endif objs/$(CONFIG)/test/core/end2end/tests/early_server_shutdown_finishes_tags.o: -clean_libend2end_test_early_server_shutdown_finishes_tags: - $(E) "[CLEAN] Cleaning libend2end_test_early_server_shutdown_finishes_tags files" - $(Q) $(RM) $(LIBEND2END_TEST_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_OBJS) - $(Q) $(RM) $(LIBEND2END_TEST_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_DEPS) - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_early_server_shutdown_finishes_tags.a - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_early_server_shutdown_finishes_tags.$(SHARED_EXT) + +LIBEND2END_TEST_GRACEFUL_SERVER_SHUTDOWN_SRC = \ + test/core/end2end/tests/graceful_server_shutdown.c \ + + +LIBEND2END_TEST_GRACEFUL_SERVER_SHUTDOWN_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBEND2END_TEST_GRACEFUL_SERVER_SHUTDOWN_SRC)))) + +libs/$(CONFIG)/libend2end_test_graceful_server_shutdown.a: $(ZLIB_DEP) $(LIBEND2END_TEST_GRACEFUL_SERVER_SHUTDOWN_OBJS) + $(E) "[AR] Creating $@" + $(Q) mkdir -p `dirname $@` + $(Q) rm -f libs/$(CONFIG)/libend2end_test_graceful_server_shutdown.a + $(Q) $(AR) rcs libs/$(CONFIG)/libend2end_test_graceful_server_shutdown.a $(LIBEND2END_TEST_GRACEFUL_SERVER_SHUTDOWN_OBJS) +ifeq ($(SYSTEM),Darwin) + $(Q) ranlib libs/$(CONFIG)/libend2end_test_graceful_server_shutdown.a +endif + + + + + +ifneq ($(NO_DEPS),true) +-include $(LIBEND2END_TEST_GRACEFUL_SERVER_SHUTDOWN_OBJS:.o=.dep) +endif + +objs/$(CONFIG)/test/core/end2end/tests/graceful_server_shutdown.o: LIBEND2END_TEST_INVOKE_LARGE_REQUEST_SRC = \ @@ -2564,384 +2753,312 @@ LIBEND2END_TEST_INVOKE_LARGE_REQUEST_SRC = \ LIBEND2END_TEST_INVOKE_LARGE_REQUEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBEND2END_TEST_INVOKE_LARGE_REQUEST_SRC)))) -LIBEND2END_TEST_INVOKE_LARGE_REQUEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(LIBEND2END_TEST_INVOKE_LARGE_REQUEST_SRC)))) -libs/$(CONFIG)/libend2end_test_invoke_large_request.a: $(LIBEND2END_TEST_INVOKE_LARGE_REQUEST_OBJS) +libs/$(CONFIG)/libend2end_test_invoke_large_request.a: $(ZLIB_DEP) $(LIBEND2END_TEST_INVOKE_LARGE_REQUEST_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` + $(Q) rm -f libs/$(CONFIG)/libend2end_test_invoke_large_request.a $(Q) $(AR) rcs libs/$(CONFIG)/libend2end_test_invoke_large_request.a $(LIBEND2END_TEST_INVOKE_LARGE_REQUEST_OBJS) +ifeq ($(SYSTEM),Darwin) + $(Q) ranlib libs/$(CONFIG)/libend2end_test_invoke_large_request.a +endif -deps_libend2end_test_invoke_large_request: $(LIBEND2END_TEST_INVOKE_LARGE_REQUEST_DEPS) - ifneq ($(NO_DEPS),true) --include $(LIBEND2END_TEST_INVOKE_LARGE_REQUEST_DEPS) +-include $(LIBEND2END_TEST_INVOKE_LARGE_REQUEST_OBJS:.o=.dep) endif objs/$(CONFIG)/test/core/end2end/tests/invoke_large_request.o: -clean_libend2end_test_invoke_large_request: - $(E) "[CLEAN] Cleaning libend2end_test_invoke_large_request files" - $(Q) $(RM) $(LIBEND2END_TEST_INVOKE_LARGE_REQUEST_OBJS) - $(Q) $(RM) $(LIBEND2END_TEST_INVOKE_LARGE_REQUEST_DEPS) - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_invoke_large_request.a - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_invoke_large_request.$(SHARED_EXT) - LIBEND2END_TEST_MAX_CONCURRENT_STREAMS_SRC = \ test/core/end2end/tests/max_concurrent_streams.c \ LIBEND2END_TEST_MAX_CONCURRENT_STREAMS_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBEND2END_TEST_MAX_CONCURRENT_STREAMS_SRC)))) -LIBEND2END_TEST_MAX_CONCURRENT_STREAMS_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(LIBEND2END_TEST_MAX_CONCURRENT_STREAMS_SRC)))) -libs/$(CONFIG)/libend2end_test_max_concurrent_streams.a: $(LIBEND2END_TEST_MAX_CONCURRENT_STREAMS_OBJS) +libs/$(CONFIG)/libend2end_test_max_concurrent_streams.a: $(ZLIB_DEP) $(LIBEND2END_TEST_MAX_CONCURRENT_STREAMS_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` + $(Q) rm -f libs/$(CONFIG)/libend2end_test_max_concurrent_streams.a $(Q) $(AR) rcs libs/$(CONFIG)/libend2end_test_max_concurrent_streams.a $(LIBEND2END_TEST_MAX_CONCURRENT_STREAMS_OBJS) +ifeq ($(SYSTEM),Darwin) + $(Q) ranlib libs/$(CONFIG)/libend2end_test_max_concurrent_streams.a +endif -deps_libend2end_test_max_concurrent_streams: $(LIBEND2END_TEST_MAX_CONCURRENT_STREAMS_DEPS) - ifneq ($(NO_DEPS),true) --include $(LIBEND2END_TEST_MAX_CONCURRENT_STREAMS_DEPS) +-include $(LIBEND2END_TEST_MAX_CONCURRENT_STREAMS_OBJS:.o=.dep) endif objs/$(CONFIG)/test/core/end2end/tests/max_concurrent_streams.o: -clean_libend2end_test_max_concurrent_streams: - $(E) "[CLEAN] Cleaning libend2end_test_max_concurrent_streams files" - $(Q) $(RM) $(LIBEND2END_TEST_MAX_CONCURRENT_STREAMS_OBJS) - $(Q) $(RM) $(LIBEND2END_TEST_MAX_CONCURRENT_STREAMS_DEPS) - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_max_concurrent_streams.a - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_max_concurrent_streams.$(SHARED_EXT) - LIBEND2END_TEST_NO_OP_SRC = \ test/core/end2end/tests/no_op.c \ LIBEND2END_TEST_NO_OP_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBEND2END_TEST_NO_OP_SRC)))) -LIBEND2END_TEST_NO_OP_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(LIBEND2END_TEST_NO_OP_SRC)))) -libs/$(CONFIG)/libend2end_test_no_op.a: $(LIBEND2END_TEST_NO_OP_OBJS) +libs/$(CONFIG)/libend2end_test_no_op.a: $(ZLIB_DEP) $(LIBEND2END_TEST_NO_OP_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` + $(Q) rm -f libs/$(CONFIG)/libend2end_test_no_op.a $(Q) $(AR) rcs libs/$(CONFIG)/libend2end_test_no_op.a $(LIBEND2END_TEST_NO_OP_OBJS) +ifeq ($(SYSTEM),Darwin) + $(Q) ranlib libs/$(CONFIG)/libend2end_test_no_op.a +endif -deps_libend2end_test_no_op: $(LIBEND2END_TEST_NO_OP_DEPS) - ifneq ($(NO_DEPS),true) --include $(LIBEND2END_TEST_NO_OP_DEPS) +-include $(LIBEND2END_TEST_NO_OP_OBJS:.o=.dep) endif objs/$(CONFIG)/test/core/end2end/tests/no_op.o: -clean_libend2end_test_no_op: - $(E) "[CLEAN] Cleaning libend2end_test_no_op files" - $(Q) $(RM) $(LIBEND2END_TEST_NO_OP_OBJS) - $(Q) $(RM) $(LIBEND2END_TEST_NO_OP_DEPS) - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_no_op.a - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_no_op.$(SHARED_EXT) - LIBEND2END_TEST_PING_PONG_STREAMING_SRC = \ test/core/end2end/tests/ping_pong_streaming.c \ LIBEND2END_TEST_PING_PONG_STREAMING_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBEND2END_TEST_PING_PONG_STREAMING_SRC)))) -LIBEND2END_TEST_PING_PONG_STREAMING_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(LIBEND2END_TEST_PING_PONG_STREAMING_SRC)))) -libs/$(CONFIG)/libend2end_test_ping_pong_streaming.a: $(LIBEND2END_TEST_PING_PONG_STREAMING_OBJS) +libs/$(CONFIG)/libend2end_test_ping_pong_streaming.a: $(ZLIB_DEP) $(LIBEND2END_TEST_PING_PONG_STREAMING_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` + $(Q) rm -f libs/$(CONFIG)/libend2end_test_ping_pong_streaming.a $(Q) $(AR) rcs libs/$(CONFIG)/libend2end_test_ping_pong_streaming.a $(LIBEND2END_TEST_PING_PONG_STREAMING_OBJS) +ifeq ($(SYSTEM),Darwin) + $(Q) ranlib libs/$(CONFIG)/libend2end_test_ping_pong_streaming.a +endif -deps_libend2end_test_ping_pong_streaming: $(LIBEND2END_TEST_PING_PONG_STREAMING_DEPS) - ifneq ($(NO_DEPS),true) --include $(LIBEND2END_TEST_PING_PONG_STREAMING_DEPS) +-include $(LIBEND2END_TEST_PING_PONG_STREAMING_OBJS:.o=.dep) endif objs/$(CONFIG)/test/core/end2end/tests/ping_pong_streaming.o: -clean_libend2end_test_ping_pong_streaming: - $(E) "[CLEAN] Cleaning libend2end_test_ping_pong_streaming files" - $(Q) $(RM) $(LIBEND2END_TEST_PING_PONG_STREAMING_OBJS) - $(Q) $(RM) $(LIBEND2END_TEST_PING_PONG_STREAMING_DEPS) - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_ping_pong_streaming.a - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_ping_pong_streaming.$(SHARED_EXT) - LIBEND2END_TEST_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_SRC = \ test/core/end2end/tests/request_response_with_binary_metadata_and_payload.c \ LIBEND2END_TEST_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_SRC)))) -LIBEND2END_TEST_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_SRC)))) -libs/$(CONFIG)/libend2end_test_request_response_with_binary_metadata_and_payload.a: $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_OBJS) +libs/$(CONFIG)/libend2end_test_request_response_with_binary_metadata_and_payload.a: $(ZLIB_DEP) $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` + $(Q) rm -f libs/$(CONFIG)/libend2end_test_request_response_with_binary_metadata_and_payload.a $(Q) $(AR) rcs libs/$(CONFIG)/libend2end_test_request_response_with_binary_metadata_and_payload.a $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_OBJS) +ifeq ($(SYSTEM),Darwin) + $(Q) ranlib libs/$(CONFIG)/libend2end_test_request_response_with_binary_metadata_and_payload.a +endif -deps_libend2end_test_request_response_with_binary_metadata_and_payload: $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_DEPS) - ifneq ($(NO_DEPS),true) --include $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_DEPS) +-include $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_OBJS:.o=.dep) endif objs/$(CONFIG)/test/core/end2end/tests/request_response_with_binary_metadata_and_payload.o: -clean_libend2end_test_request_response_with_binary_metadata_and_payload: - $(E) "[CLEAN] Cleaning libend2end_test_request_response_with_binary_metadata_and_payload files" - $(Q) $(RM) $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_OBJS) - $(Q) $(RM) $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_DEPS) - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_request_response_with_binary_metadata_and_payload.a - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_request_response_with_binary_metadata_and_payload.$(SHARED_EXT) - LIBEND2END_TEST_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_SRC = \ test/core/end2end/tests/request_response_with_metadata_and_payload.c \ LIBEND2END_TEST_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_SRC)))) -LIBEND2END_TEST_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_SRC)))) -libs/$(CONFIG)/libend2end_test_request_response_with_metadata_and_payload.a: $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_OBJS) +libs/$(CONFIG)/libend2end_test_request_response_with_metadata_and_payload.a: $(ZLIB_DEP) $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` + $(Q) rm -f libs/$(CONFIG)/libend2end_test_request_response_with_metadata_and_payload.a $(Q) $(AR) rcs libs/$(CONFIG)/libend2end_test_request_response_with_metadata_and_payload.a $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_OBJS) +ifeq ($(SYSTEM),Darwin) + $(Q) ranlib libs/$(CONFIG)/libend2end_test_request_response_with_metadata_and_payload.a +endif -deps_libend2end_test_request_response_with_metadata_and_payload: $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_DEPS) - ifneq ($(NO_DEPS),true) --include $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_DEPS) +-include $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_OBJS:.o=.dep) endif objs/$(CONFIG)/test/core/end2end/tests/request_response_with_metadata_and_payload.o: -clean_libend2end_test_request_response_with_metadata_and_payload: - $(E) "[CLEAN] Cleaning libend2end_test_request_response_with_metadata_and_payload files" - $(Q) $(RM) $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_OBJS) - $(Q) $(RM) $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_DEPS) - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_request_response_with_metadata_and_payload.a - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_request_response_with_metadata_and_payload.$(SHARED_EXT) - LIBEND2END_TEST_REQUEST_RESPONSE_WITH_PAYLOAD_SRC = \ test/core/end2end/tests/request_response_with_payload.c \ LIBEND2END_TEST_REQUEST_RESPONSE_WITH_PAYLOAD_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_PAYLOAD_SRC)))) -LIBEND2END_TEST_REQUEST_RESPONSE_WITH_PAYLOAD_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_PAYLOAD_SRC)))) -libs/$(CONFIG)/libend2end_test_request_response_with_payload.a: $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_PAYLOAD_OBJS) +libs/$(CONFIG)/libend2end_test_request_response_with_payload.a: $(ZLIB_DEP) $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_PAYLOAD_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` + $(Q) rm -f libs/$(CONFIG)/libend2end_test_request_response_with_payload.a $(Q) $(AR) rcs libs/$(CONFIG)/libend2end_test_request_response_with_payload.a $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_PAYLOAD_OBJS) +ifeq ($(SYSTEM),Darwin) + $(Q) ranlib libs/$(CONFIG)/libend2end_test_request_response_with_payload.a +endif -deps_libend2end_test_request_response_with_payload: $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_PAYLOAD_DEPS) - ifneq ($(NO_DEPS),true) --include $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_PAYLOAD_DEPS) +-include $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_PAYLOAD_OBJS:.o=.dep) endif objs/$(CONFIG)/test/core/end2end/tests/request_response_with_payload.o: -clean_libend2end_test_request_response_with_payload: - $(E) "[CLEAN] Cleaning libend2end_test_request_response_with_payload files" - $(Q) $(RM) $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_PAYLOAD_OBJS) - $(Q) $(RM) $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_PAYLOAD_DEPS) - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_request_response_with_payload.a - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_request_response_with_payload.$(SHARED_EXT) - LIBEND2END_TEST_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_SRC = \ test/core/end2end/tests/request_response_with_trailing_metadata_and_payload.c \ LIBEND2END_TEST_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_SRC)))) -LIBEND2END_TEST_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_SRC)))) -libs/$(CONFIG)/libend2end_test_request_response_with_trailing_metadata_and_payload.a: $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_OBJS) +libs/$(CONFIG)/libend2end_test_request_response_with_trailing_metadata_and_payload.a: $(ZLIB_DEP) $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` + $(Q) rm -f libs/$(CONFIG)/libend2end_test_request_response_with_trailing_metadata_and_payload.a $(Q) $(AR) rcs libs/$(CONFIG)/libend2end_test_request_response_with_trailing_metadata_and_payload.a $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_OBJS) +ifeq ($(SYSTEM),Darwin) + $(Q) ranlib libs/$(CONFIG)/libend2end_test_request_response_with_trailing_metadata_and_payload.a +endif -deps_libend2end_test_request_response_with_trailing_metadata_and_payload: $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_DEPS) - ifneq ($(NO_DEPS),true) --include $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_DEPS) +-include $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_OBJS:.o=.dep) endif objs/$(CONFIG)/test/core/end2end/tests/request_response_with_trailing_metadata_and_payload.o: -clean_libend2end_test_request_response_with_trailing_metadata_and_payload: - $(E) "[CLEAN] Cleaning libend2end_test_request_response_with_trailing_metadata_and_payload files" - $(Q) $(RM) $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_OBJS) - $(Q) $(RM) $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_DEPS) - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_request_response_with_trailing_metadata_and_payload.a - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_request_response_with_trailing_metadata_and_payload.$(SHARED_EXT) - LIBEND2END_TEST_SIMPLE_DELAYED_REQUEST_SRC = \ test/core/end2end/tests/simple_delayed_request.c \ LIBEND2END_TEST_SIMPLE_DELAYED_REQUEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBEND2END_TEST_SIMPLE_DELAYED_REQUEST_SRC)))) -LIBEND2END_TEST_SIMPLE_DELAYED_REQUEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(LIBEND2END_TEST_SIMPLE_DELAYED_REQUEST_SRC)))) -libs/$(CONFIG)/libend2end_test_simple_delayed_request.a: $(LIBEND2END_TEST_SIMPLE_DELAYED_REQUEST_OBJS) +libs/$(CONFIG)/libend2end_test_simple_delayed_request.a: $(ZLIB_DEP) $(LIBEND2END_TEST_SIMPLE_DELAYED_REQUEST_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` + $(Q) rm -f libs/$(CONFIG)/libend2end_test_simple_delayed_request.a $(Q) $(AR) rcs libs/$(CONFIG)/libend2end_test_simple_delayed_request.a $(LIBEND2END_TEST_SIMPLE_DELAYED_REQUEST_OBJS) +ifeq ($(SYSTEM),Darwin) + $(Q) ranlib libs/$(CONFIG)/libend2end_test_simple_delayed_request.a +endif -deps_libend2end_test_simple_delayed_request: $(LIBEND2END_TEST_SIMPLE_DELAYED_REQUEST_DEPS) - ifneq ($(NO_DEPS),true) --include $(LIBEND2END_TEST_SIMPLE_DELAYED_REQUEST_DEPS) +-include $(LIBEND2END_TEST_SIMPLE_DELAYED_REQUEST_OBJS:.o=.dep) endif objs/$(CONFIG)/test/core/end2end/tests/simple_delayed_request.o: -clean_libend2end_test_simple_delayed_request: - $(E) "[CLEAN] Cleaning libend2end_test_simple_delayed_request files" - $(Q) $(RM) $(LIBEND2END_TEST_SIMPLE_DELAYED_REQUEST_OBJS) - $(Q) $(RM) $(LIBEND2END_TEST_SIMPLE_DELAYED_REQUEST_DEPS) - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_simple_delayed_request.a - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_simple_delayed_request.$(SHARED_EXT) - LIBEND2END_TEST_SIMPLE_REQUEST_SRC = \ test/core/end2end/tests/simple_request.c \ LIBEND2END_TEST_SIMPLE_REQUEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBEND2END_TEST_SIMPLE_REQUEST_SRC)))) -LIBEND2END_TEST_SIMPLE_REQUEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(LIBEND2END_TEST_SIMPLE_REQUEST_SRC)))) -libs/$(CONFIG)/libend2end_test_simple_request.a: $(LIBEND2END_TEST_SIMPLE_REQUEST_OBJS) +libs/$(CONFIG)/libend2end_test_simple_request.a: $(ZLIB_DEP) $(LIBEND2END_TEST_SIMPLE_REQUEST_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` + $(Q) rm -f libs/$(CONFIG)/libend2end_test_simple_request.a $(Q) $(AR) rcs libs/$(CONFIG)/libend2end_test_simple_request.a $(LIBEND2END_TEST_SIMPLE_REQUEST_OBJS) +ifeq ($(SYSTEM),Darwin) + $(Q) ranlib libs/$(CONFIG)/libend2end_test_simple_request.a +endif -deps_libend2end_test_simple_request: $(LIBEND2END_TEST_SIMPLE_REQUEST_DEPS) - ifneq ($(NO_DEPS),true) --include $(LIBEND2END_TEST_SIMPLE_REQUEST_DEPS) +-include $(LIBEND2END_TEST_SIMPLE_REQUEST_OBJS:.o=.dep) endif objs/$(CONFIG)/test/core/end2end/tests/simple_request.o: -clean_libend2end_test_simple_request: - $(E) "[CLEAN] Cleaning libend2end_test_simple_request files" - $(Q) $(RM) $(LIBEND2END_TEST_SIMPLE_REQUEST_OBJS) - $(Q) $(RM) $(LIBEND2END_TEST_SIMPLE_REQUEST_DEPS) - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_simple_request.a - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_simple_request.$(SHARED_EXT) - LIBEND2END_TEST_THREAD_STRESS_SRC = \ test/core/end2end/tests/thread_stress.c \ LIBEND2END_TEST_THREAD_STRESS_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBEND2END_TEST_THREAD_STRESS_SRC)))) -LIBEND2END_TEST_THREAD_STRESS_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(LIBEND2END_TEST_THREAD_STRESS_SRC)))) -libs/$(CONFIG)/libend2end_test_thread_stress.a: $(LIBEND2END_TEST_THREAD_STRESS_OBJS) +libs/$(CONFIG)/libend2end_test_thread_stress.a: $(ZLIB_DEP) $(LIBEND2END_TEST_THREAD_STRESS_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` + $(Q) rm -f libs/$(CONFIG)/libend2end_test_thread_stress.a $(Q) $(AR) rcs libs/$(CONFIG)/libend2end_test_thread_stress.a $(LIBEND2END_TEST_THREAD_STRESS_OBJS) +ifeq ($(SYSTEM),Darwin) + $(Q) ranlib libs/$(CONFIG)/libend2end_test_thread_stress.a +endif -deps_libend2end_test_thread_stress: $(LIBEND2END_TEST_THREAD_STRESS_DEPS) - ifneq ($(NO_DEPS),true) --include $(LIBEND2END_TEST_THREAD_STRESS_DEPS) +-include $(LIBEND2END_TEST_THREAD_STRESS_OBJS:.o=.dep) endif objs/$(CONFIG)/test/core/end2end/tests/thread_stress.o: -clean_libend2end_test_thread_stress: - $(E) "[CLEAN] Cleaning libend2end_test_thread_stress files" - $(Q) $(RM) $(LIBEND2END_TEST_THREAD_STRESS_OBJS) - $(Q) $(RM) $(LIBEND2END_TEST_THREAD_STRESS_DEPS) - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_thread_stress.a - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_thread_stress.$(SHARED_EXT) - LIBEND2END_TEST_WRITES_DONE_HANGS_WITH_PENDING_READ_SRC = \ test/core/end2end/tests/writes_done_hangs_with_pending_read.c \ LIBEND2END_TEST_WRITES_DONE_HANGS_WITH_PENDING_READ_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBEND2END_TEST_WRITES_DONE_HANGS_WITH_PENDING_READ_SRC)))) -LIBEND2END_TEST_WRITES_DONE_HANGS_WITH_PENDING_READ_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(LIBEND2END_TEST_WRITES_DONE_HANGS_WITH_PENDING_READ_SRC)))) -libs/$(CONFIG)/libend2end_test_writes_done_hangs_with_pending_read.a: $(LIBEND2END_TEST_WRITES_DONE_HANGS_WITH_PENDING_READ_OBJS) +libs/$(CONFIG)/libend2end_test_writes_done_hangs_with_pending_read.a: $(ZLIB_DEP) $(LIBEND2END_TEST_WRITES_DONE_HANGS_WITH_PENDING_READ_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` + $(Q) rm -f libs/$(CONFIG)/libend2end_test_writes_done_hangs_with_pending_read.a $(Q) $(AR) rcs libs/$(CONFIG)/libend2end_test_writes_done_hangs_with_pending_read.a $(LIBEND2END_TEST_WRITES_DONE_HANGS_WITH_PENDING_READ_OBJS) +ifeq ($(SYSTEM),Darwin) + $(Q) ranlib libs/$(CONFIG)/libend2end_test_writes_done_hangs_with_pending_read.a +endif -deps_libend2end_test_writes_done_hangs_with_pending_read: $(LIBEND2END_TEST_WRITES_DONE_HANGS_WITH_PENDING_READ_DEPS) - ifneq ($(NO_DEPS),true) --include $(LIBEND2END_TEST_WRITES_DONE_HANGS_WITH_PENDING_READ_DEPS) +-include $(LIBEND2END_TEST_WRITES_DONE_HANGS_WITH_PENDING_READ_OBJS:.o=.dep) endif objs/$(CONFIG)/test/core/end2end/tests/writes_done_hangs_with_pending_read.o: -clean_libend2end_test_writes_done_hangs_with_pending_read: - $(E) "[CLEAN] Cleaning libend2end_test_writes_done_hangs_with_pending_read files" - $(Q) $(RM) $(LIBEND2END_TEST_WRITES_DONE_HANGS_WITH_PENDING_READ_OBJS) - $(Q) $(RM) $(LIBEND2END_TEST_WRITES_DONE_HANGS_WITH_PENDING_READ_DEPS) - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_writes_done_hangs_with_pending_read.a - $(Q) $(RM) libs/$(CONFIG)/libend2end_test_writes_done_hangs_with_pending_read.$(SHARED_EXT) - LIBEND2END_CERTS_SRC = \ test/core/end2end/data/test_root_cert.c \ @@ -2951,19 +3068,31 @@ LIBEND2END_CERTS_SRC = \ LIBEND2END_CERTS_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBEND2END_CERTS_SRC)))) -LIBEND2END_CERTS_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(LIBEND2END_CERTS_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure libraries if you don't have OpenSSL with ALPN. + libs/$(CONFIG)/libend2end_certs.a: openssl_dep_error else -libs/$(CONFIG)/libend2end_certs.a: $(OPENSSL_DEP) $(LIBEND2END_CERTS_OBJS) +ifneq ($(OPENSSL_DEP),) +test/core/end2end/data/test_root_cert.c: $(OPENSSL_DEP) +test/core/end2end/data/prod_roots_certs.c: $(OPENSSL_DEP) +test/core/end2end/data/server1_cert.c: $(OPENSSL_DEP) +test/core/end2end/data/server1_key.c: $(OPENSSL_DEP) +endif + +libs/$(CONFIG)/libend2end_certs.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBEND2END_CERTS_OBJS) $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` + $(Q) rm -f libs/$(CONFIG)/libend2end_certs.a $(Q) $(AR) rcs libs/$(CONFIG)/libend2end_certs.a $(LIBEND2END_CERTS_OBJS) +ifeq ($(SYSTEM),Darwin) + $(Q) ranlib libs/$(CONFIG)/libend2end_certs.a +endif @@ -2971,11 +3100,9 @@ libs/$(CONFIG)/libend2end_certs.a: $(OPENSSL_DEP) $(LIBEND2END_CERTS_OBJS) endif -deps_libend2end_certs: $(LIBEND2END_CERTS_DEPS) - ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(LIBEND2END_CERTS_DEPS) +-include $(LIBEND2END_CERTS_OBJS:.o=.dep) endif endif @@ -2984,1954 +3111,1756 @@ objs/$(CONFIG)/test/core/end2end/data/prod_roots_certs.o: objs/$(CONFIG)/test/core/end2end/data/server1_cert.o: objs/$(CONFIG)/test/core/end2end/data/server1_key.o: -clean_libend2end_certs: - $(E) "[CLEAN] Cleaning libend2end_certs files" - $(Q) $(RM) $(LIBEND2END_CERTS_OBJS) - $(Q) $(RM) $(LIBEND2END_CERTS_DEPS) - $(Q) $(RM) libs/$(CONFIG)/libend2end_certs.a - $(Q) $(RM) libs/$(CONFIG)/libend2end_certs.$(SHARED_EXT) - # All of the test targets, and protoc plugins -GEN_HPACK_TABLES_SRC = \ - src/core/transport/chttp2/gen_hpack_tables.c \ +ALARM_HEAP_TEST_SRC = \ + test/core/iomgr/alarm_heap_test.c \ -GEN_HPACK_TABLES_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GEN_HPACK_TABLES_SRC)))) -GEN_HPACK_TABLES_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(GEN_HPACK_TABLES_SRC)))) +ALARM_HEAP_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(ALARM_HEAP_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/gen_hpack_tables: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/alarm_heap_test: openssl_dep_error else -bins/$(CONFIG)/gen_hpack_tables: $(GEN_HPACK_TABLES_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgpr.a libs/$(CONFIG)/libgrpc.a +bins/$(CONFIG)/alarm_heap_test: $(ALARM_HEAP_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(GEN_HPACK_TABLES_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgpr.a libs/$(CONFIG)/libgrpc.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/gen_hpack_tables + $(Q) $(LD) $(LDFLAGS) $(ALARM_HEAP_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/alarm_heap_test endif -objs/$(CONFIG)/src/core/transport/chttp2/gen_hpack_tables.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgpr.a libs/$(CONFIG)/libgrpc.a +objs/$(CONFIG)/test/core/iomgr/alarm_heap_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_gen_hpack_tables: $(GEN_HPACK_TABLES_DEPS) +deps_alarm_heap_test: $(ALARM_HEAP_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(GEN_HPACK_TABLES_DEPS) +-include $(ALARM_HEAP_TEST_OBJS:.o=.dep) endif endif -clean_gen_hpack_tables: - $(E) "[CLEAN] Cleaning gen_hpack_tables files" - $(Q) $(RM) $(GEN_HPACK_TABLES_OBJS) - $(Q) $(RM) $(GEN_HPACK_TABLES_DEPS) - $(Q) $(RM) bins/$(CONFIG)/gen_hpack_tables - - -CPP_PLUGIN_SRC = \ - src/compiler/cpp_plugin.cpp \ - src/compiler/cpp_generator.cpp \ - -CPP_PLUGIN_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CPP_PLUGIN_SRC)))) -CPP_PLUGIN_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CPP_PLUGIN_SRC)))) - -bins/$(CONFIG)/cpp_plugin: $(CPP_PLUGIN_OBJS) - $(E) "[HOSTLD] Linking $@" - $(Q) mkdir -p `dirname $@` - $(Q) $(HOST_LDXX) $(HOST_LDFLAGS) $(CPP_PLUGIN_OBJS) $(HOST_LDLIBSXX) $(HOST_LDLIBS) $(HOST_LDLIBS_PROTOC) -o bins/$(CONFIG)/cpp_plugin - -objs/$(CONFIG)/src/compiler/cpp_plugin.o: -objs/$(CONFIG)/src/compiler/cpp_generator.o: -deps_cpp_plugin: $(CPP_PLUGIN_DEPS) +ALARM_LIST_TEST_SRC = \ + test/core/iomgr/alarm_list_test.c \ -ifneq ($(NO_DEPS),true) --include $(CPP_PLUGIN_DEPS) -endif +ALARM_LIST_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(ALARM_LIST_TEST_SRC)))) -clean_cpp_plugin: - $(E) "[CLEAN] Cleaning cpp_plugin files" - $(Q) $(RM) $(CPP_PLUGIN_OBJS) - $(Q) $(RM) $(CPP_PLUGIN_DEPS) - $(Q) $(RM) bins/$(CONFIG)/cpp_plugin +ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. -RUBY_PLUGIN_SRC = \ - src/compiler/ruby_plugin.cpp \ - src/compiler/ruby_generator.cpp \ +bins/$(CONFIG)/alarm_list_test: openssl_dep_error -RUBY_PLUGIN_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(RUBY_PLUGIN_SRC)))) -RUBY_PLUGIN_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(RUBY_PLUGIN_SRC)))) +else -bins/$(CONFIG)/ruby_plugin: $(RUBY_PLUGIN_OBJS) - $(E) "[HOSTLD] Linking $@" +bins/$(CONFIG)/alarm_list_test: $(ALARM_LIST_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a + $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(HOST_LDXX) $(HOST_LDFLAGS) $(RUBY_PLUGIN_OBJS) $(HOST_LDLIBSXX) $(HOST_LDLIBS) $(HOST_LDLIBS_PROTOC) -o bins/$(CONFIG)/ruby_plugin + $(Q) $(LD) $(LDFLAGS) $(ALARM_LIST_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/alarm_list_test -objs/$(CONFIG)/src/compiler/ruby_plugin.o: -objs/$(CONFIG)/src/compiler/ruby_generator.o: +endif + +objs/$(CONFIG)/test/core/iomgr/alarm_list_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_ruby_plugin: $(RUBY_PLUGIN_DEPS) +deps_alarm_list_test: $(ALARM_LIST_TEST_OBJS:.o=.dep) +ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(RUBY_PLUGIN_DEPS) +-include $(ALARM_LIST_TEST_OBJS:.o=.dep) +endif endif - -clean_ruby_plugin: - $(E) "[CLEAN] Cleaning ruby_plugin files" - $(Q) $(RM) $(RUBY_PLUGIN_OBJS) - $(Q) $(RM) $(RUBY_PLUGIN_DEPS) - $(Q) $(RM) bins/$(CONFIG)/ruby_plugin -GRPC_BYTE_BUFFER_READER_TEST_SRC = \ - test/core/surface/byte_buffer_reader_test.c \ +ALARM_TEST_SRC = \ + test/core/iomgr/alarm_test.c \ -GRPC_BYTE_BUFFER_READER_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_BYTE_BUFFER_READER_TEST_SRC)))) -GRPC_BYTE_BUFFER_READER_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(GRPC_BYTE_BUFFER_READER_TEST_SRC)))) +ALARM_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(ALARM_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/grpc_byte_buffer_reader_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/alarm_test: openssl_dep_error else -bins/$(CONFIG)/grpc_byte_buffer_reader_test: $(GRPC_BYTE_BUFFER_READER_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/alarm_test: $(ALARM_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(GRPC_BYTE_BUFFER_READER_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/grpc_byte_buffer_reader_test + $(Q) $(LD) $(LDFLAGS) $(ALARM_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/alarm_test endif -objs/$(CONFIG)/test/core/surface/byte_buffer_reader_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/iomgr/alarm_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_grpc_byte_buffer_reader_test: $(GRPC_BYTE_BUFFER_READER_TEST_DEPS) +deps_alarm_test: $(ALARM_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(GRPC_BYTE_BUFFER_READER_TEST_DEPS) +-include $(ALARM_TEST_OBJS:.o=.dep) endif endif -clean_grpc_byte_buffer_reader_test: - $(E) "[CLEAN] Cleaning grpc_byte_buffer_reader_test files" - $(Q) $(RM) $(GRPC_BYTE_BUFFER_READER_TEST_OBJS) - $(Q) $(RM) $(GRPC_BYTE_BUFFER_READER_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/grpc_byte_buffer_reader_test - -GPR_CANCELLABLE_TEST_SRC = \ - test/core/support/cancellable_test.c \ +ALPN_TEST_SRC = \ + test/core/transport/chttp2/alpn_test.c \ -GPR_CANCELLABLE_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GPR_CANCELLABLE_TEST_SRC)))) -GPR_CANCELLABLE_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(GPR_CANCELLABLE_TEST_SRC)))) +ALPN_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(ALPN_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/gpr_cancellable_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/alpn_test: openssl_dep_error else -bins/$(CONFIG)/gpr_cancellable_test: $(GPR_CANCELLABLE_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/alpn_test: $(ALPN_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(GPR_CANCELLABLE_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/gpr_cancellable_test + $(Q) $(LD) $(LDFLAGS) $(ALPN_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/alpn_test endif -objs/$(CONFIG)/test/core/support/cancellable_test.o: libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/transport/chttp2/alpn_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_gpr_cancellable_test: $(GPR_CANCELLABLE_TEST_DEPS) +deps_alpn_test: $(ALPN_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(GPR_CANCELLABLE_TEST_DEPS) +-include $(ALPN_TEST_OBJS:.o=.dep) endif endif -clean_gpr_cancellable_test: - $(E) "[CLEAN] Cleaning gpr_cancellable_test files" - $(Q) $(RM) $(GPR_CANCELLABLE_TEST_OBJS) - $(Q) $(RM) $(GPR_CANCELLABLE_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/gpr_cancellable_test - -GPR_LOG_TEST_SRC = \ - test/core/support/log_test.c \ +BIN_ENCODER_TEST_SRC = \ + test/core/transport/chttp2/bin_encoder_test.c \ -GPR_LOG_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GPR_LOG_TEST_SRC)))) -GPR_LOG_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(GPR_LOG_TEST_SRC)))) +BIN_ENCODER_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(BIN_ENCODER_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/gpr_log_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/bin_encoder_test: openssl_dep_error else -bins/$(CONFIG)/gpr_log_test: $(GPR_LOG_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/bin_encoder_test: $(BIN_ENCODER_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(GPR_LOG_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/gpr_log_test + $(Q) $(LD) $(LDFLAGS) $(BIN_ENCODER_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/bin_encoder_test endif -objs/$(CONFIG)/test/core/support/log_test.o: libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/transport/chttp2/bin_encoder_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_gpr_log_test: $(GPR_LOG_TEST_DEPS) +deps_bin_encoder_test: $(BIN_ENCODER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(GPR_LOG_TEST_DEPS) +-include $(BIN_ENCODER_TEST_OBJS:.o=.dep) endif endif -clean_gpr_log_test: - $(E) "[CLEAN] Cleaning gpr_log_test files" - $(Q) $(RM) $(GPR_LOG_TEST_OBJS) - $(Q) $(RM) $(GPR_LOG_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/gpr_log_test - -GPR_USEFUL_TEST_SRC = \ - test/core/support/useful_test.c \ +CENSUS_HASH_TABLE_TEST_SRC = \ + test/core/statistics/hash_table_test.c \ -GPR_USEFUL_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GPR_USEFUL_TEST_SRC)))) -GPR_USEFUL_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(GPR_USEFUL_TEST_SRC)))) +CENSUS_HASH_TABLE_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CENSUS_HASH_TABLE_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/gpr_useful_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/census_hash_table_test: openssl_dep_error else -bins/$(CONFIG)/gpr_useful_test: $(GPR_USEFUL_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/census_hash_table_test: $(CENSUS_HASH_TABLE_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(GPR_USEFUL_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/gpr_useful_test + $(Q) $(LD) $(LDFLAGS) $(CENSUS_HASH_TABLE_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/census_hash_table_test endif -objs/$(CONFIG)/test/core/support/useful_test.o: libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/statistics/hash_table_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_gpr_useful_test: $(GPR_USEFUL_TEST_DEPS) +deps_census_hash_table_test: $(CENSUS_HASH_TABLE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(GPR_USEFUL_TEST_DEPS) +-include $(CENSUS_HASH_TABLE_TEST_OBJS:.o=.dep) endif endif -clean_gpr_useful_test: - $(E) "[CLEAN] Cleaning gpr_useful_test files" - $(Q) $(RM) $(GPR_USEFUL_TEST_OBJS) - $(Q) $(RM) $(GPR_USEFUL_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/gpr_useful_test - -GPR_CMDLINE_TEST_SRC = \ - test/core/support/cmdline_test.c \ +CENSUS_STATISTICS_MULTIPLE_WRITERS_CIRCULAR_BUFFER_TEST_SRC = \ + test/core/statistics/multiple_writers_circular_buffer_test.c \ -GPR_CMDLINE_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GPR_CMDLINE_TEST_SRC)))) -GPR_CMDLINE_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(GPR_CMDLINE_TEST_SRC)))) +CENSUS_STATISTICS_MULTIPLE_WRITERS_CIRCULAR_BUFFER_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CENSUS_STATISTICS_MULTIPLE_WRITERS_CIRCULAR_BUFFER_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/gpr_cmdline_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/census_statistics_multiple_writers_circular_buffer_test: openssl_dep_error else -bins/$(CONFIG)/gpr_cmdline_test: $(GPR_CMDLINE_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/census_statistics_multiple_writers_circular_buffer_test: $(CENSUS_STATISTICS_MULTIPLE_WRITERS_CIRCULAR_BUFFER_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(GPR_CMDLINE_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/gpr_cmdline_test + $(Q) $(LD) $(LDFLAGS) $(CENSUS_STATISTICS_MULTIPLE_WRITERS_CIRCULAR_BUFFER_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/census_statistics_multiple_writers_circular_buffer_test endif -objs/$(CONFIG)/test/core/support/cmdline_test.o: libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/statistics/multiple_writers_circular_buffer_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_gpr_cmdline_test: $(GPR_CMDLINE_TEST_DEPS) +deps_census_statistics_multiple_writers_circular_buffer_test: $(CENSUS_STATISTICS_MULTIPLE_WRITERS_CIRCULAR_BUFFER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(GPR_CMDLINE_TEST_DEPS) +-include $(CENSUS_STATISTICS_MULTIPLE_WRITERS_CIRCULAR_BUFFER_TEST_OBJS:.o=.dep) endif endif -clean_gpr_cmdline_test: - $(E) "[CLEAN] Cleaning gpr_cmdline_test files" - $(Q) $(RM) $(GPR_CMDLINE_TEST_OBJS) - $(Q) $(RM) $(GPR_CMDLINE_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/gpr_cmdline_test - -GPR_HISTOGRAM_TEST_SRC = \ - test/core/support/histogram_test.c \ +CENSUS_STATISTICS_MULTIPLE_WRITERS_TEST_SRC = \ + test/core/statistics/multiple_writers_test.c \ -GPR_HISTOGRAM_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GPR_HISTOGRAM_TEST_SRC)))) -GPR_HISTOGRAM_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(GPR_HISTOGRAM_TEST_SRC)))) +CENSUS_STATISTICS_MULTIPLE_WRITERS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CENSUS_STATISTICS_MULTIPLE_WRITERS_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/gpr_histogram_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/census_statistics_multiple_writers_test: openssl_dep_error else -bins/$(CONFIG)/gpr_histogram_test: $(GPR_HISTOGRAM_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/census_statistics_multiple_writers_test: $(CENSUS_STATISTICS_MULTIPLE_WRITERS_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(GPR_HISTOGRAM_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/gpr_histogram_test + $(Q) $(LD) $(LDFLAGS) $(CENSUS_STATISTICS_MULTIPLE_WRITERS_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/census_statistics_multiple_writers_test endif -objs/$(CONFIG)/test/core/support/histogram_test.o: libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/statistics/multiple_writers_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_gpr_histogram_test: $(GPR_HISTOGRAM_TEST_DEPS) +deps_census_statistics_multiple_writers_test: $(CENSUS_STATISTICS_MULTIPLE_WRITERS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(GPR_HISTOGRAM_TEST_DEPS) +-include $(CENSUS_STATISTICS_MULTIPLE_WRITERS_TEST_OBJS:.o=.dep) endif endif -clean_gpr_histogram_test: - $(E) "[CLEAN] Cleaning gpr_histogram_test files" - $(Q) $(RM) $(GPR_HISTOGRAM_TEST_OBJS) - $(Q) $(RM) $(GPR_HISTOGRAM_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/gpr_histogram_test - -GPR_HOST_PORT_TEST_SRC = \ - test/core/support/host_port_test.c \ +CENSUS_STATISTICS_PERFORMANCE_TEST_SRC = \ + test/core/statistics/performance_test.c \ -GPR_HOST_PORT_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GPR_HOST_PORT_TEST_SRC)))) -GPR_HOST_PORT_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(GPR_HOST_PORT_TEST_SRC)))) +CENSUS_STATISTICS_PERFORMANCE_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CENSUS_STATISTICS_PERFORMANCE_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/gpr_host_port_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/census_statistics_performance_test: openssl_dep_error else -bins/$(CONFIG)/gpr_host_port_test: $(GPR_HOST_PORT_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/census_statistics_performance_test: $(CENSUS_STATISTICS_PERFORMANCE_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(GPR_HOST_PORT_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/gpr_host_port_test + $(Q) $(LD) $(LDFLAGS) $(CENSUS_STATISTICS_PERFORMANCE_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/census_statistics_performance_test endif -objs/$(CONFIG)/test/core/support/host_port_test.o: libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/statistics/performance_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_gpr_host_port_test: $(GPR_HOST_PORT_TEST_DEPS) +deps_census_statistics_performance_test: $(CENSUS_STATISTICS_PERFORMANCE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(GPR_HOST_PORT_TEST_DEPS) +-include $(CENSUS_STATISTICS_PERFORMANCE_TEST_OBJS:.o=.dep) endif endif -clean_gpr_host_port_test: - $(E) "[CLEAN] Cleaning gpr_host_port_test files" - $(Q) $(RM) $(GPR_HOST_PORT_TEST_OBJS) - $(Q) $(RM) $(GPR_HOST_PORT_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/gpr_host_port_test - -GPR_SLICE_BUFFER_TEST_SRC = \ - test/core/support/slice_buffer_test.c \ +CENSUS_STATISTICS_QUICK_TEST_SRC = \ + test/core/statistics/quick_test.c \ -GPR_SLICE_BUFFER_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GPR_SLICE_BUFFER_TEST_SRC)))) -GPR_SLICE_BUFFER_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(GPR_SLICE_BUFFER_TEST_SRC)))) +CENSUS_STATISTICS_QUICK_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CENSUS_STATISTICS_QUICK_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/gpr_slice_buffer_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/census_statistics_quick_test: openssl_dep_error else -bins/$(CONFIG)/gpr_slice_buffer_test: $(GPR_SLICE_BUFFER_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/census_statistics_quick_test: $(CENSUS_STATISTICS_QUICK_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(GPR_SLICE_BUFFER_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/gpr_slice_buffer_test + $(Q) $(LD) $(LDFLAGS) $(CENSUS_STATISTICS_QUICK_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/census_statistics_quick_test endif -objs/$(CONFIG)/test/core/support/slice_buffer_test.o: libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/statistics/quick_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_gpr_slice_buffer_test: $(GPR_SLICE_BUFFER_TEST_DEPS) +deps_census_statistics_quick_test: $(CENSUS_STATISTICS_QUICK_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(GPR_SLICE_BUFFER_TEST_DEPS) +-include $(CENSUS_STATISTICS_QUICK_TEST_OBJS:.o=.dep) endif endif -clean_gpr_slice_buffer_test: - $(E) "[CLEAN] Cleaning gpr_slice_buffer_test files" - $(Q) $(RM) $(GPR_SLICE_BUFFER_TEST_OBJS) - $(Q) $(RM) $(GPR_SLICE_BUFFER_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/gpr_slice_buffer_test - -GPR_SLICE_TEST_SRC = \ - test/core/support/slice_test.c \ +CENSUS_STATISTICS_SMALL_LOG_TEST_SRC = \ + test/core/statistics/small_log_test.c \ -GPR_SLICE_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GPR_SLICE_TEST_SRC)))) -GPR_SLICE_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(GPR_SLICE_TEST_SRC)))) +CENSUS_STATISTICS_SMALL_LOG_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CENSUS_STATISTICS_SMALL_LOG_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/gpr_slice_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/census_statistics_small_log_test: openssl_dep_error else -bins/$(CONFIG)/gpr_slice_test: $(GPR_SLICE_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/census_statistics_small_log_test: $(CENSUS_STATISTICS_SMALL_LOG_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(GPR_SLICE_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/gpr_slice_test + $(Q) $(LD) $(LDFLAGS) $(CENSUS_STATISTICS_SMALL_LOG_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/census_statistics_small_log_test endif -objs/$(CONFIG)/test/core/support/slice_test.o: libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/statistics/small_log_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_gpr_slice_test: $(GPR_SLICE_TEST_DEPS) +deps_census_statistics_small_log_test: $(CENSUS_STATISTICS_SMALL_LOG_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(GPR_SLICE_TEST_DEPS) +-include $(CENSUS_STATISTICS_SMALL_LOG_TEST_OBJS:.o=.dep) endif endif -clean_gpr_slice_test: - $(E) "[CLEAN] Cleaning gpr_slice_test files" - $(Q) $(RM) $(GPR_SLICE_TEST_OBJS) - $(Q) $(RM) $(GPR_SLICE_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/gpr_slice_test - -GPR_STRING_TEST_SRC = \ - test/core/support/string_test.c \ +CENSUS_STATS_STORE_TEST_SRC = \ + test/core/statistics/rpc_stats_test.c \ -GPR_STRING_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GPR_STRING_TEST_SRC)))) -GPR_STRING_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(GPR_STRING_TEST_SRC)))) +CENSUS_STATS_STORE_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CENSUS_STATS_STORE_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/gpr_string_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/census_stats_store_test: openssl_dep_error else -bins/$(CONFIG)/gpr_string_test: $(GPR_STRING_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/census_stats_store_test: $(CENSUS_STATS_STORE_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(GPR_STRING_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/gpr_string_test + $(Q) $(LD) $(LDFLAGS) $(CENSUS_STATS_STORE_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/census_stats_store_test endif -objs/$(CONFIG)/test/core/support/string_test.o: libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/statistics/rpc_stats_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_gpr_string_test: $(GPR_STRING_TEST_DEPS) +deps_census_stats_store_test: $(CENSUS_STATS_STORE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(GPR_STRING_TEST_DEPS) +-include $(CENSUS_STATS_STORE_TEST_OBJS:.o=.dep) endif endif -clean_gpr_string_test: - $(E) "[CLEAN] Cleaning gpr_string_test files" - $(Q) $(RM) $(GPR_STRING_TEST_OBJS) - $(Q) $(RM) $(GPR_STRING_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/gpr_string_test - -GPR_SYNC_TEST_SRC = \ - test/core/support/sync_test.c \ +CENSUS_STUB_TEST_SRC = \ + test/core/statistics/census_stub_test.c \ -GPR_SYNC_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GPR_SYNC_TEST_SRC)))) -GPR_SYNC_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(GPR_SYNC_TEST_SRC)))) +CENSUS_STUB_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CENSUS_STUB_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/gpr_sync_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/census_stub_test: openssl_dep_error else -bins/$(CONFIG)/gpr_sync_test: $(GPR_SYNC_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/census_stub_test: $(CENSUS_STUB_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(GPR_SYNC_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/gpr_sync_test + $(Q) $(LD) $(LDFLAGS) $(CENSUS_STUB_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/census_stub_test endif -objs/$(CONFIG)/test/core/support/sync_test.o: libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/statistics/census_stub_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_gpr_sync_test: $(GPR_SYNC_TEST_DEPS) +deps_census_stub_test: $(CENSUS_STUB_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(GPR_SYNC_TEST_DEPS) +-include $(CENSUS_STUB_TEST_OBJS:.o=.dep) endif endif -clean_gpr_sync_test: - $(E) "[CLEAN] Cleaning gpr_sync_test files" - $(Q) $(RM) $(GPR_SYNC_TEST_OBJS) - $(Q) $(RM) $(GPR_SYNC_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/gpr_sync_test - -GPR_THD_TEST_SRC = \ - test/core/support/thd_test.c \ +CENSUS_TRACE_STORE_TEST_SRC = \ + test/core/statistics/trace_test.c \ -GPR_THD_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GPR_THD_TEST_SRC)))) -GPR_THD_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(GPR_THD_TEST_SRC)))) +CENSUS_TRACE_STORE_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CENSUS_TRACE_STORE_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/gpr_thd_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/census_trace_store_test: openssl_dep_error else -bins/$(CONFIG)/gpr_thd_test: $(GPR_THD_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/census_trace_store_test: $(CENSUS_TRACE_STORE_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(GPR_THD_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/gpr_thd_test + $(Q) $(LD) $(LDFLAGS) $(CENSUS_TRACE_STORE_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/census_trace_store_test endif -objs/$(CONFIG)/test/core/support/thd_test.o: libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/statistics/trace_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_gpr_thd_test: $(GPR_THD_TEST_DEPS) +deps_census_trace_store_test: $(CENSUS_TRACE_STORE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(GPR_THD_TEST_DEPS) +-include $(CENSUS_TRACE_STORE_TEST_OBJS:.o=.dep) endif endif -clean_gpr_thd_test: - $(E) "[CLEAN] Cleaning gpr_thd_test files" - $(Q) $(RM) $(GPR_THD_TEST_OBJS) - $(Q) $(RM) $(GPR_THD_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/gpr_thd_test - -GPR_TIME_TEST_SRC = \ - test/core/support/time_test.c \ +CENSUS_WINDOW_STATS_TEST_SRC = \ + test/core/statistics/window_stats_test.c \ -GPR_TIME_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GPR_TIME_TEST_SRC)))) -GPR_TIME_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(GPR_TIME_TEST_SRC)))) +CENSUS_WINDOW_STATS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CENSUS_WINDOW_STATS_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/gpr_time_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/census_window_stats_test: openssl_dep_error else -bins/$(CONFIG)/gpr_time_test: $(GPR_TIME_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/census_window_stats_test: $(CENSUS_WINDOW_STATS_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(GPR_TIME_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/gpr_time_test + $(Q) $(LD) $(LDFLAGS) $(CENSUS_WINDOW_STATS_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/census_window_stats_test endif -objs/$(CONFIG)/test/core/support/time_test.o: libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/statistics/window_stats_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_gpr_time_test: $(GPR_TIME_TEST_DEPS) +deps_census_window_stats_test: $(CENSUS_WINDOW_STATS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(GPR_TIME_TEST_DEPS) +-include $(CENSUS_WINDOW_STATS_TEST_OBJS:.o=.dep) endif endif -clean_gpr_time_test: - $(E) "[CLEAN] Cleaning gpr_time_test files" - $(Q) $(RM) $(GPR_TIME_TEST_OBJS) - $(Q) $(RM) $(GPR_TIME_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/gpr_time_test - -MURMUR_HASH_TEST_SRC = \ - test/core/support/murmur_hash_test.c \ +CHTTP2_STATUS_CONVERSION_TEST_SRC = \ + test/core/transport/chttp2/status_conversion_test.c \ -MURMUR_HASH_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(MURMUR_HASH_TEST_SRC)))) -MURMUR_HASH_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(MURMUR_HASH_TEST_SRC)))) +CHTTP2_STATUS_CONVERSION_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_STATUS_CONVERSION_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/murmur_hash_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/chttp2_status_conversion_test: openssl_dep_error else -bins/$(CONFIG)/murmur_hash_test: $(MURMUR_HASH_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/chttp2_status_conversion_test: $(CHTTP2_STATUS_CONVERSION_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(MURMUR_HASH_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/murmur_hash_test + $(Q) $(LD) $(LDFLAGS) $(CHTTP2_STATUS_CONVERSION_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/chttp2_status_conversion_test endif -objs/$(CONFIG)/test/core/support/murmur_hash_test.o: libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/transport/chttp2/status_conversion_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_murmur_hash_test: $(MURMUR_HASH_TEST_DEPS) +deps_chttp2_status_conversion_test: $(CHTTP2_STATUS_CONVERSION_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(MURMUR_HASH_TEST_DEPS) +-include $(CHTTP2_STATUS_CONVERSION_TEST_OBJS:.o=.dep) endif endif -clean_murmur_hash_test: - $(E) "[CLEAN] Cleaning murmur_hash_test files" - $(Q) $(RM) $(MURMUR_HASH_TEST_OBJS) - $(Q) $(RM) $(MURMUR_HASH_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/murmur_hash_test - -GRPC_STREAM_OP_TEST_SRC = \ - test/core/transport/stream_op_test.c \ +CHTTP2_STREAM_ENCODER_TEST_SRC = \ + test/core/transport/chttp2/stream_encoder_test.c \ -GRPC_STREAM_OP_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_STREAM_OP_TEST_SRC)))) -GRPC_STREAM_OP_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(GRPC_STREAM_OP_TEST_SRC)))) +CHTTP2_STREAM_ENCODER_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_STREAM_ENCODER_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/grpc_stream_op_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/chttp2_stream_encoder_test: openssl_dep_error else -bins/$(CONFIG)/grpc_stream_op_test: $(GRPC_STREAM_OP_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/chttp2_stream_encoder_test: $(CHTTP2_STREAM_ENCODER_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(GRPC_STREAM_OP_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/grpc_stream_op_test + $(Q) $(LD) $(LDFLAGS) $(CHTTP2_STREAM_ENCODER_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/chttp2_stream_encoder_test endif -objs/$(CONFIG)/test/core/transport/stream_op_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/transport/chttp2/stream_encoder_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_grpc_stream_op_test: $(GRPC_STREAM_OP_TEST_DEPS) +deps_chttp2_stream_encoder_test: $(CHTTP2_STREAM_ENCODER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(GRPC_STREAM_OP_TEST_DEPS) +-include $(CHTTP2_STREAM_ENCODER_TEST_OBJS:.o=.dep) endif endif -clean_grpc_stream_op_test: - $(E) "[CLEAN] Cleaning grpc_stream_op_test files" - $(Q) $(RM) $(GRPC_STREAM_OP_TEST_OBJS) - $(Q) $(RM) $(GRPC_STREAM_OP_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/grpc_stream_op_test - -ALPN_TEST_SRC = \ - test/core/transport/chttp2/alpn_test.c \ +CHTTP2_STREAM_MAP_TEST_SRC = \ + test/core/transport/chttp2/stream_map_test.c \ -ALPN_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(ALPN_TEST_SRC)))) -ALPN_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(ALPN_TEST_SRC)))) +CHTTP2_STREAM_MAP_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_STREAM_MAP_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/alpn_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/chttp2_stream_map_test: openssl_dep_error else -bins/$(CONFIG)/alpn_test: $(ALPN_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/chttp2_stream_map_test: $(CHTTP2_STREAM_MAP_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(ALPN_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/alpn_test + $(Q) $(LD) $(LDFLAGS) $(CHTTP2_STREAM_MAP_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/chttp2_stream_map_test endif -objs/$(CONFIG)/test/core/transport/chttp2/alpn_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/transport/chttp2/stream_map_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_alpn_test: $(ALPN_TEST_DEPS) +deps_chttp2_stream_map_test: $(CHTTP2_STREAM_MAP_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(ALPN_TEST_DEPS) +-include $(CHTTP2_STREAM_MAP_TEST_OBJS:.o=.dep) endif endif -clean_alpn_test: - $(E) "[CLEAN] Cleaning alpn_test files" - $(Q) $(RM) $(ALPN_TEST_OBJS) - $(Q) $(RM) $(ALPN_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/alpn_test - -TIME_AVERAGED_STATS_TEST_SRC = \ - test/core/iomgr/time_averaged_stats_test.c \ +CHTTP2_TRANSPORT_END2END_TEST_SRC = \ + test/core/transport/chttp2_transport_end2end_test.c \ -TIME_AVERAGED_STATS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(TIME_AVERAGED_STATS_TEST_SRC)))) -TIME_AVERAGED_STATS_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(TIME_AVERAGED_STATS_TEST_SRC)))) +CHTTP2_TRANSPORT_END2END_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_TRANSPORT_END2END_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/time_averaged_stats_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/chttp2_transport_end2end_test: openssl_dep_error else -bins/$(CONFIG)/time_averaged_stats_test: $(TIME_AVERAGED_STATS_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/chttp2_transport_end2end_test: $(CHTTP2_TRANSPORT_END2END_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(TIME_AVERAGED_STATS_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/time_averaged_stats_test + $(Q) $(LD) $(LDFLAGS) $(CHTTP2_TRANSPORT_END2END_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/chttp2_transport_end2end_test endif -objs/$(CONFIG)/test/core/iomgr/time_averaged_stats_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/transport/chttp2_transport_end2end_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_time_averaged_stats_test: $(TIME_AVERAGED_STATS_TEST_DEPS) +deps_chttp2_transport_end2end_test: $(CHTTP2_TRANSPORT_END2END_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(TIME_AVERAGED_STATS_TEST_DEPS) +-include $(CHTTP2_TRANSPORT_END2END_TEST_OBJS:.o=.dep) endif endif -clean_time_averaged_stats_test: - $(E) "[CLEAN] Cleaning time_averaged_stats_test files" - $(Q) $(RM) $(TIME_AVERAGED_STATS_TEST_OBJS) - $(Q) $(RM) $(TIME_AVERAGED_STATS_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/time_averaged_stats_test - -CHTTP2_STREAM_ENCODER_TEST_SRC = \ - test/core/transport/chttp2/stream_encoder_test.c \ +DUALSTACK_SOCKET_TEST_SRC = \ + test/core/end2end/dualstack_socket_test.c \ -CHTTP2_STREAM_ENCODER_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_STREAM_ENCODER_TEST_SRC)))) -CHTTP2_STREAM_ENCODER_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_STREAM_ENCODER_TEST_SRC)))) +DUALSTACK_SOCKET_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(DUALSTACK_SOCKET_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/chttp2_stream_encoder_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/dualstack_socket_test: openssl_dep_error else -bins/$(CONFIG)/chttp2_stream_encoder_test: $(CHTTP2_STREAM_ENCODER_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/dualstack_socket_test: $(DUALSTACK_SOCKET_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(CHTTP2_STREAM_ENCODER_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/chttp2_stream_encoder_test + $(Q) $(LD) $(LDFLAGS) $(DUALSTACK_SOCKET_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/dualstack_socket_test endif -objs/$(CONFIG)/test/core/transport/chttp2/stream_encoder_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/end2end/dualstack_socket_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_chttp2_stream_encoder_test: $(CHTTP2_STREAM_ENCODER_TEST_DEPS) +deps_dualstack_socket_test: $(DUALSTACK_SOCKET_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_STREAM_ENCODER_TEST_DEPS) +-include $(DUALSTACK_SOCKET_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_stream_encoder_test: - $(E) "[CLEAN] Cleaning chttp2_stream_encoder_test files" - $(Q) $(RM) $(CHTTP2_STREAM_ENCODER_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_STREAM_ENCODER_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_stream_encoder_test - -HPACK_TABLE_TEST_SRC = \ - test/core/transport/chttp2/hpack_table_test.c \ +ECHO_CLIENT_SRC = \ + test/core/echo/client.c \ -HPACK_TABLE_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(HPACK_TABLE_TEST_SRC)))) -HPACK_TABLE_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(HPACK_TABLE_TEST_SRC)))) +ECHO_CLIENT_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(ECHO_CLIENT_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/hpack_table_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/echo_client: openssl_dep_error else -bins/$(CONFIG)/hpack_table_test: $(HPACK_TABLE_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/echo_client: $(ECHO_CLIENT_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(HPACK_TABLE_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/hpack_table_test + $(Q) $(LD) $(LDFLAGS) $(ECHO_CLIENT_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/echo_client endif -objs/$(CONFIG)/test/core/transport/chttp2/hpack_table_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/echo/client.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_hpack_table_test: $(HPACK_TABLE_TEST_DEPS) +deps_echo_client: $(ECHO_CLIENT_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(HPACK_TABLE_TEST_DEPS) +-include $(ECHO_CLIENT_OBJS:.o=.dep) endif endif -clean_hpack_table_test: - $(E) "[CLEAN] Cleaning hpack_table_test files" - $(Q) $(RM) $(HPACK_TABLE_TEST_OBJS) - $(Q) $(RM) $(HPACK_TABLE_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/hpack_table_test - -CHTTP2_STREAM_MAP_TEST_SRC = \ - test/core/transport/chttp2/stream_map_test.c \ +ECHO_SERVER_SRC = \ + test/core/echo/server.c \ -CHTTP2_STREAM_MAP_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_STREAM_MAP_TEST_SRC)))) -CHTTP2_STREAM_MAP_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_STREAM_MAP_TEST_SRC)))) +ECHO_SERVER_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(ECHO_SERVER_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/chttp2_stream_map_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/echo_server: openssl_dep_error else -bins/$(CONFIG)/chttp2_stream_map_test: $(CHTTP2_STREAM_MAP_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/echo_server: $(ECHO_SERVER_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(CHTTP2_STREAM_MAP_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/chttp2_stream_map_test + $(Q) $(LD) $(LDFLAGS) $(ECHO_SERVER_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/echo_server endif -objs/$(CONFIG)/test/core/transport/chttp2/stream_map_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/echo/server.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_chttp2_stream_map_test: $(CHTTP2_STREAM_MAP_TEST_DEPS) +deps_echo_server: $(ECHO_SERVER_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_STREAM_MAP_TEST_DEPS) +-include $(ECHO_SERVER_OBJS:.o=.dep) endif endif -clean_chttp2_stream_map_test: - $(E) "[CLEAN] Cleaning chttp2_stream_map_test files" - $(Q) $(RM) $(CHTTP2_STREAM_MAP_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_STREAM_MAP_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_stream_map_test - -HPACK_PARSER_TEST_SRC = \ - test/core/transport/chttp2/hpack_parser_test.c \ +ECHO_TEST_SRC = \ + test/core/echo/echo_test.c \ -HPACK_PARSER_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(HPACK_PARSER_TEST_SRC)))) -HPACK_PARSER_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(HPACK_PARSER_TEST_SRC)))) +ECHO_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(ECHO_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/hpack_parser_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/echo_test: openssl_dep_error else -bins/$(CONFIG)/hpack_parser_test: $(HPACK_PARSER_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/echo_test: $(ECHO_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(HPACK_PARSER_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/hpack_parser_test + $(Q) $(LD) $(LDFLAGS) $(ECHO_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/echo_test endif -objs/$(CONFIG)/test/core/transport/chttp2/hpack_parser_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/echo/echo_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_hpack_parser_test: $(HPACK_PARSER_TEST_DEPS) +deps_echo_test: $(ECHO_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(HPACK_PARSER_TEST_DEPS) +-include $(ECHO_TEST_OBJS:.o=.dep) endif endif -clean_hpack_parser_test: - $(E) "[CLEAN] Cleaning hpack_parser_test files" - $(Q) $(RM) $(HPACK_PARSER_TEST_OBJS) - $(Q) $(RM) $(HPACK_PARSER_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/hpack_parser_test - -TRANSPORT_METADATA_TEST_SRC = \ - test/core/transport/metadata_test.c \ +FD_POSIX_TEST_SRC = \ + test/core/iomgr/fd_posix_test.c \ -TRANSPORT_METADATA_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(TRANSPORT_METADATA_TEST_SRC)))) -TRANSPORT_METADATA_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(TRANSPORT_METADATA_TEST_SRC)))) +FD_POSIX_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(FD_POSIX_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/transport_metadata_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/fd_posix_test: openssl_dep_error else -bins/$(CONFIG)/transport_metadata_test: $(TRANSPORT_METADATA_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/fd_posix_test: $(FD_POSIX_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(TRANSPORT_METADATA_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/transport_metadata_test + $(Q) $(LD) $(LDFLAGS) $(FD_POSIX_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/fd_posix_test endif -objs/$(CONFIG)/test/core/transport/metadata_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/iomgr/fd_posix_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_transport_metadata_test: $(TRANSPORT_METADATA_TEST_DEPS) +deps_fd_posix_test: $(FD_POSIX_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(TRANSPORT_METADATA_TEST_DEPS) +-include $(FD_POSIX_TEST_OBJS:.o=.dep) endif endif -clean_transport_metadata_test: - $(E) "[CLEAN] Cleaning transport_metadata_test files" - $(Q) $(RM) $(TRANSPORT_METADATA_TEST_OBJS) - $(Q) $(RM) $(TRANSPORT_METADATA_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/transport_metadata_test - -CHTTP2_STATUS_CONVERSION_TEST_SRC = \ - test/core/transport/chttp2/status_conversion_test.c \ +FLING_CLIENT_SRC = \ + test/core/fling/client.c \ -CHTTP2_STATUS_CONVERSION_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_STATUS_CONVERSION_TEST_SRC)))) -CHTTP2_STATUS_CONVERSION_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_STATUS_CONVERSION_TEST_SRC)))) +FLING_CLIENT_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(FLING_CLIENT_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/chttp2_status_conversion_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/fling_client: openssl_dep_error else -bins/$(CONFIG)/chttp2_status_conversion_test: $(CHTTP2_STATUS_CONVERSION_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/fling_client: $(FLING_CLIENT_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(CHTTP2_STATUS_CONVERSION_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/chttp2_status_conversion_test + $(Q) $(LD) $(LDFLAGS) $(FLING_CLIENT_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/fling_client endif -objs/$(CONFIG)/test/core/transport/chttp2/status_conversion_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/fling/client.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_chttp2_status_conversion_test: $(CHTTP2_STATUS_CONVERSION_TEST_DEPS) +deps_fling_client: $(FLING_CLIENT_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_STATUS_CONVERSION_TEST_DEPS) +-include $(FLING_CLIENT_OBJS:.o=.dep) endif endif -clean_chttp2_status_conversion_test: - $(E) "[CLEAN] Cleaning chttp2_status_conversion_test files" - $(Q) $(RM) $(CHTTP2_STATUS_CONVERSION_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_STATUS_CONVERSION_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_status_conversion_test - -CHTTP2_TRANSPORT_END2END_TEST_SRC = \ - test/core/transport/chttp2_transport_end2end_test.c \ +FLING_SERVER_SRC = \ + test/core/fling/server.c \ -CHTTP2_TRANSPORT_END2END_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_TRANSPORT_END2END_TEST_SRC)))) -CHTTP2_TRANSPORT_END2END_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_TRANSPORT_END2END_TEST_SRC)))) +FLING_SERVER_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(FLING_SERVER_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/chttp2_transport_end2end_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/fling_server: openssl_dep_error else -bins/$(CONFIG)/chttp2_transport_end2end_test: $(CHTTP2_TRANSPORT_END2END_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/fling_server: $(FLING_SERVER_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(CHTTP2_TRANSPORT_END2END_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/chttp2_transport_end2end_test + $(Q) $(LD) $(LDFLAGS) $(FLING_SERVER_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/fling_server endif -objs/$(CONFIG)/test/core/transport/chttp2_transport_end2end_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/fling/server.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_chttp2_transport_end2end_test: $(CHTTP2_TRANSPORT_END2END_TEST_DEPS) +deps_fling_server: $(FLING_SERVER_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_TRANSPORT_END2END_TEST_DEPS) +-include $(FLING_SERVER_OBJS:.o=.dep) endif endif -clean_chttp2_transport_end2end_test: - $(E) "[CLEAN] Cleaning chttp2_transport_end2end_test files" - $(Q) $(RM) $(CHTTP2_TRANSPORT_END2END_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_TRANSPORT_END2END_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_transport_end2end_test - -TCP_POSIX_TEST_SRC = \ - test/core/iomgr/tcp_posix_test.c \ +FLING_STREAM_TEST_SRC = \ + test/core/fling/fling_stream_test.c \ -TCP_POSIX_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(TCP_POSIX_TEST_SRC)))) -TCP_POSIX_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(TCP_POSIX_TEST_SRC)))) +FLING_STREAM_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(FLING_STREAM_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/tcp_posix_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/fling_stream_test: openssl_dep_error else -bins/$(CONFIG)/tcp_posix_test: $(TCP_POSIX_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/fling_stream_test: $(FLING_STREAM_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(TCP_POSIX_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/tcp_posix_test + $(Q) $(LD) $(LDFLAGS) $(FLING_STREAM_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/fling_stream_test endif -objs/$(CONFIG)/test/core/iomgr/tcp_posix_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/fling/fling_stream_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_tcp_posix_test: $(TCP_POSIX_TEST_DEPS) +deps_fling_stream_test: $(FLING_STREAM_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(TCP_POSIX_TEST_DEPS) +-include $(FLING_STREAM_TEST_OBJS:.o=.dep) endif endif -clean_tcp_posix_test: - $(E) "[CLEAN] Cleaning tcp_posix_test files" - $(Q) $(RM) $(TCP_POSIX_TEST_OBJS) - $(Q) $(RM) $(TCP_POSIX_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/tcp_posix_test - -DUALSTACK_SOCKET_TEST_SRC = \ - test/core/end2end/dualstack_socket_test.c \ +FLING_TEST_SRC = \ + test/core/fling/fling_test.c \ -DUALSTACK_SOCKET_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(DUALSTACK_SOCKET_TEST_SRC)))) -DUALSTACK_SOCKET_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(DUALSTACK_SOCKET_TEST_SRC)))) +FLING_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(FLING_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/dualstack_socket_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/fling_test: openssl_dep_error else -bins/$(CONFIG)/dualstack_socket_test: $(DUALSTACK_SOCKET_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/fling_test: $(FLING_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(DUALSTACK_SOCKET_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/dualstack_socket_test + $(Q) $(LD) $(LDFLAGS) $(FLING_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/fling_test endif -objs/$(CONFIG)/test/core/end2end/dualstack_socket_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/fling/fling_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_dualstack_socket_test: $(DUALSTACK_SOCKET_TEST_DEPS) +deps_fling_test: $(FLING_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(DUALSTACK_SOCKET_TEST_DEPS) +-include $(FLING_TEST_OBJS:.o=.dep) endif endif -clean_dualstack_socket_test: - $(E) "[CLEAN] Cleaning dualstack_socket_test files" - $(Q) $(RM) $(DUALSTACK_SOCKET_TEST_OBJS) - $(Q) $(RM) $(DUALSTACK_SOCKET_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/dualstack_socket_test - -NO_SERVER_TEST_SRC = \ - test/core/end2end/no_server_test.c \ +GEN_HPACK_TABLES_SRC = \ + src/core/transport/chttp2/gen_hpack_tables.c \ -NO_SERVER_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(NO_SERVER_TEST_SRC)))) -NO_SERVER_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(NO_SERVER_TEST_SRC)))) +GEN_HPACK_TABLES_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GEN_HPACK_TABLES_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/no_server_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/gen_hpack_tables: openssl_dep_error else -bins/$(CONFIG)/no_server_test: $(NO_SERVER_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/gen_hpack_tables: $(GEN_HPACK_TABLES_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgpr.a libs/$(CONFIG)/libgrpc.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(NO_SERVER_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/no_server_test + $(Q) $(LD) $(LDFLAGS) $(GEN_HPACK_TABLES_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgpr.a libs/$(CONFIG)/libgrpc.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/gen_hpack_tables endif -objs/$(CONFIG)/test/core/end2end/no_server_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/src/core/transport/chttp2/gen_hpack_tables.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgpr.a libs/$(CONFIG)/libgrpc.a -deps_no_server_test: $(NO_SERVER_TEST_DEPS) +deps_gen_hpack_tables: $(GEN_HPACK_TABLES_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(NO_SERVER_TEST_DEPS) +-include $(GEN_HPACK_TABLES_OBJS:.o=.dep) endif endif -clean_no_server_test: - $(E) "[CLEAN] Cleaning no_server_test files" - $(Q) $(RM) $(NO_SERVER_TEST_OBJS) - $(Q) $(RM) $(NO_SERVER_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/no_server_test - -RESOLVE_ADDRESS_TEST_SRC = \ - test/core/iomgr/resolve_address_test.c \ +GPR_CANCELLABLE_TEST_SRC = \ + test/core/support/cancellable_test.c \ -RESOLVE_ADDRESS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(RESOLVE_ADDRESS_TEST_SRC)))) -RESOLVE_ADDRESS_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(RESOLVE_ADDRESS_TEST_SRC)))) +GPR_CANCELLABLE_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GPR_CANCELLABLE_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/resolve_address_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/gpr_cancellable_test: openssl_dep_error else -bins/$(CONFIG)/resolve_address_test: $(RESOLVE_ADDRESS_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/gpr_cancellable_test: $(GPR_CANCELLABLE_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(RESOLVE_ADDRESS_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/resolve_address_test + $(Q) $(LD) $(LDFLAGS) $(GPR_CANCELLABLE_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/gpr_cancellable_test endif -objs/$(CONFIG)/test/core/iomgr/resolve_address_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/support/cancellable_test.o: libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_resolve_address_test: $(RESOLVE_ADDRESS_TEST_DEPS) +deps_gpr_cancellable_test: $(GPR_CANCELLABLE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(RESOLVE_ADDRESS_TEST_DEPS) +-include $(GPR_CANCELLABLE_TEST_OBJS:.o=.dep) endif endif -clean_resolve_address_test: - $(E) "[CLEAN] Cleaning resolve_address_test files" - $(Q) $(RM) $(RESOLVE_ADDRESS_TEST_OBJS) - $(Q) $(RM) $(RESOLVE_ADDRESS_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/resolve_address_test - -SOCKADDR_UTILS_TEST_SRC = \ - test/core/iomgr/sockaddr_utils_test.c \ +GPR_CMDLINE_TEST_SRC = \ + test/core/support/cmdline_test.c \ -SOCKADDR_UTILS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(SOCKADDR_UTILS_TEST_SRC)))) -SOCKADDR_UTILS_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(SOCKADDR_UTILS_TEST_SRC)))) +GPR_CMDLINE_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GPR_CMDLINE_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/sockaddr_utils_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/gpr_cmdline_test: openssl_dep_error else -bins/$(CONFIG)/sockaddr_utils_test: $(SOCKADDR_UTILS_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/gpr_cmdline_test: $(GPR_CMDLINE_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(SOCKADDR_UTILS_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/sockaddr_utils_test + $(Q) $(LD) $(LDFLAGS) $(GPR_CMDLINE_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/gpr_cmdline_test endif -objs/$(CONFIG)/test/core/iomgr/sockaddr_utils_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/support/cmdline_test.o: libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_sockaddr_utils_test: $(SOCKADDR_UTILS_TEST_DEPS) +deps_gpr_cmdline_test: $(GPR_CMDLINE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(SOCKADDR_UTILS_TEST_DEPS) +-include $(GPR_CMDLINE_TEST_OBJS:.o=.dep) endif endif -clean_sockaddr_utils_test: - $(E) "[CLEAN] Cleaning sockaddr_utils_test files" - $(Q) $(RM) $(SOCKADDR_UTILS_TEST_OBJS) - $(Q) $(RM) $(SOCKADDR_UTILS_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/sockaddr_utils_test - -TCP_SERVER_POSIX_TEST_SRC = \ - test/core/iomgr/tcp_server_posix_test.c \ +GPR_HISTOGRAM_TEST_SRC = \ + test/core/support/histogram_test.c \ -TCP_SERVER_POSIX_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(TCP_SERVER_POSIX_TEST_SRC)))) -TCP_SERVER_POSIX_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(TCP_SERVER_POSIX_TEST_SRC)))) +GPR_HISTOGRAM_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GPR_HISTOGRAM_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/tcp_server_posix_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/gpr_histogram_test: openssl_dep_error else -bins/$(CONFIG)/tcp_server_posix_test: $(TCP_SERVER_POSIX_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/gpr_histogram_test: $(GPR_HISTOGRAM_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(TCP_SERVER_POSIX_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/tcp_server_posix_test + $(Q) $(LD) $(LDFLAGS) $(GPR_HISTOGRAM_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/gpr_histogram_test endif -objs/$(CONFIG)/test/core/iomgr/tcp_server_posix_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/support/histogram_test.o: libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_tcp_server_posix_test: $(TCP_SERVER_POSIX_TEST_DEPS) +deps_gpr_histogram_test: $(GPR_HISTOGRAM_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(TCP_SERVER_POSIX_TEST_DEPS) +-include $(GPR_HISTOGRAM_TEST_OBJS:.o=.dep) endif endif -clean_tcp_server_posix_test: - $(E) "[CLEAN] Cleaning tcp_server_posix_test files" - $(Q) $(RM) $(TCP_SERVER_POSIX_TEST_OBJS) - $(Q) $(RM) $(TCP_SERVER_POSIX_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/tcp_server_posix_test - -TCP_CLIENT_POSIX_TEST_SRC = \ - test/core/iomgr/tcp_client_posix_test.c \ +GPR_HOST_PORT_TEST_SRC = \ + test/core/support/host_port_test.c \ -TCP_CLIENT_POSIX_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(TCP_CLIENT_POSIX_TEST_SRC)))) -TCP_CLIENT_POSIX_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(TCP_CLIENT_POSIX_TEST_SRC)))) +GPR_HOST_PORT_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GPR_HOST_PORT_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/tcp_client_posix_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/gpr_host_port_test: openssl_dep_error else -bins/$(CONFIG)/tcp_client_posix_test: $(TCP_CLIENT_POSIX_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/gpr_host_port_test: $(GPR_HOST_PORT_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(TCP_CLIENT_POSIX_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/tcp_client_posix_test + $(Q) $(LD) $(LDFLAGS) $(GPR_HOST_PORT_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/gpr_host_port_test endif -objs/$(CONFIG)/test/core/iomgr/tcp_client_posix_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/support/host_port_test.o: libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_tcp_client_posix_test: $(TCP_CLIENT_POSIX_TEST_DEPS) +deps_gpr_host_port_test: $(GPR_HOST_PORT_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(TCP_CLIENT_POSIX_TEST_DEPS) +-include $(GPR_HOST_PORT_TEST_OBJS:.o=.dep) endif endif -clean_tcp_client_posix_test: - $(E) "[CLEAN] Cleaning tcp_client_posix_test files" - $(Q) $(RM) $(TCP_CLIENT_POSIX_TEST_OBJS) - $(Q) $(RM) $(TCP_CLIENT_POSIX_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/tcp_client_posix_test - -GRPC_CHANNEL_STACK_TEST_SRC = \ - test/core/channel/channel_stack_test.c \ +GPR_LOG_TEST_SRC = \ + test/core/support/log_test.c \ -GRPC_CHANNEL_STACK_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_CHANNEL_STACK_TEST_SRC)))) -GRPC_CHANNEL_STACK_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(GRPC_CHANNEL_STACK_TEST_SRC)))) +GPR_LOG_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GPR_LOG_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/grpc_channel_stack_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/gpr_log_test: openssl_dep_error else -bins/$(CONFIG)/grpc_channel_stack_test: $(GRPC_CHANNEL_STACK_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/gpr_log_test: $(GPR_LOG_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(GRPC_CHANNEL_STACK_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/grpc_channel_stack_test + $(Q) $(LD) $(LDFLAGS) $(GPR_LOG_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/gpr_log_test endif -objs/$(CONFIG)/test/core/channel/channel_stack_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/support/log_test.o: libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_grpc_channel_stack_test: $(GRPC_CHANNEL_STACK_TEST_DEPS) +deps_gpr_log_test: $(GPR_LOG_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(GRPC_CHANNEL_STACK_TEST_DEPS) +-include $(GPR_LOG_TEST_OBJS:.o=.dep) endif endif -clean_grpc_channel_stack_test: - $(E) "[CLEAN] Cleaning grpc_channel_stack_test files" - $(Q) $(RM) $(GRPC_CHANNEL_STACK_TEST_OBJS) - $(Q) $(RM) $(GRPC_CHANNEL_STACK_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/grpc_channel_stack_test - -METADATA_BUFFER_TEST_SRC = \ - test/core/channel/metadata_buffer_test.c \ +GPR_SLICE_BUFFER_TEST_SRC = \ + test/core/support/slice_buffer_test.c \ -METADATA_BUFFER_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(METADATA_BUFFER_TEST_SRC)))) -METADATA_BUFFER_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(METADATA_BUFFER_TEST_SRC)))) +GPR_SLICE_BUFFER_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GPR_SLICE_BUFFER_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/metadata_buffer_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/gpr_slice_buffer_test: openssl_dep_error else -bins/$(CONFIG)/metadata_buffer_test: $(METADATA_BUFFER_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/gpr_slice_buffer_test: $(GPR_SLICE_BUFFER_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(METADATA_BUFFER_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/metadata_buffer_test + $(Q) $(LD) $(LDFLAGS) $(GPR_SLICE_BUFFER_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/gpr_slice_buffer_test endif -objs/$(CONFIG)/test/core/channel/metadata_buffer_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/support/slice_buffer_test.o: libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_metadata_buffer_test: $(METADATA_BUFFER_TEST_DEPS) +deps_gpr_slice_buffer_test: $(GPR_SLICE_BUFFER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(METADATA_BUFFER_TEST_DEPS) +-include $(GPR_SLICE_BUFFER_TEST_OBJS:.o=.dep) endif endif -clean_metadata_buffer_test: - $(E) "[CLEAN] Cleaning metadata_buffer_test files" - $(Q) $(RM) $(METADATA_BUFFER_TEST_OBJS) - $(Q) $(RM) $(METADATA_BUFFER_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/metadata_buffer_test - -GRPC_COMPLETION_QUEUE_TEST_SRC = \ - test/core/surface/completion_queue_test.c \ +GPR_SLICE_TEST_SRC = \ + test/core/support/slice_test.c \ -GRPC_COMPLETION_QUEUE_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_COMPLETION_QUEUE_TEST_SRC)))) -GRPC_COMPLETION_QUEUE_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(GRPC_COMPLETION_QUEUE_TEST_SRC)))) +GPR_SLICE_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GPR_SLICE_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/grpc_completion_queue_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/gpr_slice_test: openssl_dep_error else -bins/$(CONFIG)/grpc_completion_queue_test: $(GRPC_COMPLETION_QUEUE_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/gpr_slice_test: $(GPR_SLICE_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(GRPC_COMPLETION_QUEUE_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/grpc_completion_queue_test + $(Q) $(LD) $(LDFLAGS) $(GPR_SLICE_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/gpr_slice_test endif -objs/$(CONFIG)/test/core/surface/completion_queue_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/support/slice_test.o: libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_grpc_completion_queue_test: $(GRPC_COMPLETION_QUEUE_TEST_DEPS) +deps_gpr_slice_test: $(GPR_SLICE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(GRPC_COMPLETION_QUEUE_TEST_DEPS) +-include $(GPR_SLICE_TEST_OBJS:.o=.dep) endif endif -clean_grpc_completion_queue_test: - $(E) "[CLEAN] Cleaning grpc_completion_queue_test files" - $(Q) $(RM) $(GRPC_COMPLETION_QUEUE_TEST_OBJS) - $(Q) $(RM) $(GRPC_COMPLETION_QUEUE_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/grpc_completion_queue_test - -GRPC_COMPLETION_QUEUE_BENCHMARK_SRC = \ - test/core/surface/completion_queue_benchmark.c \ +GPR_STRING_TEST_SRC = \ + test/core/support/string_test.c \ -GRPC_COMPLETION_QUEUE_BENCHMARK_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_COMPLETION_QUEUE_BENCHMARK_SRC)))) -GRPC_COMPLETION_QUEUE_BENCHMARK_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(GRPC_COMPLETION_QUEUE_BENCHMARK_SRC)))) +GPR_STRING_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GPR_STRING_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/grpc_completion_queue_benchmark: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/gpr_string_test: openssl_dep_error else -bins/$(CONFIG)/grpc_completion_queue_benchmark: $(GRPC_COMPLETION_QUEUE_BENCHMARK_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/gpr_string_test: $(GPR_STRING_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(GRPC_COMPLETION_QUEUE_BENCHMARK_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/grpc_completion_queue_benchmark + $(Q) $(LD) $(LDFLAGS) $(GPR_STRING_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/gpr_string_test endif -objs/$(CONFIG)/test/core/surface/completion_queue_benchmark.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/support/string_test.o: libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_grpc_completion_queue_benchmark: $(GRPC_COMPLETION_QUEUE_BENCHMARK_DEPS) +deps_gpr_string_test: $(GPR_STRING_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(GRPC_COMPLETION_QUEUE_BENCHMARK_DEPS) +-include $(GPR_STRING_TEST_OBJS:.o=.dep) endif endif -clean_grpc_completion_queue_benchmark: - $(E) "[CLEAN] Cleaning grpc_completion_queue_benchmark files" - $(Q) $(RM) $(GRPC_COMPLETION_QUEUE_BENCHMARK_OBJS) - $(Q) $(RM) $(GRPC_COMPLETION_QUEUE_BENCHMARK_DEPS) - $(Q) $(RM) bins/$(CONFIG)/grpc_completion_queue_benchmark - -CENSUS_TRACE_STORE_TEST_SRC = \ - test/core/statistics/trace_test.c \ +GPR_SYNC_TEST_SRC = \ + test/core/support/sync_test.c \ -CENSUS_TRACE_STORE_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CENSUS_TRACE_STORE_TEST_SRC)))) -CENSUS_TRACE_STORE_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CENSUS_TRACE_STORE_TEST_SRC)))) +GPR_SYNC_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GPR_SYNC_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/census_trace_store_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/gpr_sync_test: openssl_dep_error else -bins/$(CONFIG)/census_trace_store_test: $(CENSUS_TRACE_STORE_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/gpr_sync_test: $(GPR_SYNC_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(CENSUS_TRACE_STORE_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/census_trace_store_test + $(Q) $(LD) $(LDFLAGS) $(GPR_SYNC_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/gpr_sync_test endif -objs/$(CONFIG)/test/core/statistics/trace_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/support/sync_test.o: libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_census_trace_store_test: $(CENSUS_TRACE_STORE_TEST_DEPS) +deps_gpr_sync_test: $(GPR_SYNC_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CENSUS_TRACE_STORE_TEST_DEPS) +-include $(GPR_SYNC_TEST_OBJS:.o=.dep) endif endif -clean_census_trace_store_test: - $(E) "[CLEAN] Cleaning census_trace_store_test files" - $(Q) $(RM) $(CENSUS_TRACE_STORE_TEST_OBJS) - $(Q) $(RM) $(CENSUS_TRACE_STORE_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/census_trace_store_test - -CENSUS_STATS_STORE_TEST_SRC = \ - test/core/statistics/rpc_stats_test.c \ +GPR_THD_TEST_SRC = \ + test/core/support/thd_test.c \ -CENSUS_STATS_STORE_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CENSUS_STATS_STORE_TEST_SRC)))) -CENSUS_STATS_STORE_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CENSUS_STATS_STORE_TEST_SRC)))) +GPR_THD_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GPR_THD_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/census_stats_store_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/gpr_thd_test: openssl_dep_error else -bins/$(CONFIG)/census_stats_store_test: $(CENSUS_STATS_STORE_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/gpr_thd_test: $(GPR_THD_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(CENSUS_STATS_STORE_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/census_stats_store_test + $(Q) $(LD) $(LDFLAGS) $(GPR_THD_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/gpr_thd_test endif -objs/$(CONFIG)/test/core/statistics/rpc_stats_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/support/thd_test.o: libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_census_stats_store_test: $(CENSUS_STATS_STORE_TEST_DEPS) +deps_gpr_thd_test: $(GPR_THD_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CENSUS_STATS_STORE_TEST_DEPS) +-include $(GPR_THD_TEST_OBJS:.o=.dep) endif endif -clean_census_stats_store_test: - $(E) "[CLEAN] Cleaning census_stats_store_test files" - $(Q) $(RM) $(CENSUS_STATS_STORE_TEST_OBJS) - $(Q) $(RM) $(CENSUS_STATS_STORE_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/census_stats_store_test - -CENSUS_WINDOW_STATS_TEST_SRC = \ - test/core/statistics/window_stats_test.c \ +GPR_TIME_TEST_SRC = \ + test/core/support/time_test.c \ -CENSUS_WINDOW_STATS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CENSUS_WINDOW_STATS_TEST_SRC)))) -CENSUS_WINDOW_STATS_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CENSUS_WINDOW_STATS_TEST_SRC)))) +GPR_TIME_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GPR_TIME_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/census_window_stats_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/gpr_time_test: openssl_dep_error else -bins/$(CONFIG)/census_window_stats_test: $(CENSUS_WINDOW_STATS_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/gpr_time_test: $(GPR_TIME_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(CENSUS_WINDOW_STATS_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/census_window_stats_test + $(Q) $(LD) $(LDFLAGS) $(GPR_TIME_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/gpr_time_test endif -objs/$(CONFIG)/test/core/statistics/window_stats_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/support/time_test.o: libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_census_window_stats_test: $(CENSUS_WINDOW_STATS_TEST_DEPS) +deps_gpr_time_test: $(GPR_TIME_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CENSUS_WINDOW_STATS_TEST_DEPS) +-include $(GPR_TIME_TEST_OBJS:.o=.dep) endif endif -clean_census_window_stats_test: - $(E) "[CLEAN] Cleaning census_window_stats_test files" - $(Q) $(RM) $(CENSUS_WINDOW_STATS_TEST_OBJS) - $(Q) $(RM) $(CENSUS_WINDOW_STATS_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/census_window_stats_test - -CENSUS_STATISTICS_QUICK_TEST_SRC = \ - test/core/statistics/quick_test.c \ +GPR_USEFUL_TEST_SRC = \ + test/core/support/useful_test.c \ -CENSUS_STATISTICS_QUICK_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CENSUS_STATISTICS_QUICK_TEST_SRC)))) -CENSUS_STATISTICS_QUICK_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CENSUS_STATISTICS_QUICK_TEST_SRC)))) +GPR_USEFUL_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GPR_USEFUL_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/census_statistics_quick_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/gpr_useful_test: openssl_dep_error else -bins/$(CONFIG)/census_statistics_quick_test: $(CENSUS_STATISTICS_QUICK_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/gpr_useful_test: $(GPR_USEFUL_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(CENSUS_STATISTICS_QUICK_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/census_statistics_quick_test + $(Q) $(LD) $(LDFLAGS) $(GPR_USEFUL_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/gpr_useful_test endif -objs/$(CONFIG)/test/core/statistics/quick_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/support/useful_test.o: libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_census_statistics_quick_test: $(CENSUS_STATISTICS_QUICK_TEST_DEPS) +deps_gpr_useful_test: $(GPR_USEFUL_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CENSUS_STATISTICS_QUICK_TEST_DEPS) +-include $(GPR_USEFUL_TEST_OBJS:.o=.dep) endif endif -clean_census_statistics_quick_test: - $(E) "[CLEAN] Cleaning census_statistics_quick_test files" - $(Q) $(RM) $(CENSUS_STATISTICS_QUICK_TEST_OBJS) - $(Q) $(RM) $(CENSUS_STATISTICS_QUICK_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/census_statistics_quick_test - -CENSUS_STATISTICS_SMALL_LOG_TEST_SRC = \ - test/core/statistics/small_log_test.c \ +GRPC_BASE64_TEST_SRC = \ + test/core/security/base64_test.c \ -CENSUS_STATISTICS_SMALL_LOG_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CENSUS_STATISTICS_SMALL_LOG_TEST_SRC)))) -CENSUS_STATISTICS_SMALL_LOG_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CENSUS_STATISTICS_SMALL_LOG_TEST_SRC)))) +GRPC_BASE64_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_BASE64_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/census_statistics_small_log_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/grpc_base64_test: openssl_dep_error else -bins/$(CONFIG)/census_statistics_small_log_test: $(CENSUS_STATISTICS_SMALL_LOG_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/grpc_base64_test: $(GRPC_BASE64_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(CENSUS_STATISTICS_SMALL_LOG_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/census_statistics_small_log_test + $(Q) $(LD) $(LDFLAGS) $(GRPC_BASE64_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/grpc_base64_test endif -objs/$(CONFIG)/test/core/statistics/small_log_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/security/base64_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_census_statistics_small_log_test: $(CENSUS_STATISTICS_SMALL_LOG_TEST_DEPS) +deps_grpc_base64_test: $(GRPC_BASE64_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CENSUS_STATISTICS_SMALL_LOG_TEST_DEPS) +-include $(GRPC_BASE64_TEST_OBJS:.o=.dep) endif endif -clean_census_statistics_small_log_test: - $(E) "[CLEAN] Cleaning census_statistics_small_log_test files" - $(Q) $(RM) $(CENSUS_STATISTICS_SMALL_LOG_TEST_OBJS) - $(Q) $(RM) $(CENSUS_STATISTICS_SMALL_LOG_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/census_statistics_small_log_test - -CENSUS_STATISTICS_PERFORMANCE_TEST_SRC = \ - test/core/statistics/performance_test.c \ +GRPC_BYTE_BUFFER_READER_TEST_SRC = \ + test/core/surface/byte_buffer_reader_test.c \ -CENSUS_STATISTICS_PERFORMANCE_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CENSUS_STATISTICS_PERFORMANCE_TEST_SRC)))) -CENSUS_STATISTICS_PERFORMANCE_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CENSUS_STATISTICS_PERFORMANCE_TEST_SRC)))) +GRPC_BYTE_BUFFER_READER_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_BYTE_BUFFER_READER_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/census_statistics_performance_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/grpc_byte_buffer_reader_test: openssl_dep_error else -bins/$(CONFIG)/census_statistics_performance_test: $(CENSUS_STATISTICS_PERFORMANCE_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/grpc_byte_buffer_reader_test: $(GRPC_BYTE_BUFFER_READER_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(CENSUS_STATISTICS_PERFORMANCE_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/census_statistics_performance_test + $(Q) $(LD) $(LDFLAGS) $(GRPC_BYTE_BUFFER_READER_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/grpc_byte_buffer_reader_test endif -objs/$(CONFIG)/test/core/statistics/performance_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/surface/byte_buffer_reader_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_census_statistics_performance_test: $(CENSUS_STATISTICS_PERFORMANCE_TEST_DEPS) +deps_grpc_byte_buffer_reader_test: $(GRPC_BYTE_BUFFER_READER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CENSUS_STATISTICS_PERFORMANCE_TEST_DEPS) +-include $(GRPC_BYTE_BUFFER_READER_TEST_OBJS:.o=.dep) endif endif -clean_census_statistics_performance_test: - $(E) "[CLEAN] Cleaning census_statistics_performance_test files" - $(Q) $(RM) $(CENSUS_STATISTICS_PERFORMANCE_TEST_OBJS) - $(Q) $(RM) $(CENSUS_STATISTICS_PERFORMANCE_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/census_statistics_performance_test - -CENSUS_STATISTICS_MULTIPLE_WRITERS_TEST_SRC = \ - test/core/statistics/multiple_writers_test.c \ +GRPC_CHANNEL_STACK_TEST_SRC = \ + test/core/channel/channel_stack_test.c \ -CENSUS_STATISTICS_MULTIPLE_WRITERS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CENSUS_STATISTICS_MULTIPLE_WRITERS_TEST_SRC)))) -CENSUS_STATISTICS_MULTIPLE_WRITERS_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CENSUS_STATISTICS_MULTIPLE_WRITERS_TEST_SRC)))) +GRPC_CHANNEL_STACK_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_CHANNEL_STACK_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/census_statistics_multiple_writers_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/grpc_channel_stack_test: openssl_dep_error else -bins/$(CONFIG)/census_statistics_multiple_writers_test: $(CENSUS_STATISTICS_MULTIPLE_WRITERS_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/grpc_channel_stack_test: $(GRPC_CHANNEL_STACK_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(CENSUS_STATISTICS_MULTIPLE_WRITERS_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/census_statistics_multiple_writers_test + $(Q) $(LD) $(LDFLAGS) $(GRPC_CHANNEL_STACK_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/grpc_channel_stack_test endif -objs/$(CONFIG)/test/core/statistics/multiple_writers_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/channel/channel_stack_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_census_statistics_multiple_writers_test: $(CENSUS_STATISTICS_MULTIPLE_WRITERS_TEST_DEPS) +deps_grpc_channel_stack_test: $(GRPC_CHANNEL_STACK_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CENSUS_STATISTICS_MULTIPLE_WRITERS_TEST_DEPS) +-include $(GRPC_CHANNEL_STACK_TEST_OBJS:.o=.dep) endif endif -clean_census_statistics_multiple_writers_test: - $(E) "[CLEAN] Cleaning census_statistics_multiple_writers_test files" - $(Q) $(RM) $(CENSUS_STATISTICS_MULTIPLE_WRITERS_TEST_OBJS) - $(Q) $(RM) $(CENSUS_STATISTICS_MULTIPLE_WRITERS_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/census_statistics_multiple_writers_test - -CENSUS_STATISTICS_MULTIPLE_WRITERS_CIRCULAR_BUFFER_TEST_SRC = \ - test/core/statistics/multiple_writers_circular_buffer_test.c \ +GRPC_COMPLETION_QUEUE_BENCHMARK_SRC = \ + test/core/surface/completion_queue_benchmark.c \ -CENSUS_STATISTICS_MULTIPLE_WRITERS_CIRCULAR_BUFFER_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CENSUS_STATISTICS_MULTIPLE_WRITERS_CIRCULAR_BUFFER_TEST_SRC)))) -CENSUS_STATISTICS_MULTIPLE_WRITERS_CIRCULAR_BUFFER_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CENSUS_STATISTICS_MULTIPLE_WRITERS_CIRCULAR_BUFFER_TEST_SRC)))) +GRPC_COMPLETION_QUEUE_BENCHMARK_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_COMPLETION_QUEUE_BENCHMARK_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/census_statistics_multiple_writers_circular_buffer_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/grpc_completion_queue_benchmark: openssl_dep_error else -bins/$(CONFIG)/census_statistics_multiple_writers_circular_buffer_test: $(CENSUS_STATISTICS_MULTIPLE_WRITERS_CIRCULAR_BUFFER_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/grpc_completion_queue_benchmark: $(GRPC_COMPLETION_QUEUE_BENCHMARK_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(CENSUS_STATISTICS_MULTIPLE_WRITERS_CIRCULAR_BUFFER_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/census_statistics_multiple_writers_circular_buffer_test + $(Q) $(LD) $(LDFLAGS) $(GRPC_COMPLETION_QUEUE_BENCHMARK_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/grpc_completion_queue_benchmark endif -objs/$(CONFIG)/test/core/statistics/multiple_writers_circular_buffer_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/surface/completion_queue_benchmark.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_census_statistics_multiple_writers_circular_buffer_test: $(CENSUS_STATISTICS_MULTIPLE_WRITERS_CIRCULAR_BUFFER_TEST_DEPS) +deps_grpc_completion_queue_benchmark: $(GRPC_COMPLETION_QUEUE_BENCHMARK_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CENSUS_STATISTICS_MULTIPLE_WRITERS_CIRCULAR_BUFFER_TEST_DEPS) +-include $(GRPC_COMPLETION_QUEUE_BENCHMARK_OBJS:.o=.dep) endif endif -clean_census_statistics_multiple_writers_circular_buffer_test: - $(E) "[CLEAN] Cleaning census_statistics_multiple_writers_circular_buffer_test files" - $(Q) $(RM) $(CENSUS_STATISTICS_MULTIPLE_WRITERS_CIRCULAR_BUFFER_TEST_OBJS) - $(Q) $(RM) $(CENSUS_STATISTICS_MULTIPLE_WRITERS_CIRCULAR_BUFFER_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/census_statistics_multiple_writers_circular_buffer_test - -CENSUS_STUB_TEST_SRC = \ - test/core/statistics/census_stub_test.c \ +GRPC_COMPLETION_QUEUE_TEST_SRC = \ + test/core/surface/completion_queue_test.c \ -CENSUS_STUB_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CENSUS_STUB_TEST_SRC)))) -CENSUS_STUB_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CENSUS_STUB_TEST_SRC)))) +GRPC_COMPLETION_QUEUE_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_COMPLETION_QUEUE_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/census_stub_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/grpc_completion_queue_test: openssl_dep_error else -bins/$(CONFIG)/census_stub_test: $(CENSUS_STUB_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/grpc_completion_queue_test: $(GRPC_COMPLETION_QUEUE_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(CENSUS_STUB_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/census_stub_test + $(Q) $(LD) $(LDFLAGS) $(GRPC_COMPLETION_QUEUE_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/grpc_completion_queue_test endif -objs/$(CONFIG)/test/core/statistics/census_stub_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/surface/completion_queue_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_census_stub_test: $(CENSUS_STUB_TEST_DEPS) +deps_grpc_completion_queue_test: $(GRPC_COMPLETION_QUEUE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CENSUS_STUB_TEST_DEPS) +-include $(GRPC_COMPLETION_QUEUE_TEST_OBJS:.o=.dep) endif endif -clean_census_stub_test: - $(E) "[CLEAN] Cleaning census_stub_test files" - $(Q) $(RM) $(CENSUS_STUB_TEST_OBJS) - $(Q) $(RM) $(CENSUS_STUB_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/census_stub_test - -CENSUS_HASH_TABLE_TEST_SRC = \ - test/core/statistics/hash_table_test.c \ +GRPC_CREDENTIALS_TEST_SRC = \ + test/core/security/credentials_test.c \ -CENSUS_HASH_TABLE_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CENSUS_HASH_TABLE_TEST_SRC)))) -CENSUS_HASH_TABLE_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CENSUS_HASH_TABLE_TEST_SRC)))) +GRPC_CREDENTIALS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_CREDENTIALS_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/census_hash_table_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/grpc_credentials_test: openssl_dep_error else -bins/$(CONFIG)/census_hash_table_test: $(CENSUS_HASH_TABLE_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/grpc_credentials_test: $(GRPC_CREDENTIALS_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(CENSUS_HASH_TABLE_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/census_hash_table_test + $(Q) $(LD) $(LDFLAGS) $(GRPC_CREDENTIALS_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/grpc_credentials_test endif -objs/$(CONFIG)/test/core/statistics/hash_table_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/security/credentials_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_census_hash_table_test: $(CENSUS_HASH_TABLE_TEST_DEPS) +deps_grpc_credentials_test: $(GRPC_CREDENTIALS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CENSUS_HASH_TABLE_TEST_DEPS) +-include $(GRPC_CREDENTIALS_TEST_OBJS:.o=.dep) endif endif -clean_census_hash_table_test: - $(E) "[CLEAN] Cleaning census_hash_table_test files" - $(Q) $(RM) $(CENSUS_HASH_TABLE_TEST_OBJS) - $(Q) $(RM) $(CENSUS_HASH_TABLE_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/census_hash_table_test - -FLING_SERVER_SRC = \ - test/core/fling/server.c \ +GRPC_FETCH_OAUTH2_SRC = \ + test/core/security/fetch_oauth2.c \ -FLING_SERVER_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(FLING_SERVER_SRC)))) -FLING_SERVER_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(FLING_SERVER_SRC)))) +GRPC_FETCH_OAUTH2_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_FETCH_OAUTH2_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/fling_server: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/grpc_fetch_oauth2: openssl_dep_error else -bins/$(CONFIG)/fling_server: $(FLING_SERVER_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/grpc_fetch_oauth2: $(GRPC_FETCH_OAUTH2_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(FLING_SERVER_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/fling_server + $(Q) $(LD) $(LDFLAGS) $(GRPC_FETCH_OAUTH2_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/grpc_fetch_oauth2 endif -objs/$(CONFIG)/test/core/fling/server.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/security/fetch_oauth2.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_fling_server: $(FLING_SERVER_DEPS) +deps_grpc_fetch_oauth2: $(GRPC_FETCH_OAUTH2_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(FLING_SERVER_DEPS) +-include $(GRPC_FETCH_OAUTH2_OBJS:.o=.dep) endif endif -clean_fling_server: - $(E) "[CLEAN] Cleaning fling_server files" - $(Q) $(RM) $(FLING_SERVER_OBJS) - $(Q) $(RM) $(FLING_SERVER_DEPS) - $(Q) $(RM) bins/$(CONFIG)/fling_server - -FLING_CLIENT_SRC = \ - test/core/fling/client.c \ +GRPC_JSON_TOKEN_TEST_SRC = \ + test/core/security/json_token_test.c \ -FLING_CLIENT_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(FLING_CLIENT_SRC)))) -FLING_CLIENT_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(FLING_CLIENT_SRC)))) +GRPC_JSON_TOKEN_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_JSON_TOKEN_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/fling_client: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/grpc_json_token_test: openssl_dep_error else -bins/$(CONFIG)/fling_client: $(FLING_CLIENT_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/grpc_json_token_test: $(GRPC_JSON_TOKEN_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(FLING_CLIENT_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/fling_client + $(Q) $(LD) $(LDFLAGS) $(GRPC_JSON_TOKEN_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/grpc_json_token_test endif -objs/$(CONFIG)/test/core/fling/client.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/security/json_token_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_fling_client: $(FLING_CLIENT_DEPS) +deps_grpc_json_token_test: $(GRPC_JSON_TOKEN_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(FLING_CLIENT_DEPS) +-include $(GRPC_JSON_TOKEN_TEST_OBJS:.o=.dep) endif endif -clean_fling_client: - $(E) "[CLEAN] Cleaning fling_client files" - $(Q) $(RM) $(FLING_CLIENT_OBJS) - $(Q) $(RM) $(FLING_CLIENT_DEPS) - $(Q) $(RM) bins/$(CONFIG)/fling_client +GRPC_STREAM_OP_TEST_SRC = \ + test/core/transport/stream_op_test.c \ -FLING_TEST_SRC = \ - test/core/fling/fling_test.c \ - -FLING_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(FLING_TEST_SRC)))) -FLING_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(FLING_TEST_SRC)))) +GRPC_STREAM_OP_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_STREAM_OP_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/fling_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/grpc_stream_op_test: openssl_dep_error else -bins/$(CONFIG)/fling_test: $(FLING_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/grpc_stream_op_test: $(GRPC_STREAM_OP_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(FLING_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/fling_test + $(Q) $(LD) $(LDFLAGS) $(GRPC_STREAM_OP_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/grpc_stream_op_test endif -objs/$(CONFIG)/test/core/fling/fling_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/transport/stream_op_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_fling_test: $(FLING_TEST_DEPS) +deps_grpc_stream_op_test: $(GRPC_STREAM_OP_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(FLING_TEST_DEPS) +-include $(GRPC_STREAM_OP_TEST_OBJS:.o=.dep) endif endif -clean_fling_test: - $(E) "[CLEAN] Cleaning fling_test files" - $(Q) $(RM) $(FLING_TEST_OBJS) - $(Q) $(RM) $(FLING_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/fling_test +HPACK_PARSER_TEST_SRC = \ + test/core/transport/chttp2/hpack_parser_test.c \ -ECHO_SERVER_SRC = \ - test/core/echo/server.c \ - -ECHO_SERVER_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(ECHO_SERVER_SRC)))) -ECHO_SERVER_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(ECHO_SERVER_SRC)))) +HPACK_PARSER_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(HPACK_PARSER_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/echo_server: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/hpack_parser_test: openssl_dep_error else -bins/$(CONFIG)/echo_server: $(ECHO_SERVER_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/hpack_parser_test: $(HPACK_PARSER_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(ECHO_SERVER_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/echo_server + $(Q) $(LD) $(LDFLAGS) $(HPACK_PARSER_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/hpack_parser_test endif -objs/$(CONFIG)/test/core/echo/server.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/transport/chttp2/hpack_parser_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_echo_server: $(ECHO_SERVER_DEPS) +deps_hpack_parser_test: $(HPACK_PARSER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(ECHO_SERVER_DEPS) +-include $(HPACK_PARSER_TEST_OBJS:.o=.dep) endif endif -clean_echo_server: - $(E) "[CLEAN] Cleaning echo_server files" - $(Q) $(RM) $(ECHO_SERVER_OBJS) - $(Q) $(RM) $(ECHO_SERVER_DEPS) - $(Q) $(RM) bins/$(CONFIG)/echo_server +HPACK_TABLE_TEST_SRC = \ + test/core/transport/chttp2/hpack_table_test.c \ -ECHO_CLIENT_SRC = \ - test/core/echo/client.c \ +HPACK_TABLE_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(HPACK_TABLE_TEST_SRC)))) -ECHO_CLIENT_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(ECHO_CLIENT_SRC)))) -ECHO_CLIENT_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(ECHO_CLIENT_SRC)))) +ifeq ($(NO_SECURE),true) + +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/hpack_table_test: openssl_dep_error + +else + +bins/$(CONFIG)/hpack_table_test: $(HPACK_TABLE_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a + $(E) "[LD] Linking $@" + $(Q) mkdir -p `dirname $@` + $(Q) $(LD) $(LDFLAGS) $(HPACK_TABLE_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/hpack_table_test + +endif + +objs/$(CONFIG)/test/core/transport/chttp2/hpack_table_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a + +deps_hpack_table_test: $(HPACK_TABLE_TEST_OBJS:.o=.dep) + +ifneq ($(NO_SECURE),true) +ifneq ($(NO_DEPS),true) +-include $(HPACK_TABLE_TEST_OBJS:.o=.dep) +endif +endif + + +HTTPCLI_FORMAT_REQUEST_TEST_SRC = \ + test/core/httpcli/format_request_test.c \ + +HTTPCLI_FORMAT_REQUEST_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(HTTPCLI_FORMAT_REQUEST_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/echo_client: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/httpcli_format_request_test: openssl_dep_error else -bins/$(CONFIG)/echo_client: $(ECHO_CLIENT_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/httpcli_format_request_test: $(HTTPCLI_FORMAT_REQUEST_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(ECHO_CLIENT_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/echo_client + $(Q) $(LD) $(LDFLAGS) $(HTTPCLI_FORMAT_REQUEST_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/httpcli_format_request_test endif -objs/$(CONFIG)/test/core/echo/client.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/httpcli/format_request_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_echo_client: $(ECHO_CLIENT_DEPS) +deps_httpcli_format_request_test: $(HTTPCLI_FORMAT_REQUEST_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(ECHO_CLIENT_DEPS) +-include $(HTTPCLI_FORMAT_REQUEST_TEST_OBJS:.o=.dep) endif endif -clean_echo_client: - $(E) "[CLEAN] Cleaning echo_client files" - $(Q) $(RM) $(ECHO_CLIENT_OBJS) - $(Q) $(RM) $(ECHO_CLIENT_DEPS) - $(Q) $(RM) bins/$(CONFIG)/echo_client +HTTPCLI_PARSER_TEST_SRC = \ + test/core/httpcli/parser_test.c \ -ECHO_TEST_SRC = \ - test/core/echo/echo_test.c \ +HTTPCLI_PARSER_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(HTTPCLI_PARSER_TEST_SRC)))) -ECHO_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(ECHO_TEST_SRC)))) -ECHO_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(ECHO_TEST_SRC)))) +ifeq ($(NO_SECURE),true) + +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/httpcli_parser_test: openssl_dep_error + +else + +bins/$(CONFIG)/httpcli_parser_test: $(HTTPCLI_PARSER_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a + $(E) "[LD] Linking $@" + $(Q) mkdir -p `dirname $@` + $(Q) $(LD) $(LDFLAGS) $(HTTPCLI_PARSER_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/httpcli_parser_test + +endif + +objs/$(CONFIG)/test/core/httpcli/parser_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a + +deps_httpcli_parser_test: $(HTTPCLI_PARSER_TEST_OBJS:.o=.dep) + +ifneq ($(NO_SECURE),true) +ifneq ($(NO_DEPS),true) +-include $(HTTPCLI_PARSER_TEST_OBJS:.o=.dep) +endif +endif + + +HTTPCLI_TEST_SRC = \ + test/core/httpcli/httpcli_test.c \ + +HTTPCLI_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(HTTPCLI_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/echo_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/httpcli_test: openssl_dep_error else -bins/$(CONFIG)/echo_test: $(ECHO_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/httpcli_test: $(HTTPCLI_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(ECHO_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/echo_test + $(Q) $(LD) $(LDFLAGS) $(HTTPCLI_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/httpcli_test endif -objs/$(CONFIG)/test/core/echo/echo_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/httpcli/httpcli_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_echo_test: $(ECHO_TEST_DEPS) +deps_httpcli_test: $(HTTPCLI_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(ECHO_TEST_DEPS) +-include $(HTTPCLI_TEST_OBJS:.o=.dep) +endif endif + + +LAME_CLIENT_TEST_SRC = \ + test/core/surface/lame_client_test.c \ + +LAME_CLIENT_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LAME_CLIENT_TEST_SRC)))) + +ifeq ($(NO_SECURE),true) + +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/lame_client_test: openssl_dep_error + +else + +bins/$(CONFIG)/lame_client_test: $(LAME_CLIENT_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a + $(E) "[LD] Linking $@" + $(Q) mkdir -p `dirname $@` + $(Q) $(LD) $(LDFLAGS) $(LAME_CLIENT_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/lame_client_test + endif -clean_echo_test: - $(E) "[CLEAN] Cleaning echo_test files" - $(Q) $(RM) $(ECHO_TEST_OBJS) - $(Q) $(RM) $(ECHO_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/echo_test +objs/$(CONFIG)/test/core/surface/lame_client_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a + +deps_lame_client_test: $(LAME_CLIENT_TEST_OBJS:.o=.dep) + +ifneq ($(NO_SECURE),true) +ifneq ($(NO_DEPS),true) +-include $(LAME_CLIENT_TEST_OBJS:.o=.dep) +endif +endif LOW_LEVEL_PING_PONG_BENCHMARK_SRC = \ test/core/network_benchmarks/low_level_ping_pong.c \ LOW_LEVEL_PING_PONG_BENCHMARK_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LOW_LEVEL_PING_PONG_BENCHMARK_SRC)))) -LOW_LEVEL_PING_PONG_BENCHMARK_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(LOW_LEVEL_PING_PONG_BENCHMARK_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/low_level_ping_pong_benchmark: openssl_dep_error else @@ -4945,29 +4874,24 @@ endif objs/$(CONFIG)/test/core/network_benchmarks/low_level_ping_pong.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_low_level_ping_pong_benchmark: $(LOW_LEVEL_PING_PONG_BENCHMARK_DEPS) +deps_low_level_ping_pong_benchmark: $(LOW_LEVEL_PING_PONG_BENCHMARK_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(LOW_LEVEL_PING_PONG_BENCHMARK_DEPS) +-include $(LOW_LEVEL_PING_PONG_BENCHMARK_OBJS:.o=.dep) endif endif -clean_low_level_ping_pong_benchmark: - $(E) "[CLEAN] Cleaning low_level_ping_pong_benchmark files" - $(Q) $(RM) $(LOW_LEVEL_PING_PONG_BENCHMARK_OBJS) - $(Q) $(RM) $(LOW_LEVEL_PING_PONG_BENCHMARK_DEPS) - $(Q) $(RM) bins/$(CONFIG)/low_level_ping_pong_benchmark - MESSAGE_COMPRESS_TEST_SRC = \ test/core/compression/message_compress_test.c \ MESSAGE_COMPRESS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(MESSAGE_COMPRESS_TEST_SRC)))) -MESSAGE_COMPRESS_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(MESSAGE_COMPRESS_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/message_compress_test: openssl_dep_error else @@ -4981,672 +4905,599 @@ endif objs/$(CONFIG)/test/core/compression/message_compress_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_message_compress_test: $(MESSAGE_COMPRESS_TEST_DEPS) +deps_message_compress_test: $(MESSAGE_COMPRESS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(MESSAGE_COMPRESS_TEST_DEPS) +-include $(MESSAGE_COMPRESS_TEST_OBJS:.o=.dep) endif endif -clean_message_compress_test: - $(E) "[CLEAN] Cleaning message_compress_test files" - $(Q) $(RM) $(MESSAGE_COMPRESS_TEST_OBJS) - $(Q) $(RM) $(MESSAGE_COMPRESS_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/message_compress_test +METADATA_BUFFER_TEST_SRC = \ + test/core/channel/metadata_buffer_test.c \ -BIN_ENCODER_TEST_SRC = \ - test/core/transport/chttp2/bin_encoder_test.c \ - -BIN_ENCODER_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(BIN_ENCODER_TEST_SRC)))) -BIN_ENCODER_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(BIN_ENCODER_TEST_SRC)))) +METADATA_BUFFER_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(METADATA_BUFFER_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/bin_encoder_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/metadata_buffer_test: openssl_dep_error else -bins/$(CONFIG)/bin_encoder_test: $(BIN_ENCODER_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/metadata_buffer_test: $(METADATA_BUFFER_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(BIN_ENCODER_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/bin_encoder_test + $(Q) $(LD) $(LDFLAGS) $(METADATA_BUFFER_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/metadata_buffer_test endif -objs/$(CONFIG)/test/core/transport/chttp2/bin_encoder_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/channel/metadata_buffer_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_bin_encoder_test: $(BIN_ENCODER_TEST_DEPS) +deps_metadata_buffer_test: $(METADATA_BUFFER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(BIN_ENCODER_TEST_DEPS) +-include $(METADATA_BUFFER_TEST_OBJS:.o=.dep) endif endif -clean_bin_encoder_test: - $(E) "[CLEAN] Cleaning bin_encoder_test files" - $(Q) $(RM) $(BIN_ENCODER_TEST_OBJS) - $(Q) $(RM) $(BIN_ENCODER_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/bin_encoder_test +MURMUR_HASH_TEST_SRC = \ + test/core/support/murmur_hash_test.c \ -SECURE_ENDPOINT_TEST_SRC = \ - test/core/security/secure_endpoint_test.c \ - -SECURE_ENDPOINT_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(SECURE_ENDPOINT_TEST_SRC)))) -SECURE_ENDPOINT_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(SECURE_ENDPOINT_TEST_SRC)))) +MURMUR_HASH_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(MURMUR_HASH_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/secure_endpoint_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/murmur_hash_test: openssl_dep_error else -bins/$(CONFIG)/secure_endpoint_test: $(SECURE_ENDPOINT_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/murmur_hash_test: $(MURMUR_HASH_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(SECURE_ENDPOINT_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/secure_endpoint_test + $(Q) $(LD) $(LDFLAGS) $(MURMUR_HASH_TEST_OBJS) libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/murmur_hash_test endif -objs/$(CONFIG)/test/core/security/secure_endpoint_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/support/murmur_hash_test.o: libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_secure_endpoint_test: $(SECURE_ENDPOINT_TEST_DEPS) +deps_murmur_hash_test: $(MURMUR_HASH_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(SECURE_ENDPOINT_TEST_DEPS) +-include $(MURMUR_HASH_TEST_OBJS:.o=.dep) endif endif -clean_secure_endpoint_test: - $(E) "[CLEAN] Cleaning secure_endpoint_test files" - $(Q) $(RM) $(SECURE_ENDPOINT_TEST_OBJS) - $(Q) $(RM) $(SECURE_ENDPOINT_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/secure_endpoint_test +NO_SERVER_TEST_SRC = \ + test/core/end2end/no_server_test.c \ -HTTPCLI_FORMAT_REQUEST_TEST_SRC = \ - test/core/httpcli/format_request_test.c \ - -HTTPCLI_FORMAT_REQUEST_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(HTTPCLI_FORMAT_REQUEST_TEST_SRC)))) -HTTPCLI_FORMAT_REQUEST_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(HTTPCLI_FORMAT_REQUEST_TEST_SRC)))) +NO_SERVER_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(NO_SERVER_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/httpcli_format_request_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/no_server_test: openssl_dep_error else -bins/$(CONFIG)/httpcli_format_request_test: $(HTTPCLI_FORMAT_REQUEST_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/no_server_test: $(NO_SERVER_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(HTTPCLI_FORMAT_REQUEST_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/httpcli_format_request_test + $(Q) $(LD) $(LDFLAGS) $(NO_SERVER_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/no_server_test endif -objs/$(CONFIG)/test/core/httpcli/format_request_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/end2end/no_server_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_httpcli_format_request_test: $(HTTPCLI_FORMAT_REQUEST_TEST_DEPS) +deps_no_server_test: $(NO_SERVER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(HTTPCLI_FORMAT_REQUEST_TEST_DEPS) +-include $(NO_SERVER_TEST_OBJS:.o=.dep) endif endif -clean_httpcli_format_request_test: - $(E) "[CLEAN] Cleaning httpcli_format_request_test files" - $(Q) $(RM) $(HTTPCLI_FORMAT_REQUEST_TEST_OBJS) - $(Q) $(RM) $(HTTPCLI_FORMAT_REQUEST_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/httpcli_format_request_test - -HTTPCLI_PARSER_TEST_SRC = \ - test/core/httpcli/parser_test.c \ +POLL_KICK_TEST_SRC = \ + test/core/iomgr/poll_kick_test.c \ -HTTPCLI_PARSER_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(HTTPCLI_PARSER_TEST_SRC)))) -HTTPCLI_PARSER_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(HTTPCLI_PARSER_TEST_SRC)))) +POLL_KICK_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(POLL_KICK_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/httpcli_parser_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/poll_kick_test: openssl_dep_error else -bins/$(CONFIG)/httpcli_parser_test: $(HTTPCLI_PARSER_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/poll_kick_test: $(POLL_KICK_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(HTTPCLI_PARSER_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/httpcli_parser_test + $(Q) $(LD) $(LDFLAGS) $(POLL_KICK_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/poll_kick_test endif -objs/$(CONFIG)/test/core/httpcli/parser_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/iomgr/poll_kick_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_httpcli_parser_test: $(HTTPCLI_PARSER_TEST_DEPS) +deps_poll_kick_test: $(POLL_KICK_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(HTTPCLI_PARSER_TEST_DEPS) +-include $(POLL_KICK_TEST_OBJS:.o=.dep) endif endif -clean_httpcli_parser_test: - $(E) "[CLEAN] Cleaning httpcli_parser_test files" - $(Q) $(RM) $(HTTPCLI_PARSER_TEST_OBJS) - $(Q) $(RM) $(HTTPCLI_PARSER_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/httpcli_parser_test +RESOLVE_ADDRESS_TEST_SRC = \ + test/core/iomgr/resolve_address_test.c \ -HTTPCLI_TEST_SRC = \ - test/core/httpcli/httpcli_test.c \ - -HTTPCLI_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(HTTPCLI_TEST_SRC)))) -HTTPCLI_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(HTTPCLI_TEST_SRC)))) +RESOLVE_ADDRESS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(RESOLVE_ADDRESS_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/httpcli_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/resolve_address_test: openssl_dep_error else -bins/$(CONFIG)/httpcli_test: $(HTTPCLI_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/resolve_address_test: $(RESOLVE_ADDRESS_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(HTTPCLI_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/httpcli_test + $(Q) $(LD) $(LDFLAGS) $(RESOLVE_ADDRESS_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/resolve_address_test endif -objs/$(CONFIG)/test/core/httpcli/httpcli_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/iomgr/resolve_address_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_httpcli_test: $(HTTPCLI_TEST_DEPS) +deps_resolve_address_test: $(RESOLVE_ADDRESS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(HTTPCLI_TEST_DEPS) +-include $(RESOLVE_ADDRESS_TEST_OBJS:.o=.dep) endif endif -clean_httpcli_test: - $(E) "[CLEAN] Cleaning httpcli_test files" - $(Q) $(RM) $(HTTPCLI_TEST_OBJS) - $(Q) $(RM) $(HTTPCLI_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/httpcli_test +SECURE_ENDPOINT_TEST_SRC = \ + test/core/security/secure_endpoint_test.c \ -GRPC_CREDENTIALS_TEST_SRC = \ - test/core/security/credentials_test.c \ - -GRPC_CREDENTIALS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_CREDENTIALS_TEST_SRC)))) -GRPC_CREDENTIALS_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(GRPC_CREDENTIALS_TEST_SRC)))) +SECURE_ENDPOINT_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(SECURE_ENDPOINT_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/grpc_credentials_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/secure_endpoint_test: openssl_dep_error else -bins/$(CONFIG)/grpc_credentials_test: $(GRPC_CREDENTIALS_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/secure_endpoint_test: $(SECURE_ENDPOINT_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(GRPC_CREDENTIALS_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/grpc_credentials_test + $(Q) $(LD) $(LDFLAGS) $(SECURE_ENDPOINT_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/secure_endpoint_test endif -objs/$(CONFIG)/test/core/security/credentials_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/security/secure_endpoint_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_grpc_credentials_test: $(GRPC_CREDENTIALS_TEST_DEPS) +deps_secure_endpoint_test: $(SECURE_ENDPOINT_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(GRPC_CREDENTIALS_TEST_DEPS) +-include $(SECURE_ENDPOINT_TEST_OBJS:.o=.dep) endif endif -clean_grpc_credentials_test: - $(E) "[CLEAN] Cleaning grpc_credentials_test files" - $(Q) $(RM) $(GRPC_CREDENTIALS_TEST_OBJS) - $(Q) $(RM) $(GRPC_CREDENTIALS_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/grpc_credentials_test +SOCKADDR_UTILS_TEST_SRC = \ + test/core/iomgr/sockaddr_utils_test.c \ -GRPC_FETCH_OAUTH2_SRC = \ - test/core/security/fetch_oauth2.c \ - -GRPC_FETCH_OAUTH2_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_FETCH_OAUTH2_SRC)))) -GRPC_FETCH_OAUTH2_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(GRPC_FETCH_OAUTH2_SRC)))) +SOCKADDR_UTILS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(SOCKADDR_UTILS_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/grpc_fetch_oauth2: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/sockaddr_utils_test: openssl_dep_error else -bins/$(CONFIG)/grpc_fetch_oauth2: $(GRPC_FETCH_OAUTH2_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/sockaddr_utils_test: $(SOCKADDR_UTILS_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(GRPC_FETCH_OAUTH2_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/grpc_fetch_oauth2 + $(Q) $(LD) $(LDFLAGS) $(SOCKADDR_UTILS_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/sockaddr_utils_test endif -objs/$(CONFIG)/test/core/security/fetch_oauth2.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/iomgr/sockaddr_utils_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_grpc_fetch_oauth2: $(GRPC_FETCH_OAUTH2_DEPS) +deps_sockaddr_utils_test: $(SOCKADDR_UTILS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(GRPC_FETCH_OAUTH2_DEPS) +-include $(SOCKADDR_UTILS_TEST_OBJS:.o=.dep) endif endif -clean_grpc_fetch_oauth2: - $(E) "[CLEAN] Cleaning grpc_fetch_oauth2 files" - $(Q) $(RM) $(GRPC_FETCH_OAUTH2_OBJS) - $(Q) $(RM) $(GRPC_FETCH_OAUTH2_DEPS) - $(Q) $(RM) bins/$(CONFIG)/grpc_fetch_oauth2 - -GRPC_BASE64_TEST_SRC = \ - test/core/security/base64_test.c \ +TCP_CLIENT_POSIX_TEST_SRC = \ + test/core/iomgr/tcp_client_posix_test.c \ -GRPC_BASE64_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_BASE64_TEST_SRC)))) -GRPC_BASE64_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(GRPC_BASE64_TEST_SRC)))) +TCP_CLIENT_POSIX_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(TCP_CLIENT_POSIX_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/grpc_base64_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/tcp_client_posix_test: openssl_dep_error else -bins/$(CONFIG)/grpc_base64_test: $(GRPC_BASE64_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/tcp_client_posix_test: $(TCP_CLIENT_POSIX_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(GRPC_BASE64_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/grpc_base64_test + $(Q) $(LD) $(LDFLAGS) $(TCP_CLIENT_POSIX_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/tcp_client_posix_test endif -objs/$(CONFIG)/test/core/security/base64_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/iomgr/tcp_client_posix_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_grpc_base64_test: $(GRPC_BASE64_TEST_DEPS) +deps_tcp_client_posix_test: $(TCP_CLIENT_POSIX_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(GRPC_BASE64_TEST_DEPS) +-include $(TCP_CLIENT_POSIX_TEST_OBJS:.o=.dep) endif endif -clean_grpc_base64_test: - $(E) "[CLEAN] Cleaning grpc_base64_test files" - $(Q) $(RM) $(GRPC_BASE64_TEST_OBJS) - $(Q) $(RM) $(GRPC_BASE64_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/grpc_base64_test - -GRPC_JSON_TOKEN_TEST_SRC = \ - test/core/security/json_token_test.c \ +TCP_POSIX_TEST_SRC = \ + test/core/iomgr/tcp_posix_test.c \ -GRPC_JSON_TOKEN_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_JSON_TOKEN_TEST_SRC)))) -GRPC_JSON_TOKEN_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(GRPC_JSON_TOKEN_TEST_SRC)))) +TCP_POSIX_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(TCP_POSIX_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/grpc_json_token_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/tcp_posix_test: openssl_dep_error else -bins/$(CONFIG)/grpc_json_token_test: $(GRPC_JSON_TOKEN_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/tcp_posix_test: $(TCP_POSIX_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(GRPC_JSON_TOKEN_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/grpc_json_token_test + $(Q) $(LD) $(LDFLAGS) $(TCP_POSIX_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/tcp_posix_test endif -objs/$(CONFIG)/test/core/security/json_token_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/iomgr/tcp_posix_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_grpc_json_token_test: $(GRPC_JSON_TOKEN_TEST_DEPS) +deps_tcp_posix_test: $(TCP_POSIX_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(GRPC_JSON_TOKEN_TEST_DEPS) +-include $(TCP_POSIX_TEST_OBJS:.o=.dep) endif endif -clean_grpc_json_token_test: - $(E) "[CLEAN] Cleaning grpc_json_token_test files" - $(Q) $(RM) $(GRPC_JSON_TOKEN_TEST_OBJS) - $(Q) $(RM) $(GRPC_JSON_TOKEN_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/grpc_json_token_test - -TIMEOUT_ENCODING_TEST_SRC = \ - test/core/transport/chttp2/timeout_encoding_test.c \ +TCP_SERVER_POSIX_TEST_SRC = \ + test/core/iomgr/tcp_server_posix_test.c \ -TIMEOUT_ENCODING_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(TIMEOUT_ENCODING_TEST_SRC)))) -TIMEOUT_ENCODING_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(TIMEOUT_ENCODING_TEST_SRC)))) +TCP_SERVER_POSIX_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(TCP_SERVER_POSIX_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/timeout_encoding_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/tcp_server_posix_test: openssl_dep_error else -bins/$(CONFIG)/timeout_encoding_test: $(TIMEOUT_ENCODING_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/tcp_server_posix_test: $(TCP_SERVER_POSIX_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(TIMEOUT_ENCODING_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/timeout_encoding_test + $(Q) $(LD) $(LDFLAGS) $(TCP_SERVER_POSIX_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/tcp_server_posix_test endif -objs/$(CONFIG)/test/core/transport/chttp2/timeout_encoding_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/iomgr/tcp_server_posix_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_timeout_encoding_test: $(TIMEOUT_ENCODING_TEST_DEPS) +deps_tcp_server_posix_test: $(TCP_SERVER_POSIX_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(TIMEOUT_ENCODING_TEST_DEPS) +-include $(TCP_SERVER_POSIX_TEST_OBJS:.o=.dep) endif endif -clean_timeout_encoding_test: - $(E) "[CLEAN] Cleaning timeout_encoding_test files" - $(Q) $(RM) $(TIMEOUT_ENCODING_TEST_OBJS) - $(Q) $(RM) $(TIMEOUT_ENCODING_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/timeout_encoding_test - -FD_POSIX_TEST_SRC = \ - test/core/iomgr/fd_posix_test.c \ +TIME_AVERAGED_STATS_TEST_SRC = \ + test/core/iomgr/time_averaged_stats_test.c \ -FD_POSIX_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(FD_POSIX_TEST_SRC)))) -FD_POSIX_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(FD_POSIX_TEST_SRC)))) +TIME_AVERAGED_STATS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(TIME_AVERAGED_STATS_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/fd_posix_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/time_averaged_stats_test: openssl_dep_error else -bins/$(CONFIG)/fd_posix_test: $(FD_POSIX_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/time_averaged_stats_test: $(TIME_AVERAGED_STATS_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(FD_POSIX_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/fd_posix_test + $(Q) $(LD) $(LDFLAGS) $(TIME_AVERAGED_STATS_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/time_averaged_stats_test endif -objs/$(CONFIG)/test/core/iomgr/fd_posix_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/iomgr/time_averaged_stats_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_fd_posix_test: $(FD_POSIX_TEST_DEPS) +deps_time_averaged_stats_test: $(TIME_AVERAGED_STATS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(FD_POSIX_TEST_DEPS) +-include $(TIME_AVERAGED_STATS_TEST_OBJS:.o=.dep) endif endif -clean_fd_posix_test: - $(E) "[CLEAN] Cleaning fd_posix_test files" - $(Q) $(RM) $(FD_POSIX_TEST_OBJS) - $(Q) $(RM) $(FD_POSIX_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/fd_posix_test +TIME_TEST_SRC = \ + test/core/support/time_test.c \ -FLING_STREAM_TEST_SRC = \ - test/core/fling/fling_stream_test.c \ - -FLING_STREAM_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(FLING_STREAM_TEST_SRC)))) -FLING_STREAM_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(FLING_STREAM_TEST_SRC)))) +TIME_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(TIME_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/fling_stream_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/time_test: openssl_dep_error else -bins/$(CONFIG)/fling_stream_test: $(FLING_STREAM_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/time_test: $(TIME_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(FLING_STREAM_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/fling_stream_test + $(Q) $(LD) $(LDFLAGS) $(TIME_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/time_test endif -objs/$(CONFIG)/test/core/fling/fling_stream_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/support/time_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_fling_stream_test: $(FLING_STREAM_TEST_DEPS) +deps_time_test: $(TIME_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(FLING_STREAM_TEST_DEPS) +-include $(TIME_TEST_OBJS:.o=.dep) endif endif -clean_fling_stream_test: - $(E) "[CLEAN] Cleaning fling_stream_test files" - $(Q) $(RM) $(FLING_STREAM_TEST_OBJS) - $(Q) $(RM) $(FLING_STREAM_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/fling_stream_test +TIMEOUT_ENCODING_TEST_SRC = \ + test/core/transport/chttp2/timeout_encoding_test.c \ -LAME_CLIENT_TEST_SRC = \ - test/core/surface/lame_client_test.c \ - -LAME_CLIENT_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LAME_CLIENT_TEST_SRC)))) -LAME_CLIENT_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(LAME_CLIENT_TEST_SRC)))) +TIMEOUT_ENCODING_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(TIMEOUT_ENCODING_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/lame_client_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/timeout_encoding_test: openssl_dep_error else -bins/$(CONFIG)/lame_client_test: $(LAME_CLIENT_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/timeout_encoding_test: $(TIMEOUT_ENCODING_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(LAME_CLIENT_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/lame_client_test + $(Q) $(LD) $(LDFLAGS) $(TIMEOUT_ENCODING_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/timeout_encoding_test endif -objs/$(CONFIG)/test/core/surface/lame_client_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/transport/chttp2/timeout_encoding_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_lame_client_test: $(LAME_CLIENT_TEST_DEPS) +deps_timeout_encoding_test: $(TIMEOUT_ENCODING_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(LAME_CLIENT_TEST_DEPS) +-include $(TIMEOUT_ENCODING_TEST_OBJS:.o=.dep) endif endif -clean_lame_client_test: - $(E) "[CLEAN] Cleaning lame_client_test files" - $(Q) $(RM) $(LAME_CLIENT_TEST_OBJS) - $(Q) $(RM) $(LAME_CLIENT_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/lame_client_test +TRANSPORT_METADATA_TEST_SRC = \ + test/core/transport/metadata_test.c \ -THREAD_POOL_TEST_SRC = \ - test/cpp/server/thread_pool_test.cc \ - -THREAD_POOL_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(THREAD_POOL_TEST_SRC)))) -THREAD_POOL_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(THREAD_POOL_TEST_SRC)))) +TRANSPORT_METADATA_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(TRANSPORT_METADATA_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/thread_pool_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/transport_metadata_test: openssl_dep_error else -bins/$(CONFIG)/thread_pool_test: $(THREAD_POOL_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/transport_metadata_test: $(TRANSPORT_METADATA_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LDXX) $(LDFLAGS) $(THREAD_POOL_TEST_OBJS) $(GTEST_LIB) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/thread_pool_test + $(Q) $(LD) $(LDFLAGS) $(TRANSPORT_METADATA_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/transport_metadata_test endif -objs/$(CONFIG)/test/cpp/server/thread_pool_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/core/transport/metadata_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_thread_pool_test: $(THREAD_POOL_TEST_DEPS) +deps_transport_metadata_test: $(TRANSPORT_METADATA_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(THREAD_POOL_TEST_DEPS) +-include $(TRANSPORT_METADATA_TEST_OBJS:.o=.dep) endif endif -clean_thread_pool_test: - $(E) "[CLEAN] Cleaning thread_pool_test files" - $(Q) $(RM) $(THREAD_POOL_TEST_OBJS) - $(Q) $(RM) $(THREAD_POOL_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/thread_pool_test +CHANNEL_ARGUMENTS_TEST_SRC = \ + test/cpp/client/channel_arguments_test.cc \ -STATUS_TEST_SRC = \ - test/cpp/util/status_test.cc \ - -STATUS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(STATUS_TEST_SRC)))) -STATUS_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(STATUS_TEST_SRC)))) +CHANNEL_ARGUMENTS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHANNEL_ARGUMENTS_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/status_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/channel_arguments_test: openssl_dep_error else -bins/$(CONFIG)/status_test: $(STATUS_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/channel_arguments_test: $(CHANNEL_ARGUMENTS_TEST_OBJS) libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LDXX) $(LDFLAGS) $(STATUS_TEST_OBJS) $(GTEST_LIB) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/status_test + $(Q) $(LDXX) $(LDFLAGS) $(CHANNEL_ARGUMENTS_TEST_OBJS) $(GTEST_LIB) libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/channel_arguments_test endif -objs/$(CONFIG)/test/cpp/util/status_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/cpp/client/channel_arguments_test.o: libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr.a -deps_status_test: $(STATUS_TEST_DEPS) +deps_channel_arguments_test: $(CHANNEL_ARGUMENTS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(STATUS_TEST_DEPS) +-include $(CHANNEL_ARGUMENTS_TEST_OBJS:.o=.dep) endif endif -clean_status_test: - $(E) "[CLEAN] Cleaning status_test files" - $(Q) $(RM) $(STATUS_TEST_OBJS) - $(Q) $(RM) $(STATUS_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/status_test +CPP_PLUGIN_SRC = \ + src/compiler/cpp_generator.cc \ + src/compiler/cpp_plugin.cc \ -SYNC_CLIENT_ASYNC_SERVER_TEST_SRC = \ - test/cpp/end2end/sync_client_async_server_test.cc \ +CPP_PLUGIN_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CPP_PLUGIN_SRC)))) -SYNC_CLIENT_ASYNC_SERVER_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(SYNC_CLIENT_ASYNC_SERVER_TEST_SRC)))) -SYNC_CLIENT_ASYNC_SERVER_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(SYNC_CLIENT_ASYNC_SERVER_TEST_SRC)))) +bins/$(CONFIG)/cpp_plugin: $(CPP_PLUGIN_OBJS) + $(E) "[HOSTLD] Linking $@" + $(Q) mkdir -p `dirname $@` + $(Q) $(HOST_LDXX) $(HOST_LDFLAGS) $(CPP_PLUGIN_OBJS) $(HOST_LDLIBSXX) $(HOST_LDLIBS) $(HOST_LDLIBS_PROTOC) -o bins/$(CONFIG)/cpp_plugin + +objs/$(CONFIG)/src/compiler/cpp_generator.o: +objs/$(CONFIG)/src/compiler/cpp_plugin.o: + +deps_cpp_plugin: $(CPP_PLUGIN_OBJS:.o=.dep) + +ifneq ($(NO_DEPS),true) +-include $(CPP_PLUGIN_OBJS:.o=.dep) +endif + + +CREDENTIALS_TEST_SRC = \ + test/cpp/client/credentials_test.cc \ + +CREDENTIALS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CREDENTIALS_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/sync_client_async_server_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/credentials_test: openssl_dep_error else -bins/$(CONFIG)/sync_client_async_server_test: $(SYNC_CLIENT_ASYNC_SERVER_TEST_OBJS) libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/credentials_test: $(CREDENTIALS_TEST_OBJS) libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LDXX) $(LDFLAGS) $(SYNC_CLIENT_ASYNC_SERVER_TEST_OBJS) $(GTEST_LIB) libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/sync_client_async_server_test + $(Q) $(LDXX) $(LDFLAGS) $(CREDENTIALS_TEST_OBJS) $(GTEST_LIB) libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/credentials_test endif -objs/$(CONFIG)/test/cpp/end2end/sync_client_async_server_test.o: libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/cpp/client/credentials_test.o: libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr.a -deps_sync_client_async_server_test: $(SYNC_CLIENT_ASYNC_SERVER_TEST_DEPS) +deps_credentials_test: $(CREDENTIALS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(SYNC_CLIENT_ASYNC_SERVER_TEST_DEPS) +-include $(CREDENTIALS_TEST_OBJS:.o=.dep) endif endif -clean_sync_client_async_server_test: - $(E) "[CLEAN] Cleaning sync_client_async_server_test files" - $(Q) $(RM) $(SYNC_CLIENT_ASYNC_SERVER_TEST_OBJS) - $(Q) $(RM) $(SYNC_CLIENT_ASYNC_SERVER_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/sync_client_async_server_test +END2END_TEST_SRC = \ + test/cpp/end2end/end2end_test.cc \ -QPS_CLIENT_SRC = \ - gens/test/cpp/qps/qpstest.pb.cc \ - test/cpp/qps/client.cc \ - -QPS_CLIENT_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(QPS_CLIENT_SRC)))) -QPS_CLIENT_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(QPS_CLIENT_SRC)))) +END2END_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(END2END_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/qps_client: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/end2end_test: openssl_dep_error else -bins/$(CONFIG)/qps_client: $(QPS_CLIENT_OBJS) libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/end2end_test: $(END2END_TEST_OBJS) libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LDXX) $(LDFLAGS) $(QPS_CLIENT_OBJS) $(GTEST_LIB) libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/qps_client + $(Q) $(LDXX) $(LDFLAGS) $(END2END_TEST_OBJS) $(GTEST_LIB) libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/end2end_test endif -objs/$(CONFIG)/test/cpp/qps/qpstest.o: libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -objs/$(CONFIG)/test/cpp/qps/client.o: libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/cpp/end2end/end2end_test.o: libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_qps_client: $(QPS_CLIENT_DEPS) +deps_end2end_test: $(END2END_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(QPS_CLIENT_DEPS) +-include $(END2END_TEST_OBJS:.o=.dep) endif endif -clean_qps_client: - $(E) "[CLEAN] Cleaning qps_client files" - $(Q) $(RM) $(QPS_CLIENT_OBJS) - $(Q) $(RM) $(QPS_CLIENT_DEPS) - $(Q) $(RM) bins/$(CONFIG)/qps_client +INTEROP_CLIENT_SRC = \ + gens/test/cpp/interop/empty.pb.cc \ + gens/test/cpp/interop/messages.pb.cc \ + gens/test/cpp/interop/test.pb.cc \ + test/cpp/interop/client.cc \ -QPS_SERVER_SRC = \ - gens/test/cpp/qps/qpstest.pb.cc \ - test/cpp/qps/server.cc \ - -QPS_SERVER_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(QPS_SERVER_SRC)))) -QPS_SERVER_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(QPS_SERVER_SRC)))) +INTEROP_CLIENT_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(INTEROP_CLIENT_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/qps_server: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/interop_client: openssl_dep_error else -bins/$(CONFIG)/qps_server: $(QPS_SERVER_OBJS) libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/interop_client: $(INTEROP_CLIENT_OBJS) libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LDXX) $(LDFLAGS) $(QPS_SERVER_OBJS) $(GTEST_LIB) libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/qps_server + $(Q) $(LDXX) $(LDFLAGS) $(INTEROP_CLIENT_OBJS) $(GTEST_LIB) libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/interop_client endif -objs/$(CONFIG)/test/cpp/qps/qpstest.o: libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -objs/$(CONFIG)/test/cpp/qps/server.o: libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/cpp/interop/empty.o: libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/cpp/interop/messages.o: libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/cpp/interop/test.o: libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/cpp/interop/client.o: libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_qps_server: $(QPS_SERVER_DEPS) +deps_interop_client: $(INTEROP_CLIENT_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(QPS_SERVER_DEPS) +-include $(INTEROP_CLIENT_OBJS:.o=.dep) endif endif -clean_qps_server: - $(E) "[CLEAN] Cleaning qps_server files" - $(Q) $(RM) $(QPS_SERVER_OBJS) - $(Q) $(RM) $(QPS_SERVER_DEPS) - $(Q) $(RM) bins/$(CONFIG)/qps_server - INTEROP_SERVER_SRC = \ gens/test/cpp/interop/empty.pb.cc \ @@ -5655,10 +5506,11 @@ INTEROP_SERVER_SRC = \ test/cpp/interop/server.cc \ INTEROP_SERVER_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(INTEROP_SERVER_SRC)))) -INTEROP_SERVER_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(INTEROP_SERVER_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/interop_server: openssl_dep_error else @@ -5675,322 +5527,265 @@ objs/$(CONFIG)/test/cpp/interop/messages.o: libs/$(CONFIG)/libgrpc++_test_util. objs/$(CONFIG)/test/cpp/interop/test.o: libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a objs/$(CONFIG)/test/cpp/interop/server.o: libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_interop_server: $(INTEROP_SERVER_DEPS) +deps_interop_server: $(INTEROP_SERVER_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(INTEROP_SERVER_DEPS) +-include $(INTEROP_SERVER_OBJS:.o=.dep) endif endif -clean_interop_server: - $(E) "[CLEAN] Cleaning interop_server files" - $(Q) $(RM) $(INTEROP_SERVER_OBJS) - $(Q) $(RM) $(INTEROP_SERVER_DEPS) - $(Q) $(RM) bins/$(CONFIG)/interop_server - -INTEROP_CLIENT_SRC = \ - gens/test/cpp/interop/empty.pb.cc \ - gens/test/cpp/interop/messages.pb.cc \ - gens/test/cpp/interop/test.pb.cc \ - test/cpp/interop/client.cc \ +TIPS_CLIENT_SRC = \ + examples/tips/client_main.cc \ -INTEROP_CLIENT_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(INTEROP_CLIENT_SRC)))) -INTEROP_CLIENT_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(INTEROP_CLIENT_SRC)))) +TIPS_CLIENT_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(TIPS_CLIENT_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/interop_client: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/tips_client: openssl_dep_error else -bins/$(CONFIG)/interop_client: $(INTEROP_CLIENT_OBJS) libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/tips_client: $(TIPS_CLIENT_OBJS) libs/$(CONFIG)/libtips_client_lib.a libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LDXX) $(LDFLAGS) $(INTEROP_CLIENT_OBJS) $(GTEST_LIB) libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/interop_client + $(Q) $(LDXX) $(LDFLAGS) $(TIPS_CLIENT_OBJS) $(GTEST_LIB) libs/$(CONFIG)/libtips_client_lib.a libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/tips_client endif -objs/$(CONFIG)/test/cpp/interop/empty.o: libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -objs/$(CONFIG)/test/cpp/interop/messages.o: libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -objs/$(CONFIG)/test/cpp/interop/test.o: libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -objs/$(CONFIG)/test/cpp/interop/client.o: libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/examples/tips/client_main.o: libs/$(CONFIG)/libtips_client_lib.a libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_interop_client: $(INTEROP_CLIENT_DEPS) +deps_tips_client: $(TIPS_CLIENT_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(INTEROP_CLIENT_DEPS) +-include $(TIPS_CLIENT_OBJS:.o=.dep) endif endif -clean_interop_client: - $(E) "[CLEAN] Cleaning interop_client files" - $(Q) $(RM) $(INTEROP_CLIENT_OBJS) - $(Q) $(RM) $(INTEROP_CLIENT_DEPS) - $(Q) $(RM) bins/$(CONFIG)/interop_client +TIPS_CLIENT_TEST_SRC = \ + examples/tips/client_test.cc \ -END2END_TEST_SRC = \ - test/cpp/end2end/end2end_test.cc \ - -END2END_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(END2END_TEST_SRC)))) -END2END_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(END2END_TEST_SRC)))) +TIPS_CLIENT_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(TIPS_CLIENT_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/end2end_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/tips_client_test: openssl_dep_error else -bins/$(CONFIG)/end2end_test: $(END2END_TEST_OBJS) libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/tips_client_test: $(TIPS_CLIENT_TEST_OBJS) libs/$(CONFIG)/libtips_client_lib.a libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LDXX) $(LDFLAGS) $(END2END_TEST_OBJS) $(GTEST_LIB) libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/end2end_test + $(Q) $(LDXX) $(LDFLAGS) $(TIPS_CLIENT_TEST_OBJS) $(GTEST_LIB) libs/$(CONFIG)/libtips_client_lib.a libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/tips_client_test endif -objs/$(CONFIG)/test/cpp/end2end/end2end_test.o: libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/examples/tips/client_test.o: libs/$(CONFIG)/libtips_client_lib.a libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_end2end_test: $(END2END_TEST_DEPS) +deps_tips_client_test: $(TIPS_CLIENT_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(END2END_TEST_DEPS) +-include $(TIPS_CLIENT_TEST_OBJS:.o=.dep) endif endif -clean_end2end_test: - $(E) "[CLEAN] Cleaning end2end_test files" - $(Q) $(RM) $(END2END_TEST_OBJS) - $(Q) $(RM) $(END2END_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/end2end_test - -CHANNEL_ARGUMENTS_TEST_SRC = \ - test/cpp/client/channel_arguments_test.cc \ +QPS_CLIENT_SRC = \ + gens/test/cpp/qps/qpstest.pb.cc \ + test/cpp/qps/client.cc \ -CHANNEL_ARGUMENTS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHANNEL_ARGUMENTS_TEST_SRC)))) -CHANNEL_ARGUMENTS_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHANNEL_ARGUMENTS_TEST_SRC)))) +QPS_CLIENT_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(QPS_CLIENT_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/channel_arguments_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/qps_client: openssl_dep_error else -bins/$(CONFIG)/channel_arguments_test: $(CHANNEL_ARGUMENTS_TEST_OBJS) libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/qps_client: $(QPS_CLIENT_OBJS) libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LDXX) $(LDFLAGS) $(CHANNEL_ARGUMENTS_TEST_OBJS) $(GTEST_LIB) libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/channel_arguments_test + $(Q) $(LDXX) $(LDFLAGS) $(QPS_CLIENT_OBJS) $(GTEST_LIB) libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/qps_client endif -objs/$(CONFIG)/test/cpp/client/channel_arguments_test.o: libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/cpp/qps/qpstest.o: libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/cpp/qps/client.o: libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_channel_arguments_test: $(CHANNEL_ARGUMENTS_TEST_DEPS) +deps_qps_client: $(QPS_CLIENT_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHANNEL_ARGUMENTS_TEST_DEPS) +-include $(QPS_CLIENT_OBJS:.o=.dep) endif endif -clean_channel_arguments_test: - $(E) "[CLEAN] Cleaning channel_arguments_test files" - $(Q) $(RM) $(CHANNEL_ARGUMENTS_TEST_OBJS) - $(Q) $(RM) $(CHANNEL_ARGUMENTS_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/channel_arguments_test - -CREDENTIALS_TEST_SRC = \ - test/cpp/client/credentials_test.cc \ +QPS_SERVER_SRC = \ + gens/test/cpp/qps/qpstest.pb.cc \ + test/cpp/qps/server.cc \ -CREDENTIALS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CREDENTIALS_TEST_SRC)))) -CREDENTIALS_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CREDENTIALS_TEST_SRC)))) +QPS_SERVER_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(QPS_SERVER_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/credentials_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/qps_server: openssl_dep_error else -bins/$(CONFIG)/credentials_test: $(CREDENTIALS_TEST_OBJS) libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/qps_server: $(QPS_SERVER_OBJS) libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LDXX) $(LDFLAGS) $(CREDENTIALS_TEST_OBJS) $(GTEST_LIB) libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/credentials_test + $(Q) $(LDXX) $(LDFLAGS) $(QPS_SERVER_OBJS) $(GTEST_LIB) libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/qps_server endif -objs/$(CONFIG)/test/cpp/client/credentials_test.o: libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/cpp/qps/qpstest.o: libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/cpp/qps/server.o: libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_credentials_test: $(CREDENTIALS_TEST_DEPS) +deps_qps_server: $(QPS_SERVER_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CREDENTIALS_TEST_DEPS) +-include $(QPS_SERVER_OBJS:.o=.dep) endif endif -clean_credentials_test: - $(E) "[CLEAN] Cleaning credentials_test files" - $(Q) $(RM) $(CREDENTIALS_TEST_OBJS) - $(Q) $(RM) $(CREDENTIALS_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/credentials_test - - -ALARM_TEST_SRC = \ - test/core/iomgr/alarm_test.c \ - -ALARM_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(ALARM_TEST_SRC)))) -ALARM_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(ALARM_TEST_SRC)))) - -ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/alarm_test: openssl_dep_error +RUBY_PLUGIN_SRC = \ + src/compiler/ruby_generator.cc \ + src/compiler/ruby_plugin.cc \ -else +RUBY_PLUGIN_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(RUBY_PLUGIN_SRC)))) -bins/$(CONFIG)/alarm_test: $(ALARM_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a - $(E) "[LD] Linking $@" +bins/$(CONFIG)/ruby_plugin: $(RUBY_PLUGIN_OBJS) + $(E) "[HOSTLD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(ALARM_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/alarm_test - -endif + $(Q) $(HOST_LDXX) $(HOST_LDFLAGS) $(RUBY_PLUGIN_OBJS) $(HOST_LDLIBSXX) $(HOST_LDLIBS) $(HOST_LDLIBS_PROTOC) -o bins/$(CONFIG)/ruby_plugin -objs/$(CONFIG)/test/core/iomgr/alarm_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/src/compiler/ruby_generator.o: +objs/$(CONFIG)/src/compiler/ruby_plugin.o: -deps_alarm_test: $(ALARM_TEST_DEPS) +deps_ruby_plugin: $(RUBY_PLUGIN_OBJS:.o=.dep) -ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(ALARM_TEST_DEPS) -endif +-include $(RUBY_PLUGIN_OBJS:.o=.dep) endif -clean_alarm_test: - $(E) "[CLEAN] Cleaning alarm_test files" - $(Q) $(RM) $(ALARM_TEST_OBJS) - $(Q) $(RM) $(ALARM_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/alarm_test +STATUS_TEST_SRC = \ + test/cpp/util/status_test.cc \ -ALARM_LIST_TEST_SRC = \ - test/core/iomgr/alarm_list_test.c \ - -ALARM_LIST_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(ALARM_LIST_TEST_SRC)))) -ALARM_LIST_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(ALARM_LIST_TEST_SRC)))) +STATUS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(STATUS_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/alarm_list_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/status_test: openssl_dep_error else -bins/$(CONFIG)/alarm_list_test: $(ALARM_LIST_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/status_test: $(STATUS_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(ALARM_LIST_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/alarm_list_test + $(Q) $(LDXX) $(LDFLAGS) $(STATUS_TEST_OBJS) $(GTEST_LIB) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/status_test endif -objs/$(CONFIG)/test/core/iomgr/alarm_list_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/cpp/util/status_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_alarm_list_test: $(ALARM_LIST_TEST_DEPS) +deps_status_test: $(STATUS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(ALARM_LIST_TEST_DEPS) +-include $(STATUS_TEST_OBJS:.o=.dep) endif endif -clean_alarm_list_test: - $(E) "[CLEAN] Cleaning alarm_list_test files" - $(Q) $(RM) $(ALARM_LIST_TEST_OBJS) - $(Q) $(RM) $(ALARM_LIST_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/alarm_list_test +SYNC_CLIENT_ASYNC_SERVER_TEST_SRC = \ + test/cpp/end2end/sync_client_async_server_test.cc \ -ALARM_HEAP_TEST_SRC = \ - test/core/iomgr/alarm_heap_test.c \ - -ALARM_HEAP_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(ALARM_HEAP_TEST_SRC)))) -ALARM_HEAP_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(ALARM_HEAP_TEST_SRC)))) +SYNC_CLIENT_ASYNC_SERVER_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(SYNC_CLIENT_ASYNC_SERVER_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/alarm_heap_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/sync_client_async_server_test: openssl_dep_error else -bins/$(CONFIG)/alarm_heap_test: $(ALARM_HEAP_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/sync_client_async_server_test: $(SYNC_CLIENT_ASYNC_SERVER_TEST_OBJS) libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(ALARM_HEAP_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/alarm_heap_test + $(Q) $(LDXX) $(LDFLAGS) $(SYNC_CLIENT_ASYNC_SERVER_TEST_OBJS) $(GTEST_LIB) libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/sync_client_async_server_test endif -objs/$(CONFIG)/test/core/iomgr/alarm_heap_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/cpp/end2end/sync_client_async_server_test.o: libs/$(CONFIG)/libgrpc++_test_util.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_alarm_heap_test: $(ALARM_HEAP_TEST_DEPS) +deps_sync_client_async_server_test: $(SYNC_CLIENT_ASYNC_SERVER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(ALARM_HEAP_TEST_DEPS) +-include $(SYNC_CLIENT_ASYNC_SERVER_TEST_OBJS:.o=.dep) endif endif -clean_alarm_heap_test: - $(E) "[CLEAN] Cleaning alarm_heap_test files" - $(Q) $(RM) $(ALARM_HEAP_TEST_OBJS) - $(Q) $(RM) $(ALARM_HEAP_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/alarm_heap_test +THREAD_POOL_TEST_SRC = \ + test/cpp/server/thread_pool_test.cc \ -TIME_TEST_SRC = \ - test/core/support/time_test.c \ - -TIME_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(TIME_TEST_SRC)))) -TIME_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(TIME_TEST_SRC)))) +THREAD_POOL_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(THREAD_POOL_TEST_SRC)))) ifeq ($(NO_SECURE),true) -bins/$(CONFIG)/time_test: openssl_dep_error +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/thread_pool_test: openssl_dep_error else -bins/$(CONFIG)/time_test: $(TIME_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +bins/$(CONFIG)/thread_pool_test: $(THREAD_POOL_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(TIME_TEST_OBJS) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/time_test + $(Q) $(LDXX) $(LDFLAGS) $(THREAD_POOL_TEST_OBJS) $(GTEST_LIB) libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/thread_pool_test endif -objs/$(CONFIG)/test/core/support/time_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a +objs/$(CONFIG)/test/cpp/server/thread_pool_test.o: libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc++.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a -deps_time_test: $(TIME_TEST_DEPS) +deps_thread_pool_test: $(THREAD_POOL_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(TIME_TEST_DEPS) +-include $(THREAD_POOL_TEST_OBJS:.o=.dep) endif endif -clean_time_test: - $(E) "[CLEAN] Cleaning time_test files" - $(Q) $(RM) $(TIME_TEST_OBJS) - $(Q) $(RM) $(TIME_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/time_test - CHTTP2_FAKE_SECURITY_CANCEL_AFTER_ACCEPT_TEST_SRC = \ CHTTP2_FAKE_SECURITY_CANCEL_AFTER_ACCEPT_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FAKE_SECURITY_CANCEL_AFTER_ACCEPT_TEST_SRC)))) -CHTTP2_FAKE_SECURITY_CANCEL_AFTER_ACCEPT_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FAKE_SECURITY_CANCEL_AFTER_ACCEPT_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fake_security_cancel_after_accept_test: openssl_dep_error else @@ -6003,28 +5798,23 @@ bins/$(CONFIG)/chttp2_fake_security_cancel_after_accept_test: $(CHTTP2_FAKE_SECU endif -deps_chttp2_fake_security_cancel_after_accept_test: $(CHTTP2_FAKE_SECURITY_CANCEL_AFTER_ACCEPT_TEST_DEPS) +deps_chttp2_fake_security_cancel_after_accept_test: $(CHTTP2_FAKE_SECURITY_CANCEL_AFTER_ACCEPT_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FAKE_SECURITY_CANCEL_AFTER_ACCEPT_TEST_DEPS) +-include $(CHTTP2_FAKE_SECURITY_CANCEL_AFTER_ACCEPT_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_fake_security_cancel_after_accept_test: - $(E) "[CLEAN] Cleaning chttp2_fake_security_cancel_after_accept_test files" - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_CANCEL_AFTER_ACCEPT_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_CANCEL_AFTER_ACCEPT_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fake_security_cancel_after_accept_test - CHTTP2_FAKE_SECURITY_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_SRC = \ CHTTP2_FAKE_SECURITY_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FAKE_SECURITY_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_SRC)))) -CHTTP2_FAKE_SECURITY_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FAKE_SECURITY_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fake_security_cancel_after_accept_and_writes_closed_test: openssl_dep_error else @@ -6037,28 +5827,23 @@ bins/$(CONFIG)/chttp2_fake_security_cancel_after_accept_and_writes_closed_test: endif -deps_chttp2_fake_security_cancel_after_accept_and_writes_closed_test: $(CHTTP2_FAKE_SECURITY_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_DEPS) +deps_chttp2_fake_security_cancel_after_accept_and_writes_closed_test: $(CHTTP2_FAKE_SECURITY_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FAKE_SECURITY_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_DEPS) +-include $(CHTTP2_FAKE_SECURITY_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_fake_security_cancel_after_accept_and_writes_closed_test: - $(E) "[CLEAN] Cleaning chttp2_fake_security_cancel_after_accept_and_writes_closed_test files" - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fake_security_cancel_after_accept_and_writes_closed_test - CHTTP2_FAKE_SECURITY_CANCEL_AFTER_INVOKE_TEST_SRC = \ CHTTP2_FAKE_SECURITY_CANCEL_AFTER_INVOKE_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FAKE_SECURITY_CANCEL_AFTER_INVOKE_TEST_SRC)))) -CHTTP2_FAKE_SECURITY_CANCEL_AFTER_INVOKE_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FAKE_SECURITY_CANCEL_AFTER_INVOKE_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fake_security_cancel_after_invoke_test: openssl_dep_error else @@ -6071,28 +5856,23 @@ bins/$(CONFIG)/chttp2_fake_security_cancel_after_invoke_test: $(CHTTP2_FAKE_SECU endif -deps_chttp2_fake_security_cancel_after_invoke_test: $(CHTTP2_FAKE_SECURITY_CANCEL_AFTER_INVOKE_TEST_DEPS) +deps_chttp2_fake_security_cancel_after_invoke_test: $(CHTTP2_FAKE_SECURITY_CANCEL_AFTER_INVOKE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FAKE_SECURITY_CANCEL_AFTER_INVOKE_TEST_DEPS) +-include $(CHTTP2_FAKE_SECURITY_CANCEL_AFTER_INVOKE_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_fake_security_cancel_after_invoke_test: - $(E) "[CLEAN] Cleaning chttp2_fake_security_cancel_after_invoke_test files" - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_CANCEL_AFTER_INVOKE_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_CANCEL_AFTER_INVOKE_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fake_security_cancel_after_invoke_test - CHTTP2_FAKE_SECURITY_CANCEL_BEFORE_INVOKE_TEST_SRC = \ CHTTP2_FAKE_SECURITY_CANCEL_BEFORE_INVOKE_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FAKE_SECURITY_CANCEL_BEFORE_INVOKE_TEST_SRC)))) -CHTTP2_FAKE_SECURITY_CANCEL_BEFORE_INVOKE_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FAKE_SECURITY_CANCEL_BEFORE_INVOKE_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fake_security_cancel_before_invoke_test: openssl_dep_error else @@ -6105,28 +5885,23 @@ bins/$(CONFIG)/chttp2_fake_security_cancel_before_invoke_test: $(CHTTP2_FAKE_SEC endif -deps_chttp2_fake_security_cancel_before_invoke_test: $(CHTTP2_FAKE_SECURITY_CANCEL_BEFORE_INVOKE_TEST_DEPS) +deps_chttp2_fake_security_cancel_before_invoke_test: $(CHTTP2_FAKE_SECURITY_CANCEL_BEFORE_INVOKE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FAKE_SECURITY_CANCEL_BEFORE_INVOKE_TEST_DEPS) +-include $(CHTTP2_FAKE_SECURITY_CANCEL_BEFORE_INVOKE_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_fake_security_cancel_before_invoke_test: - $(E) "[CLEAN] Cleaning chttp2_fake_security_cancel_before_invoke_test files" - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_CANCEL_BEFORE_INVOKE_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_CANCEL_BEFORE_INVOKE_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fake_security_cancel_before_invoke_test - CHTTP2_FAKE_SECURITY_CANCEL_IN_A_VACUUM_TEST_SRC = \ CHTTP2_FAKE_SECURITY_CANCEL_IN_A_VACUUM_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FAKE_SECURITY_CANCEL_IN_A_VACUUM_TEST_SRC)))) -CHTTP2_FAKE_SECURITY_CANCEL_IN_A_VACUUM_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FAKE_SECURITY_CANCEL_IN_A_VACUUM_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fake_security_cancel_in_a_vacuum_test: openssl_dep_error else @@ -6139,28 +5914,23 @@ bins/$(CONFIG)/chttp2_fake_security_cancel_in_a_vacuum_test: $(CHTTP2_FAKE_SECUR endif -deps_chttp2_fake_security_cancel_in_a_vacuum_test: $(CHTTP2_FAKE_SECURITY_CANCEL_IN_A_VACUUM_TEST_DEPS) +deps_chttp2_fake_security_cancel_in_a_vacuum_test: $(CHTTP2_FAKE_SECURITY_CANCEL_IN_A_VACUUM_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FAKE_SECURITY_CANCEL_IN_A_VACUUM_TEST_DEPS) +-include $(CHTTP2_FAKE_SECURITY_CANCEL_IN_A_VACUUM_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_fake_security_cancel_in_a_vacuum_test: - $(E) "[CLEAN] Cleaning chttp2_fake_security_cancel_in_a_vacuum_test files" - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_CANCEL_IN_A_VACUUM_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_CANCEL_IN_A_VACUUM_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fake_security_cancel_in_a_vacuum_test - CHTTP2_FAKE_SECURITY_CENSUS_SIMPLE_REQUEST_TEST_SRC = \ CHTTP2_FAKE_SECURITY_CENSUS_SIMPLE_REQUEST_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FAKE_SECURITY_CENSUS_SIMPLE_REQUEST_TEST_SRC)))) -CHTTP2_FAKE_SECURITY_CENSUS_SIMPLE_REQUEST_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FAKE_SECURITY_CENSUS_SIMPLE_REQUEST_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fake_security_census_simple_request_test: openssl_dep_error else @@ -6173,28 +5943,23 @@ bins/$(CONFIG)/chttp2_fake_security_census_simple_request_test: $(CHTTP2_FAKE_SE endif -deps_chttp2_fake_security_census_simple_request_test: $(CHTTP2_FAKE_SECURITY_CENSUS_SIMPLE_REQUEST_TEST_DEPS) +deps_chttp2_fake_security_census_simple_request_test: $(CHTTP2_FAKE_SECURITY_CENSUS_SIMPLE_REQUEST_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FAKE_SECURITY_CENSUS_SIMPLE_REQUEST_TEST_DEPS) +-include $(CHTTP2_FAKE_SECURITY_CENSUS_SIMPLE_REQUEST_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_fake_security_census_simple_request_test: - $(E) "[CLEAN] Cleaning chttp2_fake_security_census_simple_request_test files" - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_CENSUS_SIMPLE_REQUEST_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_CENSUS_SIMPLE_REQUEST_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fake_security_census_simple_request_test - CHTTP2_FAKE_SECURITY_DISAPPEARING_SERVER_TEST_SRC = \ CHTTP2_FAKE_SECURITY_DISAPPEARING_SERVER_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FAKE_SECURITY_DISAPPEARING_SERVER_TEST_SRC)))) -CHTTP2_FAKE_SECURITY_DISAPPEARING_SERVER_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FAKE_SECURITY_DISAPPEARING_SERVER_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fake_security_disappearing_server_test: openssl_dep_error else @@ -6207,28 +5972,23 @@ bins/$(CONFIG)/chttp2_fake_security_disappearing_server_test: $(CHTTP2_FAKE_SECU endif -deps_chttp2_fake_security_disappearing_server_test: $(CHTTP2_FAKE_SECURITY_DISAPPEARING_SERVER_TEST_DEPS) +deps_chttp2_fake_security_disappearing_server_test: $(CHTTP2_FAKE_SECURITY_DISAPPEARING_SERVER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FAKE_SECURITY_DISAPPEARING_SERVER_TEST_DEPS) +-include $(CHTTP2_FAKE_SECURITY_DISAPPEARING_SERVER_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_fake_security_disappearing_server_test: - $(E) "[CLEAN] Cleaning chttp2_fake_security_disappearing_server_test files" - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_DISAPPEARING_SERVER_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_DISAPPEARING_SERVER_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fake_security_disappearing_server_test - CHTTP2_FAKE_SECURITY_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_SRC = \ CHTTP2_FAKE_SECURITY_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FAKE_SECURITY_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_SRC)))) -CHTTP2_FAKE_SECURITY_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FAKE_SECURITY_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fake_security_early_server_shutdown_finishes_inflight_calls_test: openssl_dep_error else @@ -6241,28 +6001,23 @@ bins/$(CONFIG)/chttp2_fake_security_early_server_shutdown_finishes_inflight_call endif -deps_chttp2_fake_security_early_server_shutdown_finishes_inflight_calls_test: $(CHTTP2_FAKE_SECURITY_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_DEPS) +deps_chttp2_fake_security_early_server_shutdown_finishes_inflight_calls_test: $(CHTTP2_FAKE_SECURITY_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FAKE_SECURITY_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_DEPS) +-include $(CHTTP2_FAKE_SECURITY_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_fake_security_early_server_shutdown_finishes_inflight_calls_test: - $(E) "[CLEAN] Cleaning chttp2_fake_security_early_server_shutdown_finishes_inflight_calls_test files" - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fake_security_early_server_shutdown_finishes_inflight_calls_test - CHTTP2_FAKE_SECURITY_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_SRC = \ CHTTP2_FAKE_SECURITY_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FAKE_SECURITY_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_SRC)))) -CHTTP2_FAKE_SECURITY_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FAKE_SECURITY_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fake_security_early_server_shutdown_finishes_tags_test: openssl_dep_error else @@ -6275,28 +6030,52 @@ bins/$(CONFIG)/chttp2_fake_security_early_server_shutdown_finishes_tags_test: $( endif -deps_chttp2_fake_security_early_server_shutdown_finishes_tags_test: $(CHTTP2_FAKE_SECURITY_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_DEPS) +deps_chttp2_fake_security_early_server_shutdown_finishes_tags_test: $(CHTTP2_FAKE_SECURITY_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FAKE_SECURITY_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_DEPS) +-include $(CHTTP2_FAKE_SECURITY_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_fake_security_early_server_shutdown_finishes_tags_test: - $(E) "[CLEAN] Cleaning chttp2_fake_security_early_server_shutdown_finishes_tags_test files" - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fake_security_early_server_shutdown_finishes_tags_test + +CHTTP2_FAKE_SECURITY_GRACEFUL_SERVER_SHUTDOWN_TEST_SRC = \ + +CHTTP2_FAKE_SECURITY_GRACEFUL_SERVER_SHUTDOWN_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FAKE_SECURITY_GRACEFUL_SERVER_SHUTDOWN_TEST_SRC)))) + +ifeq ($(NO_SECURE),true) + +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/chttp2_fake_security_graceful_server_shutdown_test: openssl_dep_error + +else + +bins/$(CONFIG)/chttp2_fake_security_graceful_server_shutdown_test: $(CHTTP2_FAKE_SECURITY_GRACEFUL_SERVER_SHUTDOWN_TEST_OBJS) libs/$(CONFIG)/libend2end_fixture_chttp2_fake_security.a libs/$(CONFIG)/libend2end_test_graceful_server_shutdown.a libs/$(CONFIG)/libend2end_certs.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a + $(E) "[LD] Linking $@" + $(Q) mkdir -p `dirname $@` + $(Q) $(LD) $(LDFLAGS) $(CHTTP2_FAKE_SECURITY_GRACEFUL_SERVER_SHUTDOWN_TEST_OBJS) libs/$(CONFIG)/libend2end_fixture_chttp2_fake_security.a libs/$(CONFIG)/libend2end_test_graceful_server_shutdown.a libs/$(CONFIG)/libend2end_certs.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/chttp2_fake_security_graceful_server_shutdown_test + +endif + + +deps_chttp2_fake_security_graceful_server_shutdown_test: $(CHTTP2_FAKE_SECURITY_GRACEFUL_SERVER_SHUTDOWN_TEST_OBJS:.o=.dep) + +ifneq ($(NO_SECURE),true) +ifneq ($(NO_DEPS),true) +-include $(CHTTP2_FAKE_SECURITY_GRACEFUL_SERVER_SHUTDOWN_TEST_OBJS:.o=.dep) +endif +endif CHTTP2_FAKE_SECURITY_INVOKE_LARGE_REQUEST_TEST_SRC = \ CHTTP2_FAKE_SECURITY_INVOKE_LARGE_REQUEST_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FAKE_SECURITY_INVOKE_LARGE_REQUEST_TEST_SRC)))) -CHTTP2_FAKE_SECURITY_INVOKE_LARGE_REQUEST_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FAKE_SECURITY_INVOKE_LARGE_REQUEST_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fake_security_invoke_large_request_test: openssl_dep_error else @@ -6309,28 +6088,23 @@ bins/$(CONFIG)/chttp2_fake_security_invoke_large_request_test: $(CHTTP2_FAKE_SEC endif -deps_chttp2_fake_security_invoke_large_request_test: $(CHTTP2_FAKE_SECURITY_INVOKE_LARGE_REQUEST_TEST_DEPS) +deps_chttp2_fake_security_invoke_large_request_test: $(CHTTP2_FAKE_SECURITY_INVOKE_LARGE_REQUEST_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FAKE_SECURITY_INVOKE_LARGE_REQUEST_TEST_DEPS) +-include $(CHTTP2_FAKE_SECURITY_INVOKE_LARGE_REQUEST_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_fake_security_invoke_large_request_test: - $(E) "[CLEAN] Cleaning chttp2_fake_security_invoke_large_request_test files" - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_INVOKE_LARGE_REQUEST_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_INVOKE_LARGE_REQUEST_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fake_security_invoke_large_request_test - CHTTP2_FAKE_SECURITY_MAX_CONCURRENT_STREAMS_TEST_SRC = \ CHTTP2_FAKE_SECURITY_MAX_CONCURRENT_STREAMS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FAKE_SECURITY_MAX_CONCURRENT_STREAMS_TEST_SRC)))) -CHTTP2_FAKE_SECURITY_MAX_CONCURRENT_STREAMS_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FAKE_SECURITY_MAX_CONCURRENT_STREAMS_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fake_security_max_concurrent_streams_test: openssl_dep_error else @@ -6343,28 +6117,23 @@ bins/$(CONFIG)/chttp2_fake_security_max_concurrent_streams_test: $(CHTTP2_FAKE_S endif -deps_chttp2_fake_security_max_concurrent_streams_test: $(CHTTP2_FAKE_SECURITY_MAX_CONCURRENT_STREAMS_TEST_DEPS) +deps_chttp2_fake_security_max_concurrent_streams_test: $(CHTTP2_FAKE_SECURITY_MAX_CONCURRENT_STREAMS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FAKE_SECURITY_MAX_CONCURRENT_STREAMS_TEST_DEPS) +-include $(CHTTP2_FAKE_SECURITY_MAX_CONCURRENT_STREAMS_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_fake_security_max_concurrent_streams_test: - $(E) "[CLEAN] Cleaning chttp2_fake_security_max_concurrent_streams_test files" - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_MAX_CONCURRENT_STREAMS_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_MAX_CONCURRENT_STREAMS_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fake_security_max_concurrent_streams_test - CHTTP2_FAKE_SECURITY_NO_OP_TEST_SRC = \ CHTTP2_FAKE_SECURITY_NO_OP_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FAKE_SECURITY_NO_OP_TEST_SRC)))) -CHTTP2_FAKE_SECURITY_NO_OP_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FAKE_SECURITY_NO_OP_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fake_security_no_op_test: openssl_dep_error else @@ -6377,28 +6146,23 @@ bins/$(CONFIG)/chttp2_fake_security_no_op_test: $(CHTTP2_FAKE_SECURITY_NO_OP_TES endif -deps_chttp2_fake_security_no_op_test: $(CHTTP2_FAKE_SECURITY_NO_OP_TEST_DEPS) +deps_chttp2_fake_security_no_op_test: $(CHTTP2_FAKE_SECURITY_NO_OP_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FAKE_SECURITY_NO_OP_TEST_DEPS) +-include $(CHTTP2_FAKE_SECURITY_NO_OP_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_fake_security_no_op_test: - $(E) "[CLEAN] Cleaning chttp2_fake_security_no_op_test files" - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_NO_OP_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_NO_OP_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fake_security_no_op_test - CHTTP2_FAKE_SECURITY_PING_PONG_STREAMING_TEST_SRC = \ CHTTP2_FAKE_SECURITY_PING_PONG_STREAMING_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FAKE_SECURITY_PING_PONG_STREAMING_TEST_SRC)))) -CHTTP2_FAKE_SECURITY_PING_PONG_STREAMING_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FAKE_SECURITY_PING_PONG_STREAMING_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fake_security_ping_pong_streaming_test: openssl_dep_error else @@ -6411,28 +6175,23 @@ bins/$(CONFIG)/chttp2_fake_security_ping_pong_streaming_test: $(CHTTP2_FAKE_SECU endif -deps_chttp2_fake_security_ping_pong_streaming_test: $(CHTTP2_FAKE_SECURITY_PING_PONG_STREAMING_TEST_DEPS) +deps_chttp2_fake_security_ping_pong_streaming_test: $(CHTTP2_FAKE_SECURITY_PING_PONG_STREAMING_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FAKE_SECURITY_PING_PONG_STREAMING_TEST_DEPS) +-include $(CHTTP2_FAKE_SECURITY_PING_PONG_STREAMING_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_fake_security_ping_pong_streaming_test: - $(E) "[CLEAN] Cleaning chttp2_fake_security_ping_pong_streaming_test files" - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_PING_PONG_STREAMING_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_PING_PONG_STREAMING_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fake_security_ping_pong_streaming_test - CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_SRC = \ CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_SRC)))) -CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fake_security_request_response_with_binary_metadata_and_payload_test: openssl_dep_error else @@ -6445,28 +6204,23 @@ bins/$(CONFIG)/chttp2_fake_security_request_response_with_binary_metadata_and_pa endif -deps_chttp2_fake_security_request_response_with_binary_metadata_and_payload_test: $(CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_DEPS) +deps_chttp2_fake_security_request_response_with_binary_metadata_and_payload_test: $(CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_DEPS) +-include $(CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_fake_security_request_response_with_binary_metadata_and_payload_test: - $(E) "[CLEAN] Cleaning chttp2_fake_security_request_response_with_binary_metadata_and_payload_test files" - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fake_security_request_response_with_binary_metadata_and_payload_test - CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_SRC = \ CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_SRC)))) -CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fake_security_request_response_with_metadata_and_payload_test: openssl_dep_error else @@ -6479,28 +6233,23 @@ bins/$(CONFIG)/chttp2_fake_security_request_response_with_metadata_and_payload_t endif -deps_chttp2_fake_security_request_response_with_metadata_and_payload_test: $(CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_DEPS) +deps_chttp2_fake_security_request_response_with_metadata_and_payload_test: $(CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_DEPS) +-include $(CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_fake_security_request_response_with_metadata_and_payload_test: - $(E) "[CLEAN] Cleaning chttp2_fake_security_request_response_with_metadata_and_payload_test files" - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fake_security_request_response_with_metadata_and_payload_test - CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_SRC = \ CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_SRC)))) -CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fake_security_request_response_with_payload_test: openssl_dep_error else @@ -6513,28 +6262,23 @@ bins/$(CONFIG)/chttp2_fake_security_request_response_with_payload_test: $(CHTTP2 endif -deps_chttp2_fake_security_request_response_with_payload_test: $(CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_DEPS) +deps_chttp2_fake_security_request_response_with_payload_test: $(CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_DEPS) +-include $(CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_fake_security_request_response_with_payload_test: - $(E) "[CLEAN] Cleaning chttp2_fake_security_request_response_with_payload_test files" - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fake_security_request_response_with_payload_test - CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_SRC = \ CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_SRC)))) -CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fake_security_request_response_with_trailing_metadata_and_payload_test: openssl_dep_error else @@ -6547,28 +6291,23 @@ bins/$(CONFIG)/chttp2_fake_security_request_response_with_trailing_metadata_and_ endif -deps_chttp2_fake_security_request_response_with_trailing_metadata_and_payload_test: $(CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_DEPS) +deps_chttp2_fake_security_request_response_with_trailing_metadata_and_payload_test: $(CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_DEPS) +-include $(CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_fake_security_request_response_with_trailing_metadata_and_payload_test: - $(E) "[CLEAN] Cleaning chttp2_fake_security_request_response_with_trailing_metadata_and_payload_test files" - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fake_security_request_response_with_trailing_metadata_and_payload_test - CHTTP2_FAKE_SECURITY_SIMPLE_DELAYED_REQUEST_TEST_SRC = \ CHTTP2_FAKE_SECURITY_SIMPLE_DELAYED_REQUEST_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FAKE_SECURITY_SIMPLE_DELAYED_REQUEST_TEST_SRC)))) -CHTTP2_FAKE_SECURITY_SIMPLE_DELAYED_REQUEST_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FAKE_SECURITY_SIMPLE_DELAYED_REQUEST_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fake_security_simple_delayed_request_test: openssl_dep_error else @@ -6581,28 +6320,23 @@ bins/$(CONFIG)/chttp2_fake_security_simple_delayed_request_test: $(CHTTP2_FAKE_S endif -deps_chttp2_fake_security_simple_delayed_request_test: $(CHTTP2_FAKE_SECURITY_SIMPLE_DELAYED_REQUEST_TEST_DEPS) +deps_chttp2_fake_security_simple_delayed_request_test: $(CHTTP2_FAKE_SECURITY_SIMPLE_DELAYED_REQUEST_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FAKE_SECURITY_SIMPLE_DELAYED_REQUEST_TEST_DEPS) +-include $(CHTTP2_FAKE_SECURITY_SIMPLE_DELAYED_REQUEST_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_fake_security_simple_delayed_request_test: - $(E) "[CLEAN] Cleaning chttp2_fake_security_simple_delayed_request_test files" - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_SIMPLE_DELAYED_REQUEST_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_SIMPLE_DELAYED_REQUEST_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fake_security_simple_delayed_request_test - CHTTP2_FAKE_SECURITY_SIMPLE_REQUEST_TEST_SRC = \ CHTTP2_FAKE_SECURITY_SIMPLE_REQUEST_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FAKE_SECURITY_SIMPLE_REQUEST_TEST_SRC)))) -CHTTP2_FAKE_SECURITY_SIMPLE_REQUEST_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FAKE_SECURITY_SIMPLE_REQUEST_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fake_security_simple_request_test: openssl_dep_error else @@ -6615,28 +6349,23 @@ bins/$(CONFIG)/chttp2_fake_security_simple_request_test: $(CHTTP2_FAKE_SECURITY_ endif -deps_chttp2_fake_security_simple_request_test: $(CHTTP2_FAKE_SECURITY_SIMPLE_REQUEST_TEST_DEPS) +deps_chttp2_fake_security_simple_request_test: $(CHTTP2_FAKE_SECURITY_SIMPLE_REQUEST_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FAKE_SECURITY_SIMPLE_REQUEST_TEST_DEPS) +-include $(CHTTP2_FAKE_SECURITY_SIMPLE_REQUEST_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_fake_security_simple_request_test: - $(E) "[CLEAN] Cleaning chttp2_fake_security_simple_request_test files" - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_SIMPLE_REQUEST_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_SIMPLE_REQUEST_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fake_security_simple_request_test - CHTTP2_FAKE_SECURITY_THREAD_STRESS_TEST_SRC = \ CHTTP2_FAKE_SECURITY_THREAD_STRESS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FAKE_SECURITY_THREAD_STRESS_TEST_SRC)))) -CHTTP2_FAKE_SECURITY_THREAD_STRESS_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FAKE_SECURITY_THREAD_STRESS_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fake_security_thread_stress_test: openssl_dep_error else @@ -6649,28 +6378,23 @@ bins/$(CONFIG)/chttp2_fake_security_thread_stress_test: $(CHTTP2_FAKE_SECURITY_T endif -deps_chttp2_fake_security_thread_stress_test: $(CHTTP2_FAKE_SECURITY_THREAD_STRESS_TEST_DEPS) +deps_chttp2_fake_security_thread_stress_test: $(CHTTP2_FAKE_SECURITY_THREAD_STRESS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FAKE_SECURITY_THREAD_STRESS_TEST_DEPS) +-include $(CHTTP2_FAKE_SECURITY_THREAD_STRESS_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_fake_security_thread_stress_test: - $(E) "[CLEAN] Cleaning chttp2_fake_security_thread_stress_test files" - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_THREAD_STRESS_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_THREAD_STRESS_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fake_security_thread_stress_test - CHTTP2_FAKE_SECURITY_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_SRC = \ CHTTP2_FAKE_SECURITY_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FAKE_SECURITY_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_SRC)))) -CHTTP2_FAKE_SECURITY_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FAKE_SECURITY_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fake_security_writes_done_hangs_with_pending_read_test: openssl_dep_error else @@ -6683,28 +6407,23 @@ bins/$(CONFIG)/chttp2_fake_security_writes_done_hangs_with_pending_read_test: $( endif -deps_chttp2_fake_security_writes_done_hangs_with_pending_read_test: $(CHTTP2_FAKE_SECURITY_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_DEPS) +deps_chttp2_fake_security_writes_done_hangs_with_pending_read_test: $(CHTTP2_FAKE_SECURITY_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FAKE_SECURITY_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_DEPS) +-include $(CHTTP2_FAKE_SECURITY_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_fake_security_writes_done_hangs_with_pending_read_test: - $(E) "[CLEAN] Cleaning chttp2_fake_security_writes_done_hangs_with_pending_read_test files" - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FAKE_SECURITY_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fake_security_writes_done_hangs_with_pending_read_test - CHTTP2_FULLSTACK_CANCEL_AFTER_ACCEPT_TEST_SRC = \ CHTTP2_FULLSTACK_CANCEL_AFTER_ACCEPT_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FULLSTACK_CANCEL_AFTER_ACCEPT_TEST_SRC)))) -CHTTP2_FULLSTACK_CANCEL_AFTER_ACCEPT_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FULLSTACK_CANCEL_AFTER_ACCEPT_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fullstack_cancel_after_accept_test: openssl_dep_error else @@ -6717,28 +6436,23 @@ bins/$(CONFIG)/chttp2_fullstack_cancel_after_accept_test: $(CHTTP2_FULLSTACK_CAN endif -deps_chttp2_fullstack_cancel_after_accept_test: $(CHTTP2_FULLSTACK_CANCEL_AFTER_ACCEPT_TEST_DEPS) +deps_chttp2_fullstack_cancel_after_accept_test: $(CHTTP2_FULLSTACK_CANCEL_AFTER_ACCEPT_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FULLSTACK_CANCEL_AFTER_ACCEPT_TEST_DEPS) +-include $(CHTTP2_FULLSTACK_CANCEL_AFTER_ACCEPT_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_fullstack_cancel_after_accept_test: - $(E) "[CLEAN] Cleaning chttp2_fullstack_cancel_after_accept_test files" - $(Q) $(RM) $(CHTTP2_FULLSTACK_CANCEL_AFTER_ACCEPT_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FULLSTACK_CANCEL_AFTER_ACCEPT_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fullstack_cancel_after_accept_test - CHTTP2_FULLSTACK_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_SRC = \ CHTTP2_FULLSTACK_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FULLSTACK_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_SRC)))) -CHTTP2_FULLSTACK_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FULLSTACK_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fullstack_cancel_after_accept_and_writes_closed_test: openssl_dep_error else @@ -6751,28 +6465,23 @@ bins/$(CONFIG)/chttp2_fullstack_cancel_after_accept_and_writes_closed_test: $(CH endif -deps_chttp2_fullstack_cancel_after_accept_and_writes_closed_test: $(CHTTP2_FULLSTACK_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_DEPS) +deps_chttp2_fullstack_cancel_after_accept_and_writes_closed_test: $(CHTTP2_FULLSTACK_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FULLSTACK_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_DEPS) +-include $(CHTTP2_FULLSTACK_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_fullstack_cancel_after_accept_and_writes_closed_test: - $(E) "[CLEAN] Cleaning chttp2_fullstack_cancel_after_accept_and_writes_closed_test files" - $(Q) $(RM) $(CHTTP2_FULLSTACK_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FULLSTACK_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fullstack_cancel_after_accept_and_writes_closed_test - CHTTP2_FULLSTACK_CANCEL_AFTER_INVOKE_TEST_SRC = \ CHTTP2_FULLSTACK_CANCEL_AFTER_INVOKE_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FULLSTACK_CANCEL_AFTER_INVOKE_TEST_SRC)))) -CHTTP2_FULLSTACK_CANCEL_AFTER_INVOKE_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FULLSTACK_CANCEL_AFTER_INVOKE_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fullstack_cancel_after_invoke_test: openssl_dep_error else @@ -6785,28 +6494,23 @@ bins/$(CONFIG)/chttp2_fullstack_cancel_after_invoke_test: $(CHTTP2_FULLSTACK_CAN endif -deps_chttp2_fullstack_cancel_after_invoke_test: $(CHTTP2_FULLSTACK_CANCEL_AFTER_INVOKE_TEST_DEPS) +deps_chttp2_fullstack_cancel_after_invoke_test: $(CHTTP2_FULLSTACK_CANCEL_AFTER_INVOKE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FULLSTACK_CANCEL_AFTER_INVOKE_TEST_DEPS) +-include $(CHTTP2_FULLSTACK_CANCEL_AFTER_INVOKE_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_fullstack_cancel_after_invoke_test: - $(E) "[CLEAN] Cleaning chttp2_fullstack_cancel_after_invoke_test files" - $(Q) $(RM) $(CHTTP2_FULLSTACK_CANCEL_AFTER_INVOKE_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FULLSTACK_CANCEL_AFTER_INVOKE_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fullstack_cancel_after_invoke_test - CHTTP2_FULLSTACK_CANCEL_BEFORE_INVOKE_TEST_SRC = \ CHTTP2_FULLSTACK_CANCEL_BEFORE_INVOKE_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FULLSTACK_CANCEL_BEFORE_INVOKE_TEST_SRC)))) -CHTTP2_FULLSTACK_CANCEL_BEFORE_INVOKE_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FULLSTACK_CANCEL_BEFORE_INVOKE_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fullstack_cancel_before_invoke_test: openssl_dep_error else @@ -6819,28 +6523,23 @@ bins/$(CONFIG)/chttp2_fullstack_cancel_before_invoke_test: $(CHTTP2_FULLSTACK_CA endif -deps_chttp2_fullstack_cancel_before_invoke_test: $(CHTTP2_FULLSTACK_CANCEL_BEFORE_INVOKE_TEST_DEPS) +deps_chttp2_fullstack_cancel_before_invoke_test: $(CHTTP2_FULLSTACK_CANCEL_BEFORE_INVOKE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FULLSTACK_CANCEL_BEFORE_INVOKE_TEST_DEPS) +-include $(CHTTP2_FULLSTACK_CANCEL_BEFORE_INVOKE_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_fullstack_cancel_before_invoke_test: - $(E) "[CLEAN] Cleaning chttp2_fullstack_cancel_before_invoke_test files" - $(Q) $(RM) $(CHTTP2_FULLSTACK_CANCEL_BEFORE_INVOKE_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FULLSTACK_CANCEL_BEFORE_INVOKE_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fullstack_cancel_before_invoke_test - CHTTP2_FULLSTACK_CANCEL_IN_A_VACUUM_TEST_SRC = \ CHTTP2_FULLSTACK_CANCEL_IN_A_VACUUM_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FULLSTACK_CANCEL_IN_A_VACUUM_TEST_SRC)))) -CHTTP2_FULLSTACK_CANCEL_IN_A_VACUUM_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FULLSTACK_CANCEL_IN_A_VACUUM_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fullstack_cancel_in_a_vacuum_test: openssl_dep_error else @@ -6853,28 +6552,23 @@ bins/$(CONFIG)/chttp2_fullstack_cancel_in_a_vacuum_test: $(CHTTP2_FULLSTACK_CANC endif -deps_chttp2_fullstack_cancel_in_a_vacuum_test: $(CHTTP2_FULLSTACK_CANCEL_IN_A_VACUUM_TEST_DEPS) +deps_chttp2_fullstack_cancel_in_a_vacuum_test: $(CHTTP2_FULLSTACK_CANCEL_IN_A_VACUUM_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FULLSTACK_CANCEL_IN_A_VACUUM_TEST_DEPS) +-include $(CHTTP2_FULLSTACK_CANCEL_IN_A_VACUUM_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_fullstack_cancel_in_a_vacuum_test: - $(E) "[CLEAN] Cleaning chttp2_fullstack_cancel_in_a_vacuum_test files" - $(Q) $(RM) $(CHTTP2_FULLSTACK_CANCEL_IN_A_VACUUM_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FULLSTACK_CANCEL_IN_A_VACUUM_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fullstack_cancel_in_a_vacuum_test - CHTTP2_FULLSTACK_CENSUS_SIMPLE_REQUEST_TEST_SRC = \ CHTTP2_FULLSTACK_CENSUS_SIMPLE_REQUEST_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FULLSTACK_CENSUS_SIMPLE_REQUEST_TEST_SRC)))) -CHTTP2_FULLSTACK_CENSUS_SIMPLE_REQUEST_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FULLSTACK_CENSUS_SIMPLE_REQUEST_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fullstack_census_simple_request_test: openssl_dep_error else @@ -6887,28 +6581,23 @@ bins/$(CONFIG)/chttp2_fullstack_census_simple_request_test: $(CHTTP2_FULLSTACK_C endif -deps_chttp2_fullstack_census_simple_request_test: $(CHTTP2_FULLSTACK_CENSUS_SIMPLE_REQUEST_TEST_DEPS) +deps_chttp2_fullstack_census_simple_request_test: $(CHTTP2_FULLSTACK_CENSUS_SIMPLE_REQUEST_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FULLSTACK_CENSUS_SIMPLE_REQUEST_TEST_DEPS) +-include $(CHTTP2_FULLSTACK_CENSUS_SIMPLE_REQUEST_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_fullstack_census_simple_request_test: - $(E) "[CLEAN] Cleaning chttp2_fullstack_census_simple_request_test files" - $(Q) $(RM) $(CHTTP2_FULLSTACK_CENSUS_SIMPLE_REQUEST_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FULLSTACK_CENSUS_SIMPLE_REQUEST_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fullstack_census_simple_request_test - CHTTP2_FULLSTACK_DISAPPEARING_SERVER_TEST_SRC = \ CHTTP2_FULLSTACK_DISAPPEARING_SERVER_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FULLSTACK_DISAPPEARING_SERVER_TEST_SRC)))) -CHTTP2_FULLSTACK_DISAPPEARING_SERVER_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FULLSTACK_DISAPPEARING_SERVER_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fullstack_disappearing_server_test: openssl_dep_error else @@ -6921,28 +6610,23 @@ bins/$(CONFIG)/chttp2_fullstack_disappearing_server_test: $(CHTTP2_FULLSTACK_DIS endif -deps_chttp2_fullstack_disappearing_server_test: $(CHTTP2_FULLSTACK_DISAPPEARING_SERVER_TEST_DEPS) +deps_chttp2_fullstack_disappearing_server_test: $(CHTTP2_FULLSTACK_DISAPPEARING_SERVER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FULLSTACK_DISAPPEARING_SERVER_TEST_DEPS) +-include $(CHTTP2_FULLSTACK_DISAPPEARING_SERVER_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_fullstack_disappearing_server_test: - $(E) "[CLEAN] Cleaning chttp2_fullstack_disappearing_server_test files" - $(Q) $(RM) $(CHTTP2_FULLSTACK_DISAPPEARING_SERVER_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FULLSTACK_DISAPPEARING_SERVER_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fullstack_disappearing_server_test - CHTTP2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_SRC = \ CHTTP2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_SRC)))) -CHTTP2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_inflight_calls_test: openssl_dep_error else @@ -6955,28 +6639,23 @@ bins/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_inflight_calls_te endif -deps_chttp2_fullstack_early_server_shutdown_finishes_inflight_calls_test: $(CHTTP2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_DEPS) +deps_chttp2_fullstack_early_server_shutdown_finishes_inflight_calls_test: $(CHTTP2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_DEPS) +-include $(CHTTP2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_fullstack_early_server_shutdown_finishes_inflight_calls_test: - $(E) "[CLEAN] Cleaning chttp2_fullstack_early_server_shutdown_finishes_inflight_calls_test files" - $(Q) $(RM) $(CHTTP2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_inflight_calls_test - CHTTP2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_SRC = \ CHTTP2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_SRC)))) -CHTTP2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_tags_test: openssl_dep_error else @@ -6989,28 +6668,52 @@ bins/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_tags_test: $(CHTT endif -deps_chttp2_fullstack_early_server_shutdown_finishes_tags_test: $(CHTTP2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_DEPS) +deps_chttp2_fullstack_early_server_shutdown_finishes_tags_test: $(CHTTP2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_DEPS) +-include $(CHTTP2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_OBJS:.o=.dep) +endif endif + + +CHTTP2_FULLSTACK_GRACEFUL_SERVER_SHUTDOWN_TEST_SRC = \ + +CHTTP2_FULLSTACK_GRACEFUL_SERVER_SHUTDOWN_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FULLSTACK_GRACEFUL_SERVER_SHUTDOWN_TEST_SRC)))) + +ifeq ($(NO_SECURE),true) + +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/chttp2_fullstack_graceful_server_shutdown_test: openssl_dep_error + +else + +bins/$(CONFIG)/chttp2_fullstack_graceful_server_shutdown_test: $(CHTTP2_FULLSTACK_GRACEFUL_SERVER_SHUTDOWN_TEST_OBJS) libs/$(CONFIG)/libend2end_fixture_chttp2_fullstack.a libs/$(CONFIG)/libend2end_test_graceful_server_shutdown.a libs/$(CONFIG)/libend2end_certs.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a + $(E) "[LD] Linking $@" + $(Q) mkdir -p `dirname $@` + $(Q) $(LD) $(LDFLAGS) $(CHTTP2_FULLSTACK_GRACEFUL_SERVER_SHUTDOWN_TEST_OBJS) libs/$(CONFIG)/libend2end_fixture_chttp2_fullstack.a libs/$(CONFIG)/libend2end_test_graceful_server_shutdown.a libs/$(CONFIG)/libend2end_certs.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/chttp2_fullstack_graceful_server_shutdown_test + endif -clean_chttp2_fullstack_early_server_shutdown_finishes_tags_test: - $(E) "[CLEAN] Cleaning chttp2_fullstack_early_server_shutdown_finishes_tags_test files" - $(Q) $(RM) $(CHTTP2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_tags_test + +deps_chttp2_fullstack_graceful_server_shutdown_test: $(CHTTP2_FULLSTACK_GRACEFUL_SERVER_SHUTDOWN_TEST_OBJS:.o=.dep) + +ifneq ($(NO_SECURE),true) +ifneq ($(NO_DEPS),true) +-include $(CHTTP2_FULLSTACK_GRACEFUL_SERVER_SHUTDOWN_TEST_OBJS:.o=.dep) +endif +endif CHTTP2_FULLSTACK_INVOKE_LARGE_REQUEST_TEST_SRC = \ CHTTP2_FULLSTACK_INVOKE_LARGE_REQUEST_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FULLSTACK_INVOKE_LARGE_REQUEST_TEST_SRC)))) -CHTTP2_FULLSTACK_INVOKE_LARGE_REQUEST_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FULLSTACK_INVOKE_LARGE_REQUEST_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fullstack_invoke_large_request_test: openssl_dep_error else @@ -7023,28 +6726,23 @@ bins/$(CONFIG)/chttp2_fullstack_invoke_large_request_test: $(CHTTP2_FULLSTACK_IN endif -deps_chttp2_fullstack_invoke_large_request_test: $(CHTTP2_FULLSTACK_INVOKE_LARGE_REQUEST_TEST_DEPS) +deps_chttp2_fullstack_invoke_large_request_test: $(CHTTP2_FULLSTACK_INVOKE_LARGE_REQUEST_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FULLSTACK_INVOKE_LARGE_REQUEST_TEST_DEPS) +-include $(CHTTP2_FULLSTACK_INVOKE_LARGE_REQUEST_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_fullstack_invoke_large_request_test: - $(E) "[CLEAN] Cleaning chttp2_fullstack_invoke_large_request_test files" - $(Q) $(RM) $(CHTTP2_FULLSTACK_INVOKE_LARGE_REQUEST_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FULLSTACK_INVOKE_LARGE_REQUEST_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fullstack_invoke_large_request_test - CHTTP2_FULLSTACK_MAX_CONCURRENT_STREAMS_TEST_SRC = \ CHTTP2_FULLSTACK_MAX_CONCURRENT_STREAMS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FULLSTACK_MAX_CONCURRENT_STREAMS_TEST_SRC)))) -CHTTP2_FULLSTACK_MAX_CONCURRENT_STREAMS_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FULLSTACK_MAX_CONCURRENT_STREAMS_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fullstack_max_concurrent_streams_test: openssl_dep_error else @@ -7057,28 +6755,23 @@ bins/$(CONFIG)/chttp2_fullstack_max_concurrent_streams_test: $(CHTTP2_FULLSTACK_ endif -deps_chttp2_fullstack_max_concurrent_streams_test: $(CHTTP2_FULLSTACK_MAX_CONCURRENT_STREAMS_TEST_DEPS) +deps_chttp2_fullstack_max_concurrent_streams_test: $(CHTTP2_FULLSTACK_MAX_CONCURRENT_STREAMS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FULLSTACK_MAX_CONCURRENT_STREAMS_TEST_DEPS) +-include $(CHTTP2_FULLSTACK_MAX_CONCURRENT_STREAMS_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_fullstack_max_concurrent_streams_test: - $(E) "[CLEAN] Cleaning chttp2_fullstack_max_concurrent_streams_test files" - $(Q) $(RM) $(CHTTP2_FULLSTACK_MAX_CONCURRENT_STREAMS_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FULLSTACK_MAX_CONCURRENT_STREAMS_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fullstack_max_concurrent_streams_test - CHTTP2_FULLSTACK_NO_OP_TEST_SRC = \ CHTTP2_FULLSTACK_NO_OP_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FULLSTACK_NO_OP_TEST_SRC)))) -CHTTP2_FULLSTACK_NO_OP_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FULLSTACK_NO_OP_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fullstack_no_op_test: openssl_dep_error else @@ -7091,28 +6784,23 @@ bins/$(CONFIG)/chttp2_fullstack_no_op_test: $(CHTTP2_FULLSTACK_NO_OP_TEST_OBJS) endif -deps_chttp2_fullstack_no_op_test: $(CHTTP2_FULLSTACK_NO_OP_TEST_DEPS) +deps_chttp2_fullstack_no_op_test: $(CHTTP2_FULLSTACK_NO_OP_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FULLSTACK_NO_OP_TEST_DEPS) +-include $(CHTTP2_FULLSTACK_NO_OP_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_fullstack_no_op_test: - $(E) "[CLEAN] Cleaning chttp2_fullstack_no_op_test files" - $(Q) $(RM) $(CHTTP2_FULLSTACK_NO_OP_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FULLSTACK_NO_OP_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fullstack_no_op_test - CHTTP2_FULLSTACK_PING_PONG_STREAMING_TEST_SRC = \ CHTTP2_FULLSTACK_PING_PONG_STREAMING_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FULLSTACK_PING_PONG_STREAMING_TEST_SRC)))) -CHTTP2_FULLSTACK_PING_PONG_STREAMING_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FULLSTACK_PING_PONG_STREAMING_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fullstack_ping_pong_streaming_test: openssl_dep_error else @@ -7125,28 +6813,23 @@ bins/$(CONFIG)/chttp2_fullstack_ping_pong_streaming_test: $(CHTTP2_FULLSTACK_PIN endif -deps_chttp2_fullstack_ping_pong_streaming_test: $(CHTTP2_FULLSTACK_PING_PONG_STREAMING_TEST_DEPS) +deps_chttp2_fullstack_ping_pong_streaming_test: $(CHTTP2_FULLSTACK_PING_PONG_STREAMING_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FULLSTACK_PING_PONG_STREAMING_TEST_DEPS) +-include $(CHTTP2_FULLSTACK_PING_PONG_STREAMING_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_fullstack_ping_pong_streaming_test: - $(E) "[CLEAN] Cleaning chttp2_fullstack_ping_pong_streaming_test files" - $(Q) $(RM) $(CHTTP2_FULLSTACK_PING_PONG_STREAMING_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FULLSTACK_PING_PONG_STREAMING_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fullstack_ping_pong_streaming_test - CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_SRC = \ CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_SRC)))) -CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fullstack_request_response_with_binary_metadata_and_payload_test: openssl_dep_error else @@ -7159,28 +6842,23 @@ bins/$(CONFIG)/chttp2_fullstack_request_response_with_binary_metadata_and_payloa endif -deps_chttp2_fullstack_request_response_with_binary_metadata_and_payload_test: $(CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_DEPS) +deps_chttp2_fullstack_request_response_with_binary_metadata_and_payload_test: $(CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_DEPS) +-include $(CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_fullstack_request_response_with_binary_metadata_and_payload_test: - $(E) "[CLEAN] Cleaning chttp2_fullstack_request_response_with_binary_metadata_and_payload_test files" - $(Q) $(RM) $(CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fullstack_request_response_with_binary_metadata_and_payload_test - CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_SRC = \ CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_SRC)))) -CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fullstack_request_response_with_metadata_and_payload_test: openssl_dep_error else @@ -7193,28 +6871,23 @@ bins/$(CONFIG)/chttp2_fullstack_request_response_with_metadata_and_payload_test: endif -deps_chttp2_fullstack_request_response_with_metadata_and_payload_test: $(CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_DEPS) +deps_chttp2_fullstack_request_response_with_metadata_and_payload_test: $(CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_DEPS) +-include $(CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_fullstack_request_response_with_metadata_and_payload_test: - $(E) "[CLEAN] Cleaning chttp2_fullstack_request_response_with_metadata_and_payload_test files" - $(Q) $(RM) $(CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fullstack_request_response_with_metadata_and_payload_test - CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_SRC = \ CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_SRC)))) -CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fullstack_request_response_with_payload_test: openssl_dep_error else @@ -7227,28 +6900,23 @@ bins/$(CONFIG)/chttp2_fullstack_request_response_with_payload_test: $(CHTTP2_FUL endif -deps_chttp2_fullstack_request_response_with_payload_test: $(CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_DEPS) +deps_chttp2_fullstack_request_response_with_payload_test: $(CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_DEPS) +-include $(CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_fullstack_request_response_with_payload_test: - $(E) "[CLEAN] Cleaning chttp2_fullstack_request_response_with_payload_test files" - $(Q) $(RM) $(CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fullstack_request_response_with_payload_test - CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_SRC = \ CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_SRC)))) -CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fullstack_request_response_with_trailing_metadata_and_payload_test: openssl_dep_error else @@ -7261,28 +6929,23 @@ bins/$(CONFIG)/chttp2_fullstack_request_response_with_trailing_metadata_and_payl endif -deps_chttp2_fullstack_request_response_with_trailing_metadata_and_payload_test: $(CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_DEPS) +deps_chttp2_fullstack_request_response_with_trailing_metadata_and_payload_test: $(CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_DEPS) +-include $(CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_fullstack_request_response_with_trailing_metadata_and_payload_test: - $(E) "[CLEAN] Cleaning chttp2_fullstack_request_response_with_trailing_metadata_and_payload_test files" - $(Q) $(RM) $(CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FULLSTACK_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fullstack_request_response_with_trailing_metadata_and_payload_test - CHTTP2_FULLSTACK_SIMPLE_DELAYED_REQUEST_TEST_SRC = \ CHTTP2_FULLSTACK_SIMPLE_DELAYED_REQUEST_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FULLSTACK_SIMPLE_DELAYED_REQUEST_TEST_SRC)))) -CHTTP2_FULLSTACK_SIMPLE_DELAYED_REQUEST_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FULLSTACK_SIMPLE_DELAYED_REQUEST_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fullstack_simple_delayed_request_test: openssl_dep_error else @@ -7295,28 +6958,23 @@ bins/$(CONFIG)/chttp2_fullstack_simple_delayed_request_test: $(CHTTP2_FULLSTACK_ endif -deps_chttp2_fullstack_simple_delayed_request_test: $(CHTTP2_FULLSTACK_SIMPLE_DELAYED_REQUEST_TEST_DEPS) +deps_chttp2_fullstack_simple_delayed_request_test: $(CHTTP2_FULLSTACK_SIMPLE_DELAYED_REQUEST_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FULLSTACK_SIMPLE_DELAYED_REQUEST_TEST_DEPS) +-include $(CHTTP2_FULLSTACK_SIMPLE_DELAYED_REQUEST_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_fullstack_simple_delayed_request_test: - $(E) "[CLEAN] Cleaning chttp2_fullstack_simple_delayed_request_test files" - $(Q) $(RM) $(CHTTP2_FULLSTACK_SIMPLE_DELAYED_REQUEST_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FULLSTACK_SIMPLE_DELAYED_REQUEST_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fullstack_simple_delayed_request_test - CHTTP2_FULLSTACK_SIMPLE_REQUEST_TEST_SRC = \ CHTTP2_FULLSTACK_SIMPLE_REQUEST_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FULLSTACK_SIMPLE_REQUEST_TEST_SRC)))) -CHTTP2_FULLSTACK_SIMPLE_REQUEST_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FULLSTACK_SIMPLE_REQUEST_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fullstack_simple_request_test: openssl_dep_error else @@ -7329,28 +6987,23 @@ bins/$(CONFIG)/chttp2_fullstack_simple_request_test: $(CHTTP2_FULLSTACK_SIMPLE_R endif -deps_chttp2_fullstack_simple_request_test: $(CHTTP2_FULLSTACK_SIMPLE_REQUEST_TEST_DEPS) +deps_chttp2_fullstack_simple_request_test: $(CHTTP2_FULLSTACK_SIMPLE_REQUEST_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FULLSTACK_SIMPLE_REQUEST_TEST_DEPS) +-include $(CHTTP2_FULLSTACK_SIMPLE_REQUEST_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_fullstack_simple_request_test: - $(E) "[CLEAN] Cleaning chttp2_fullstack_simple_request_test files" - $(Q) $(RM) $(CHTTP2_FULLSTACK_SIMPLE_REQUEST_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FULLSTACK_SIMPLE_REQUEST_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fullstack_simple_request_test - CHTTP2_FULLSTACK_THREAD_STRESS_TEST_SRC = \ CHTTP2_FULLSTACK_THREAD_STRESS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FULLSTACK_THREAD_STRESS_TEST_SRC)))) -CHTTP2_FULLSTACK_THREAD_STRESS_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FULLSTACK_THREAD_STRESS_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fullstack_thread_stress_test: openssl_dep_error else @@ -7363,28 +7016,23 @@ bins/$(CONFIG)/chttp2_fullstack_thread_stress_test: $(CHTTP2_FULLSTACK_THREAD_ST endif -deps_chttp2_fullstack_thread_stress_test: $(CHTTP2_FULLSTACK_THREAD_STRESS_TEST_DEPS) +deps_chttp2_fullstack_thread_stress_test: $(CHTTP2_FULLSTACK_THREAD_STRESS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FULLSTACK_THREAD_STRESS_TEST_DEPS) +-include $(CHTTP2_FULLSTACK_THREAD_STRESS_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_fullstack_thread_stress_test: - $(E) "[CLEAN] Cleaning chttp2_fullstack_thread_stress_test files" - $(Q) $(RM) $(CHTTP2_FULLSTACK_THREAD_STRESS_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FULLSTACK_THREAD_STRESS_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fullstack_thread_stress_test - CHTTP2_FULLSTACK_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_SRC = \ CHTTP2_FULLSTACK_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_FULLSTACK_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_SRC)))) -CHTTP2_FULLSTACK_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_FULLSTACK_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_fullstack_writes_done_hangs_with_pending_read_test: openssl_dep_error else @@ -7397,28 +7045,23 @@ bins/$(CONFIG)/chttp2_fullstack_writes_done_hangs_with_pending_read_test: $(CHTT endif -deps_chttp2_fullstack_writes_done_hangs_with_pending_read_test: $(CHTTP2_FULLSTACK_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_DEPS) +deps_chttp2_fullstack_writes_done_hangs_with_pending_read_test: $(CHTTP2_FULLSTACK_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_FULLSTACK_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_DEPS) +-include $(CHTTP2_FULLSTACK_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_fullstack_writes_done_hangs_with_pending_read_test: - $(E) "[CLEAN] Cleaning chttp2_fullstack_writes_done_hangs_with_pending_read_test files" - $(Q) $(RM) $(CHTTP2_FULLSTACK_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_FULLSTACK_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_fullstack_writes_done_hangs_with_pending_read_test - CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_AFTER_ACCEPT_TEST_SRC = \ CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_AFTER_ACCEPT_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_AFTER_ACCEPT_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_AFTER_ACCEPT_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_AFTER_ACCEPT_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_accept_test: openssl_dep_error else @@ -7431,28 +7074,23 @@ bins/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_accept_test: $(CHTTP2_SI endif -deps_chttp2_simple_ssl_fullstack_cancel_after_accept_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_AFTER_ACCEPT_TEST_DEPS) +deps_chttp2_simple_ssl_fullstack_cancel_after_accept_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_AFTER_ACCEPT_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_AFTER_ACCEPT_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_AFTER_ACCEPT_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_simple_ssl_fullstack_cancel_after_accept_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_fullstack_cancel_after_accept_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_AFTER_ACCEPT_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_AFTER_ACCEPT_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_accept_test - CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_SRC = \ CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_accept_and_writes_closed_test: openssl_dep_error else @@ -7465,28 +7103,23 @@ bins/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_accept_and_writes_closed endif -deps_chttp2_simple_ssl_fullstack_cancel_after_accept_and_writes_closed_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_DEPS) +deps_chttp2_simple_ssl_fullstack_cancel_after_accept_and_writes_closed_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_simple_ssl_fullstack_cancel_after_accept_and_writes_closed_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_fullstack_cancel_after_accept_and_writes_closed_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_accept_and_writes_closed_test - CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_AFTER_INVOKE_TEST_SRC = \ CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_AFTER_INVOKE_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_AFTER_INVOKE_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_AFTER_INVOKE_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_AFTER_INVOKE_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_invoke_test: openssl_dep_error else @@ -7499,28 +7132,23 @@ bins/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_invoke_test: $(CHTTP2_SI endif -deps_chttp2_simple_ssl_fullstack_cancel_after_invoke_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_AFTER_INVOKE_TEST_DEPS) +deps_chttp2_simple_ssl_fullstack_cancel_after_invoke_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_AFTER_INVOKE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_AFTER_INVOKE_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_AFTER_INVOKE_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_simple_ssl_fullstack_cancel_after_invoke_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_fullstack_cancel_after_invoke_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_AFTER_INVOKE_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_AFTER_INVOKE_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_invoke_test - CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_BEFORE_INVOKE_TEST_SRC = \ CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_BEFORE_INVOKE_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_BEFORE_INVOKE_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_BEFORE_INVOKE_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_BEFORE_INVOKE_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_before_invoke_test: openssl_dep_error else @@ -7533,28 +7161,23 @@ bins/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_before_invoke_test: $(CHTTP2_S endif -deps_chttp2_simple_ssl_fullstack_cancel_before_invoke_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_BEFORE_INVOKE_TEST_DEPS) +deps_chttp2_simple_ssl_fullstack_cancel_before_invoke_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_BEFORE_INVOKE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_BEFORE_INVOKE_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_BEFORE_INVOKE_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_simple_ssl_fullstack_cancel_before_invoke_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_fullstack_cancel_before_invoke_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_BEFORE_INVOKE_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_BEFORE_INVOKE_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_before_invoke_test - CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_IN_A_VACUUM_TEST_SRC = \ CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_IN_A_VACUUM_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_IN_A_VACUUM_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_IN_A_VACUUM_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_IN_A_VACUUM_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_in_a_vacuum_test: openssl_dep_error else @@ -7567,28 +7190,23 @@ bins/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_in_a_vacuum_test: $(CHTTP2_SIM endif -deps_chttp2_simple_ssl_fullstack_cancel_in_a_vacuum_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_IN_A_VACUUM_TEST_DEPS) +deps_chttp2_simple_ssl_fullstack_cancel_in_a_vacuum_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_IN_A_VACUUM_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_IN_A_VACUUM_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_IN_A_VACUUM_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_simple_ssl_fullstack_cancel_in_a_vacuum_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_fullstack_cancel_in_a_vacuum_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_IN_A_VACUUM_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_CANCEL_IN_A_VACUUM_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_in_a_vacuum_test - CHTTP2_SIMPLE_SSL_FULLSTACK_CENSUS_SIMPLE_REQUEST_TEST_SRC = \ CHTTP2_SIMPLE_SSL_FULLSTACK_CENSUS_SIMPLE_REQUEST_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_CENSUS_SIMPLE_REQUEST_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_FULLSTACK_CENSUS_SIMPLE_REQUEST_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_CENSUS_SIMPLE_REQUEST_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_fullstack_census_simple_request_test: openssl_dep_error else @@ -7601,28 +7219,23 @@ bins/$(CONFIG)/chttp2_simple_ssl_fullstack_census_simple_request_test: $(CHTTP2_ endif -deps_chttp2_simple_ssl_fullstack_census_simple_request_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_CENSUS_SIMPLE_REQUEST_TEST_DEPS) +deps_chttp2_simple_ssl_fullstack_census_simple_request_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_CENSUS_SIMPLE_REQUEST_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_FULLSTACK_CENSUS_SIMPLE_REQUEST_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_FULLSTACK_CENSUS_SIMPLE_REQUEST_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_simple_ssl_fullstack_census_simple_request_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_fullstack_census_simple_request_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_CENSUS_SIMPLE_REQUEST_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_CENSUS_SIMPLE_REQUEST_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_fullstack_census_simple_request_test - CHTTP2_SIMPLE_SSL_FULLSTACK_DISAPPEARING_SERVER_TEST_SRC = \ CHTTP2_SIMPLE_SSL_FULLSTACK_DISAPPEARING_SERVER_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_DISAPPEARING_SERVER_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_FULLSTACK_DISAPPEARING_SERVER_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_DISAPPEARING_SERVER_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_fullstack_disappearing_server_test: openssl_dep_error else @@ -7635,28 +7248,23 @@ bins/$(CONFIG)/chttp2_simple_ssl_fullstack_disappearing_server_test: $(CHTTP2_SI endif -deps_chttp2_simple_ssl_fullstack_disappearing_server_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_DISAPPEARING_SERVER_TEST_DEPS) +deps_chttp2_simple_ssl_fullstack_disappearing_server_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_DISAPPEARING_SERVER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_FULLSTACK_DISAPPEARING_SERVER_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_FULLSTACK_DISAPPEARING_SERVER_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_simple_ssl_fullstack_disappearing_server_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_fullstack_disappearing_server_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_DISAPPEARING_SERVER_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_DISAPPEARING_SERVER_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_fullstack_disappearing_server_test - CHTTP2_SIMPLE_SSL_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_SRC = \ CHTTP2_SIMPLE_SSL_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_inflight_calls_test: openssl_dep_error else @@ -7669,28 +7277,23 @@ bins/$(CONFIG)/chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_inflig endif -deps_chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_inflight_calls_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_DEPS) +deps_chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_inflight_calls_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_inflight_calls_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_inflight_calls_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_inflight_calls_test - CHTTP2_SIMPLE_SSL_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_SRC = \ CHTTP2_SIMPLE_SSL_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_tags_test: openssl_dep_error else @@ -7703,28 +7306,52 @@ bins/$(CONFIG)/chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_tags_t endif -deps_chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_tags_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_DEPS) +deps_chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_tags_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_tags_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_tags_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_tags_test + +CHTTP2_SIMPLE_SSL_FULLSTACK_GRACEFUL_SERVER_SHUTDOWN_TEST_SRC = \ + +CHTTP2_SIMPLE_SSL_FULLSTACK_GRACEFUL_SERVER_SHUTDOWN_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_GRACEFUL_SERVER_SHUTDOWN_TEST_SRC)))) + +ifeq ($(NO_SECURE),true) + +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/chttp2_simple_ssl_fullstack_graceful_server_shutdown_test: openssl_dep_error + +else + +bins/$(CONFIG)/chttp2_simple_ssl_fullstack_graceful_server_shutdown_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_GRACEFUL_SERVER_SHUTDOWN_TEST_OBJS) libs/$(CONFIG)/libend2end_fixture_chttp2_simple_ssl_fullstack.a libs/$(CONFIG)/libend2end_test_graceful_server_shutdown.a libs/$(CONFIG)/libend2end_certs.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a + $(E) "[LD] Linking $@" + $(Q) mkdir -p `dirname $@` + $(Q) $(LD) $(LDFLAGS) $(CHTTP2_SIMPLE_SSL_FULLSTACK_GRACEFUL_SERVER_SHUTDOWN_TEST_OBJS) libs/$(CONFIG)/libend2end_fixture_chttp2_simple_ssl_fullstack.a libs/$(CONFIG)/libend2end_test_graceful_server_shutdown.a libs/$(CONFIG)/libend2end_certs.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/chttp2_simple_ssl_fullstack_graceful_server_shutdown_test + +endif + + +deps_chttp2_simple_ssl_fullstack_graceful_server_shutdown_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_GRACEFUL_SERVER_SHUTDOWN_TEST_OBJS:.o=.dep) + +ifneq ($(NO_SECURE),true) +ifneq ($(NO_DEPS),true) +-include $(CHTTP2_SIMPLE_SSL_FULLSTACK_GRACEFUL_SERVER_SHUTDOWN_TEST_OBJS:.o=.dep) +endif +endif CHTTP2_SIMPLE_SSL_FULLSTACK_INVOKE_LARGE_REQUEST_TEST_SRC = \ CHTTP2_SIMPLE_SSL_FULLSTACK_INVOKE_LARGE_REQUEST_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_INVOKE_LARGE_REQUEST_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_FULLSTACK_INVOKE_LARGE_REQUEST_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_INVOKE_LARGE_REQUEST_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_fullstack_invoke_large_request_test: openssl_dep_error else @@ -7737,28 +7364,23 @@ bins/$(CONFIG)/chttp2_simple_ssl_fullstack_invoke_large_request_test: $(CHTTP2_S endif -deps_chttp2_simple_ssl_fullstack_invoke_large_request_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_INVOKE_LARGE_REQUEST_TEST_DEPS) +deps_chttp2_simple_ssl_fullstack_invoke_large_request_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_INVOKE_LARGE_REQUEST_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_FULLSTACK_INVOKE_LARGE_REQUEST_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_FULLSTACK_INVOKE_LARGE_REQUEST_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_simple_ssl_fullstack_invoke_large_request_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_fullstack_invoke_large_request_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_INVOKE_LARGE_REQUEST_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_INVOKE_LARGE_REQUEST_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_fullstack_invoke_large_request_test - CHTTP2_SIMPLE_SSL_FULLSTACK_MAX_CONCURRENT_STREAMS_TEST_SRC = \ CHTTP2_SIMPLE_SSL_FULLSTACK_MAX_CONCURRENT_STREAMS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_MAX_CONCURRENT_STREAMS_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_FULLSTACK_MAX_CONCURRENT_STREAMS_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_MAX_CONCURRENT_STREAMS_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_fullstack_max_concurrent_streams_test: openssl_dep_error else @@ -7771,28 +7393,23 @@ bins/$(CONFIG)/chttp2_simple_ssl_fullstack_max_concurrent_streams_test: $(CHTTP2 endif -deps_chttp2_simple_ssl_fullstack_max_concurrent_streams_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_MAX_CONCURRENT_STREAMS_TEST_DEPS) +deps_chttp2_simple_ssl_fullstack_max_concurrent_streams_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_MAX_CONCURRENT_STREAMS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_FULLSTACK_MAX_CONCURRENT_STREAMS_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_FULLSTACK_MAX_CONCURRENT_STREAMS_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_simple_ssl_fullstack_max_concurrent_streams_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_fullstack_max_concurrent_streams_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_MAX_CONCURRENT_STREAMS_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_MAX_CONCURRENT_STREAMS_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_fullstack_max_concurrent_streams_test - CHTTP2_SIMPLE_SSL_FULLSTACK_NO_OP_TEST_SRC = \ CHTTP2_SIMPLE_SSL_FULLSTACK_NO_OP_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_NO_OP_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_FULLSTACK_NO_OP_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_NO_OP_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_fullstack_no_op_test: openssl_dep_error else @@ -7805,28 +7422,23 @@ bins/$(CONFIG)/chttp2_simple_ssl_fullstack_no_op_test: $(CHTTP2_SIMPLE_SSL_FULLS endif -deps_chttp2_simple_ssl_fullstack_no_op_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_NO_OP_TEST_DEPS) +deps_chttp2_simple_ssl_fullstack_no_op_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_NO_OP_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_FULLSTACK_NO_OP_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_FULLSTACK_NO_OP_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_simple_ssl_fullstack_no_op_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_fullstack_no_op_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_NO_OP_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_NO_OP_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_fullstack_no_op_test - CHTTP2_SIMPLE_SSL_FULLSTACK_PING_PONG_STREAMING_TEST_SRC = \ CHTTP2_SIMPLE_SSL_FULLSTACK_PING_PONG_STREAMING_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_PING_PONG_STREAMING_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_FULLSTACK_PING_PONG_STREAMING_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_PING_PONG_STREAMING_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_fullstack_ping_pong_streaming_test: openssl_dep_error else @@ -7839,28 +7451,23 @@ bins/$(CONFIG)/chttp2_simple_ssl_fullstack_ping_pong_streaming_test: $(CHTTP2_SI endif -deps_chttp2_simple_ssl_fullstack_ping_pong_streaming_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_PING_PONG_STREAMING_TEST_DEPS) +deps_chttp2_simple_ssl_fullstack_ping_pong_streaming_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_PING_PONG_STREAMING_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_FULLSTACK_PING_PONG_STREAMING_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_FULLSTACK_PING_PONG_STREAMING_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_simple_ssl_fullstack_ping_pong_streaming_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_fullstack_ping_pong_streaming_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_PING_PONG_STREAMING_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_PING_PONG_STREAMING_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_fullstack_ping_pong_streaming_test - CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_SRC = \ CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_binary_metadata_and_payload_test: openssl_dep_error else @@ -7873,28 +7480,23 @@ bins/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_binary_metadata endif -deps_chttp2_simple_ssl_fullstack_request_response_with_binary_metadata_and_payload_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_DEPS) +deps_chttp2_simple_ssl_fullstack_request_response_with_binary_metadata_and_payload_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_simple_ssl_fullstack_request_response_with_binary_metadata_and_payload_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_fullstack_request_response_with_binary_metadata_and_payload_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_binary_metadata_and_payload_test - CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_SRC = \ CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_metadata_and_payload_test: openssl_dep_error else @@ -7907,28 +7509,23 @@ bins/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_metadata_and_pa endif -deps_chttp2_simple_ssl_fullstack_request_response_with_metadata_and_payload_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_DEPS) +deps_chttp2_simple_ssl_fullstack_request_response_with_metadata_and_payload_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_simple_ssl_fullstack_request_response_with_metadata_and_payload_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_fullstack_request_response_with_metadata_and_payload_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_metadata_and_payload_test - CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_SRC = \ CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_payload_test: openssl_dep_error else @@ -7941,28 +7538,23 @@ bins/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_payload_test: $ endif -deps_chttp2_simple_ssl_fullstack_request_response_with_payload_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_DEPS) +deps_chttp2_simple_ssl_fullstack_request_response_with_payload_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_simple_ssl_fullstack_request_response_with_payload_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_fullstack_request_response_with_payload_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_payload_test - CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_SRC = \ CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_trailing_metadata_and_payload_test: openssl_dep_error else @@ -7975,28 +7567,23 @@ bins/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_trailing_metada endif -deps_chttp2_simple_ssl_fullstack_request_response_with_trailing_metadata_and_payload_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_DEPS) +deps_chttp2_simple_ssl_fullstack_request_response_with_trailing_metadata_and_payload_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_simple_ssl_fullstack_request_response_with_trailing_metadata_and_payload_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_fullstack_request_response_with_trailing_metadata_and_payload_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_trailing_metadata_and_payload_test - CHTTP2_SIMPLE_SSL_FULLSTACK_SIMPLE_DELAYED_REQUEST_TEST_SRC = \ CHTTP2_SIMPLE_SSL_FULLSTACK_SIMPLE_DELAYED_REQUEST_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_SIMPLE_DELAYED_REQUEST_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_FULLSTACK_SIMPLE_DELAYED_REQUEST_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_SIMPLE_DELAYED_REQUEST_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_fullstack_simple_delayed_request_test: openssl_dep_error else @@ -8009,28 +7596,23 @@ bins/$(CONFIG)/chttp2_simple_ssl_fullstack_simple_delayed_request_test: $(CHTTP2 endif -deps_chttp2_simple_ssl_fullstack_simple_delayed_request_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_SIMPLE_DELAYED_REQUEST_TEST_DEPS) +deps_chttp2_simple_ssl_fullstack_simple_delayed_request_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_SIMPLE_DELAYED_REQUEST_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_FULLSTACK_SIMPLE_DELAYED_REQUEST_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_FULLSTACK_SIMPLE_DELAYED_REQUEST_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_simple_ssl_fullstack_simple_delayed_request_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_fullstack_simple_delayed_request_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_SIMPLE_DELAYED_REQUEST_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_SIMPLE_DELAYED_REQUEST_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_fullstack_simple_delayed_request_test - CHTTP2_SIMPLE_SSL_FULLSTACK_SIMPLE_REQUEST_TEST_SRC = \ CHTTP2_SIMPLE_SSL_FULLSTACK_SIMPLE_REQUEST_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_SIMPLE_REQUEST_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_FULLSTACK_SIMPLE_REQUEST_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_SIMPLE_REQUEST_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_fullstack_simple_request_test: openssl_dep_error else @@ -8043,28 +7625,23 @@ bins/$(CONFIG)/chttp2_simple_ssl_fullstack_simple_request_test: $(CHTTP2_SIMPLE_ endif -deps_chttp2_simple_ssl_fullstack_simple_request_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_SIMPLE_REQUEST_TEST_DEPS) +deps_chttp2_simple_ssl_fullstack_simple_request_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_SIMPLE_REQUEST_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_FULLSTACK_SIMPLE_REQUEST_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_FULLSTACK_SIMPLE_REQUEST_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_simple_ssl_fullstack_simple_request_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_fullstack_simple_request_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_SIMPLE_REQUEST_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_SIMPLE_REQUEST_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_fullstack_simple_request_test - CHTTP2_SIMPLE_SSL_FULLSTACK_THREAD_STRESS_TEST_SRC = \ CHTTP2_SIMPLE_SSL_FULLSTACK_THREAD_STRESS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_THREAD_STRESS_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_FULLSTACK_THREAD_STRESS_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_THREAD_STRESS_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_fullstack_thread_stress_test: openssl_dep_error else @@ -8077,28 +7654,23 @@ bins/$(CONFIG)/chttp2_simple_ssl_fullstack_thread_stress_test: $(CHTTP2_SIMPLE_S endif -deps_chttp2_simple_ssl_fullstack_thread_stress_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_THREAD_STRESS_TEST_DEPS) +deps_chttp2_simple_ssl_fullstack_thread_stress_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_THREAD_STRESS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_FULLSTACK_THREAD_STRESS_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_FULLSTACK_THREAD_STRESS_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_simple_ssl_fullstack_thread_stress_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_fullstack_thread_stress_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_THREAD_STRESS_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_THREAD_STRESS_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_fullstack_thread_stress_test - CHTTP2_SIMPLE_SSL_FULLSTACK_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_SRC = \ CHTTP2_SIMPLE_SSL_FULLSTACK_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_FULLSTACK_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_FULLSTACK_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_fullstack_writes_done_hangs_with_pending_read_test: openssl_dep_error else @@ -8111,28 +7683,23 @@ bins/$(CONFIG)/chttp2_simple_ssl_fullstack_writes_done_hangs_with_pending_read_t endif -deps_chttp2_simple_ssl_fullstack_writes_done_hangs_with_pending_read_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_DEPS) +deps_chttp2_simple_ssl_fullstack_writes_done_hangs_with_pending_read_test: $(CHTTP2_SIMPLE_SSL_FULLSTACK_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_FULLSTACK_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_FULLSTACK_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_simple_ssl_fullstack_writes_done_hangs_with_pending_read_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_fullstack_writes_done_hangs_with_pending_read_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_FULLSTACK_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_fullstack_writes_done_hangs_with_pending_read_test - CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_AFTER_ACCEPT_TEST_SRC = \ CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_AFTER_ACCEPT_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_AFTER_ACCEPT_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_AFTER_ACCEPT_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_AFTER_ACCEPT_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_test: openssl_dep_error else @@ -8145,28 +7712,23 @@ bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_test: endif -deps_chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_AFTER_ACCEPT_TEST_DEPS) +deps_chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_AFTER_ACCEPT_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_AFTER_ACCEPT_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_AFTER_ACCEPT_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_AFTER_ACCEPT_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_AFTER_ACCEPT_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_test - CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_SRC = \ CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_and_writes_closed_test: openssl_dep_error else @@ -8179,28 +7741,23 @@ bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_and_w endif -deps_chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_and_writes_closed_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_DEPS) +deps_chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_and_writes_closed_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_and_writes_closed_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_and_writes_closed_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_and_writes_closed_test - CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_AFTER_INVOKE_TEST_SRC = \ CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_AFTER_INVOKE_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_AFTER_INVOKE_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_AFTER_INVOKE_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_AFTER_INVOKE_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_invoke_test: openssl_dep_error else @@ -8213,28 +7770,23 @@ bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_invoke_test: endif -deps_chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_invoke_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_AFTER_INVOKE_TEST_DEPS) +deps_chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_invoke_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_AFTER_INVOKE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_AFTER_INVOKE_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_AFTER_INVOKE_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_invoke_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_invoke_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_AFTER_INVOKE_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_AFTER_INVOKE_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_invoke_test - CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_BEFORE_INVOKE_TEST_SRC = \ CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_BEFORE_INVOKE_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_BEFORE_INVOKE_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_BEFORE_INVOKE_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_BEFORE_INVOKE_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_before_invoke_test: openssl_dep_error else @@ -8247,28 +7799,23 @@ bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_before_invoke_test endif -deps_chttp2_simple_ssl_with_oauth2_fullstack_cancel_before_invoke_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_BEFORE_INVOKE_TEST_DEPS) +deps_chttp2_simple_ssl_with_oauth2_fullstack_cancel_before_invoke_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_BEFORE_INVOKE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_BEFORE_INVOKE_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_BEFORE_INVOKE_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_simple_ssl_with_oauth2_fullstack_cancel_before_invoke_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_with_oauth2_fullstack_cancel_before_invoke_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_BEFORE_INVOKE_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_BEFORE_INVOKE_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_before_invoke_test - CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_IN_A_VACUUM_TEST_SRC = \ CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_IN_A_VACUUM_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_IN_A_VACUUM_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_IN_A_VACUUM_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_IN_A_VACUUM_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_in_a_vacuum_test: openssl_dep_error else @@ -8281,28 +7828,23 @@ bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_in_a_vacuum_test: endif -deps_chttp2_simple_ssl_with_oauth2_fullstack_cancel_in_a_vacuum_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_IN_A_VACUUM_TEST_DEPS) +deps_chttp2_simple_ssl_with_oauth2_fullstack_cancel_in_a_vacuum_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_IN_A_VACUUM_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_IN_A_VACUUM_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_IN_A_VACUUM_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_simple_ssl_with_oauth2_fullstack_cancel_in_a_vacuum_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_with_oauth2_fullstack_cancel_in_a_vacuum_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_IN_A_VACUUM_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CANCEL_IN_A_VACUUM_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_in_a_vacuum_test - CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CENSUS_SIMPLE_REQUEST_TEST_SRC = \ CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CENSUS_SIMPLE_REQUEST_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CENSUS_SIMPLE_REQUEST_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CENSUS_SIMPLE_REQUEST_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CENSUS_SIMPLE_REQUEST_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_census_simple_request_test: openssl_dep_error else @@ -8315,28 +7857,23 @@ bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_census_simple_request_tes endif -deps_chttp2_simple_ssl_with_oauth2_fullstack_census_simple_request_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CENSUS_SIMPLE_REQUEST_TEST_DEPS) +deps_chttp2_simple_ssl_with_oauth2_fullstack_census_simple_request_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CENSUS_SIMPLE_REQUEST_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CENSUS_SIMPLE_REQUEST_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CENSUS_SIMPLE_REQUEST_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_simple_ssl_with_oauth2_fullstack_census_simple_request_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_with_oauth2_fullstack_census_simple_request_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CENSUS_SIMPLE_REQUEST_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_CENSUS_SIMPLE_REQUEST_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_census_simple_request_test - CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_DISAPPEARING_SERVER_TEST_SRC = \ CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_DISAPPEARING_SERVER_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_DISAPPEARING_SERVER_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_DISAPPEARING_SERVER_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_DISAPPEARING_SERVER_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_disappearing_server_test: openssl_dep_error else @@ -8349,28 +7886,23 @@ bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_disappearing_server_test: endif -deps_chttp2_simple_ssl_with_oauth2_fullstack_disappearing_server_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_DISAPPEARING_SERVER_TEST_DEPS) +deps_chttp2_simple_ssl_with_oauth2_fullstack_disappearing_server_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_DISAPPEARING_SERVER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_DISAPPEARING_SERVER_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_DISAPPEARING_SERVER_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_simple_ssl_with_oauth2_fullstack_disappearing_server_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_with_oauth2_fullstack_disappearing_server_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_DISAPPEARING_SERVER_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_DISAPPEARING_SERVER_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_disappearing_server_test - CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_SRC = \ CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_inflight_calls_test: openssl_dep_error else @@ -8383,28 +7915,23 @@ bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_fin endif -deps_chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_inflight_calls_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_DEPS) +deps_chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_inflight_calls_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_inflight_calls_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_inflight_calls_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_inflight_calls_test - CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_SRC = \ CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_tags_test: openssl_dep_error else @@ -8417,28 +7944,52 @@ bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_fin endif -deps_chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_tags_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_DEPS) +deps_chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_tags_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_OBJS:.o=.dep) +endif endif + + +CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_GRACEFUL_SERVER_SHUTDOWN_TEST_SRC = \ + +CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_GRACEFUL_SERVER_SHUTDOWN_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_GRACEFUL_SERVER_SHUTDOWN_TEST_SRC)))) + +ifeq ($(NO_SECURE),true) + +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_graceful_server_shutdown_test: openssl_dep_error + +else + +bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_graceful_server_shutdown_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_GRACEFUL_SERVER_SHUTDOWN_TEST_OBJS) libs/$(CONFIG)/libend2end_fixture_chttp2_simple_ssl_with_oauth2_fullstack.a libs/$(CONFIG)/libend2end_test_graceful_server_shutdown.a libs/$(CONFIG)/libend2end_certs.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a + $(E) "[LD] Linking $@" + $(Q) mkdir -p `dirname $@` + $(Q) $(LD) $(LDFLAGS) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_GRACEFUL_SERVER_SHUTDOWN_TEST_OBJS) libs/$(CONFIG)/libend2end_fixture_chttp2_simple_ssl_with_oauth2_fullstack.a libs/$(CONFIG)/libend2end_test_graceful_server_shutdown.a libs/$(CONFIG)/libend2end_certs.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_graceful_server_shutdown_test + endif -clean_chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_tags_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_tags_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_tags_test + +deps_chttp2_simple_ssl_with_oauth2_fullstack_graceful_server_shutdown_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_GRACEFUL_SERVER_SHUTDOWN_TEST_OBJS:.o=.dep) + +ifneq ($(NO_SECURE),true) +ifneq ($(NO_DEPS),true) +-include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_GRACEFUL_SERVER_SHUTDOWN_TEST_OBJS:.o=.dep) +endif +endif CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_INVOKE_LARGE_REQUEST_TEST_SRC = \ CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_INVOKE_LARGE_REQUEST_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_INVOKE_LARGE_REQUEST_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_INVOKE_LARGE_REQUEST_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_INVOKE_LARGE_REQUEST_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_invoke_large_request_test: openssl_dep_error else @@ -8451,28 +8002,23 @@ bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_invoke_large_request_test endif -deps_chttp2_simple_ssl_with_oauth2_fullstack_invoke_large_request_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_INVOKE_LARGE_REQUEST_TEST_DEPS) +deps_chttp2_simple_ssl_with_oauth2_fullstack_invoke_large_request_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_INVOKE_LARGE_REQUEST_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_INVOKE_LARGE_REQUEST_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_INVOKE_LARGE_REQUEST_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_simple_ssl_with_oauth2_fullstack_invoke_large_request_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_with_oauth2_fullstack_invoke_large_request_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_INVOKE_LARGE_REQUEST_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_INVOKE_LARGE_REQUEST_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_invoke_large_request_test - CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_MAX_CONCURRENT_STREAMS_TEST_SRC = \ CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_MAX_CONCURRENT_STREAMS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_MAX_CONCURRENT_STREAMS_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_MAX_CONCURRENT_STREAMS_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_MAX_CONCURRENT_STREAMS_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_max_concurrent_streams_test: openssl_dep_error else @@ -8485,28 +8031,23 @@ bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_max_concurrent_streams_te endif -deps_chttp2_simple_ssl_with_oauth2_fullstack_max_concurrent_streams_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_MAX_CONCURRENT_STREAMS_TEST_DEPS) +deps_chttp2_simple_ssl_with_oauth2_fullstack_max_concurrent_streams_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_MAX_CONCURRENT_STREAMS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_MAX_CONCURRENT_STREAMS_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_MAX_CONCURRENT_STREAMS_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_simple_ssl_with_oauth2_fullstack_max_concurrent_streams_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_with_oauth2_fullstack_max_concurrent_streams_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_MAX_CONCURRENT_STREAMS_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_MAX_CONCURRENT_STREAMS_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_max_concurrent_streams_test - CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_NO_OP_TEST_SRC = \ CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_NO_OP_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_NO_OP_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_NO_OP_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_NO_OP_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_no_op_test: openssl_dep_error else @@ -8519,28 +8060,23 @@ bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_no_op_test: $(CHTTP2_SIMP endif -deps_chttp2_simple_ssl_with_oauth2_fullstack_no_op_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_NO_OP_TEST_DEPS) +deps_chttp2_simple_ssl_with_oauth2_fullstack_no_op_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_NO_OP_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_NO_OP_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_NO_OP_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_simple_ssl_with_oauth2_fullstack_no_op_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_with_oauth2_fullstack_no_op_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_NO_OP_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_NO_OP_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_no_op_test - CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_PING_PONG_STREAMING_TEST_SRC = \ CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_PING_PONG_STREAMING_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_PING_PONG_STREAMING_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_PING_PONG_STREAMING_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_PING_PONG_STREAMING_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_ping_pong_streaming_test: openssl_dep_error else @@ -8553,28 +8089,23 @@ bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_ping_pong_streaming_test: endif -deps_chttp2_simple_ssl_with_oauth2_fullstack_ping_pong_streaming_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_PING_PONG_STREAMING_TEST_DEPS) +deps_chttp2_simple_ssl_with_oauth2_fullstack_ping_pong_streaming_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_PING_PONG_STREAMING_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_PING_PONG_STREAMING_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_PING_PONG_STREAMING_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_simple_ssl_with_oauth2_fullstack_ping_pong_streaming_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_with_oauth2_fullstack_ping_pong_streaming_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_PING_PONG_STREAMING_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_PING_PONG_STREAMING_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_ping_pong_streaming_test - CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_SRC = \ CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_binary_metadata_and_payload_test: openssl_dep_error else @@ -8587,28 +8118,23 @@ bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_bin endif -deps_chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_binary_metadata_and_payload_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_DEPS) +deps_chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_binary_metadata_and_payload_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_binary_metadata_and_payload_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_binary_metadata_and_payload_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_binary_metadata_and_payload_test - CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_SRC = \ CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_metadata_and_payload_test: openssl_dep_error else @@ -8621,28 +8147,23 @@ bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_met endif -deps_chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_metadata_and_payload_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_DEPS) +deps_chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_metadata_and_payload_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_metadata_and_payload_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_metadata_and_payload_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_metadata_and_payload_test - CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_SRC = \ CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_payload_test: openssl_dep_error else @@ -8655,28 +8176,23 @@ bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_pay endif -deps_chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_payload_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_DEPS) +deps_chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_payload_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_payload_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_payload_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_payload_test - CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_SRC = \ CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_trailing_metadata_and_payload_test: openssl_dep_error else @@ -8689,28 +8205,23 @@ bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_tra endif -deps_chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_trailing_metadata_and_payload_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_DEPS) +deps_chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_trailing_metadata_and_payload_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_trailing_metadata_and_payload_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_trailing_metadata_and_payload_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_trailing_metadata_and_payload_test - CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_SIMPLE_DELAYED_REQUEST_TEST_SRC = \ CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_SIMPLE_DELAYED_REQUEST_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_SIMPLE_DELAYED_REQUEST_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_SIMPLE_DELAYED_REQUEST_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_SIMPLE_DELAYED_REQUEST_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_simple_delayed_request_test: openssl_dep_error else @@ -8723,28 +8234,23 @@ bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_simple_delayed_request_te endif -deps_chttp2_simple_ssl_with_oauth2_fullstack_simple_delayed_request_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_SIMPLE_DELAYED_REQUEST_TEST_DEPS) +deps_chttp2_simple_ssl_with_oauth2_fullstack_simple_delayed_request_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_SIMPLE_DELAYED_REQUEST_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_SIMPLE_DELAYED_REQUEST_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_SIMPLE_DELAYED_REQUEST_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_simple_ssl_with_oauth2_fullstack_simple_delayed_request_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_with_oauth2_fullstack_simple_delayed_request_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_SIMPLE_DELAYED_REQUEST_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_SIMPLE_DELAYED_REQUEST_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_simple_delayed_request_test - CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_SIMPLE_REQUEST_TEST_SRC = \ CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_SIMPLE_REQUEST_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_SIMPLE_REQUEST_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_SIMPLE_REQUEST_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_SIMPLE_REQUEST_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_simple_request_test: openssl_dep_error else @@ -8757,28 +8263,23 @@ bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_simple_request_test: $(CH endif -deps_chttp2_simple_ssl_with_oauth2_fullstack_simple_request_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_SIMPLE_REQUEST_TEST_DEPS) +deps_chttp2_simple_ssl_with_oauth2_fullstack_simple_request_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_SIMPLE_REQUEST_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_SIMPLE_REQUEST_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_SIMPLE_REQUEST_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_simple_ssl_with_oauth2_fullstack_simple_request_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_with_oauth2_fullstack_simple_request_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_SIMPLE_REQUEST_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_SIMPLE_REQUEST_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_simple_request_test - CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_THREAD_STRESS_TEST_SRC = \ CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_THREAD_STRESS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_THREAD_STRESS_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_THREAD_STRESS_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_THREAD_STRESS_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_thread_stress_test: openssl_dep_error else @@ -8791,28 +8292,23 @@ bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_thread_stress_test: $(CHT endif -deps_chttp2_simple_ssl_with_oauth2_fullstack_thread_stress_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_THREAD_STRESS_TEST_DEPS) +deps_chttp2_simple_ssl_with_oauth2_fullstack_thread_stress_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_THREAD_STRESS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_THREAD_STRESS_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_THREAD_STRESS_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_simple_ssl_with_oauth2_fullstack_thread_stress_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_with_oauth2_fullstack_thread_stress_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_THREAD_STRESS_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_THREAD_STRESS_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_thread_stress_test - CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_SRC = \ CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_SRC)))) -CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_writes_done_hangs_with_pending_read_test: openssl_dep_error else @@ -8825,28 +8321,23 @@ bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_writes_done_hangs_with_pe endif -deps_chttp2_simple_ssl_with_oauth2_fullstack_writes_done_hangs_with_pending_read_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_DEPS) +deps_chttp2_simple_ssl_with_oauth2_fullstack_writes_done_hangs_with_pending_read_test: $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_DEPS) +-include $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_simple_ssl_with_oauth2_fullstack_writes_done_hangs_with_pending_read_test: - $(E) "[CLEAN] Cleaning chttp2_simple_ssl_with_oauth2_fullstack_writes_done_hangs_with_pending_read_test files" - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_writes_done_hangs_with_pending_read_test - CHTTP2_SOCKET_PAIR_CANCEL_AFTER_ACCEPT_TEST_SRC = \ CHTTP2_SOCKET_PAIR_CANCEL_AFTER_ACCEPT_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_CANCEL_AFTER_ACCEPT_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_CANCEL_AFTER_ACCEPT_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_CANCEL_AFTER_ACCEPT_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_cancel_after_accept_test: openssl_dep_error else @@ -8859,28 +8350,23 @@ bins/$(CONFIG)/chttp2_socket_pair_cancel_after_accept_test: $(CHTTP2_SOCKET_PAIR endif -deps_chttp2_socket_pair_cancel_after_accept_test: $(CHTTP2_SOCKET_PAIR_CANCEL_AFTER_ACCEPT_TEST_DEPS) +deps_chttp2_socket_pair_cancel_after_accept_test: $(CHTTP2_SOCKET_PAIR_CANCEL_AFTER_ACCEPT_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_CANCEL_AFTER_ACCEPT_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_CANCEL_AFTER_ACCEPT_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_socket_pair_cancel_after_accept_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_cancel_after_accept_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_CANCEL_AFTER_ACCEPT_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_CANCEL_AFTER_ACCEPT_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_cancel_after_accept_test - CHTTP2_SOCKET_PAIR_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_SRC = \ CHTTP2_SOCKET_PAIR_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_cancel_after_accept_and_writes_closed_test: openssl_dep_error else @@ -8893,28 +8379,23 @@ bins/$(CONFIG)/chttp2_socket_pair_cancel_after_accept_and_writes_closed_test: $( endif -deps_chttp2_socket_pair_cancel_after_accept_and_writes_closed_test: $(CHTTP2_SOCKET_PAIR_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_DEPS) +deps_chttp2_socket_pair_cancel_after_accept_and_writes_closed_test: $(CHTTP2_SOCKET_PAIR_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_socket_pair_cancel_after_accept_and_writes_closed_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_cancel_after_accept_and_writes_closed_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_cancel_after_accept_and_writes_closed_test - CHTTP2_SOCKET_PAIR_CANCEL_AFTER_INVOKE_TEST_SRC = \ CHTTP2_SOCKET_PAIR_CANCEL_AFTER_INVOKE_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_CANCEL_AFTER_INVOKE_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_CANCEL_AFTER_INVOKE_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_CANCEL_AFTER_INVOKE_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_cancel_after_invoke_test: openssl_dep_error else @@ -8927,28 +8408,23 @@ bins/$(CONFIG)/chttp2_socket_pair_cancel_after_invoke_test: $(CHTTP2_SOCKET_PAIR endif -deps_chttp2_socket_pair_cancel_after_invoke_test: $(CHTTP2_SOCKET_PAIR_CANCEL_AFTER_INVOKE_TEST_DEPS) +deps_chttp2_socket_pair_cancel_after_invoke_test: $(CHTTP2_SOCKET_PAIR_CANCEL_AFTER_INVOKE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_CANCEL_AFTER_INVOKE_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_CANCEL_AFTER_INVOKE_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_socket_pair_cancel_after_invoke_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_cancel_after_invoke_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_CANCEL_AFTER_INVOKE_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_CANCEL_AFTER_INVOKE_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_cancel_after_invoke_test - CHTTP2_SOCKET_PAIR_CANCEL_BEFORE_INVOKE_TEST_SRC = \ CHTTP2_SOCKET_PAIR_CANCEL_BEFORE_INVOKE_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_CANCEL_BEFORE_INVOKE_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_CANCEL_BEFORE_INVOKE_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_CANCEL_BEFORE_INVOKE_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_cancel_before_invoke_test: openssl_dep_error else @@ -8961,28 +8437,23 @@ bins/$(CONFIG)/chttp2_socket_pair_cancel_before_invoke_test: $(CHTTP2_SOCKET_PAI endif -deps_chttp2_socket_pair_cancel_before_invoke_test: $(CHTTP2_SOCKET_PAIR_CANCEL_BEFORE_INVOKE_TEST_DEPS) +deps_chttp2_socket_pair_cancel_before_invoke_test: $(CHTTP2_SOCKET_PAIR_CANCEL_BEFORE_INVOKE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_CANCEL_BEFORE_INVOKE_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_CANCEL_BEFORE_INVOKE_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_socket_pair_cancel_before_invoke_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_cancel_before_invoke_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_CANCEL_BEFORE_INVOKE_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_CANCEL_BEFORE_INVOKE_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_cancel_before_invoke_test - CHTTP2_SOCKET_PAIR_CANCEL_IN_A_VACUUM_TEST_SRC = \ CHTTP2_SOCKET_PAIR_CANCEL_IN_A_VACUUM_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_CANCEL_IN_A_VACUUM_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_CANCEL_IN_A_VACUUM_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_CANCEL_IN_A_VACUUM_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_cancel_in_a_vacuum_test: openssl_dep_error else @@ -8995,28 +8466,23 @@ bins/$(CONFIG)/chttp2_socket_pair_cancel_in_a_vacuum_test: $(CHTTP2_SOCKET_PAIR_ endif -deps_chttp2_socket_pair_cancel_in_a_vacuum_test: $(CHTTP2_SOCKET_PAIR_CANCEL_IN_A_VACUUM_TEST_DEPS) +deps_chttp2_socket_pair_cancel_in_a_vacuum_test: $(CHTTP2_SOCKET_PAIR_CANCEL_IN_A_VACUUM_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_CANCEL_IN_A_VACUUM_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_CANCEL_IN_A_VACUUM_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_socket_pair_cancel_in_a_vacuum_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_cancel_in_a_vacuum_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_CANCEL_IN_A_VACUUM_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_CANCEL_IN_A_VACUUM_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_cancel_in_a_vacuum_test - CHTTP2_SOCKET_PAIR_CENSUS_SIMPLE_REQUEST_TEST_SRC = \ CHTTP2_SOCKET_PAIR_CENSUS_SIMPLE_REQUEST_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_CENSUS_SIMPLE_REQUEST_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_CENSUS_SIMPLE_REQUEST_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_CENSUS_SIMPLE_REQUEST_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_census_simple_request_test: openssl_dep_error else @@ -9029,28 +8495,23 @@ bins/$(CONFIG)/chttp2_socket_pair_census_simple_request_test: $(CHTTP2_SOCKET_PA endif -deps_chttp2_socket_pair_census_simple_request_test: $(CHTTP2_SOCKET_PAIR_CENSUS_SIMPLE_REQUEST_TEST_DEPS) +deps_chttp2_socket_pair_census_simple_request_test: $(CHTTP2_SOCKET_PAIR_CENSUS_SIMPLE_REQUEST_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_CENSUS_SIMPLE_REQUEST_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_CENSUS_SIMPLE_REQUEST_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_socket_pair_census_simple_request_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_census_simple_request_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_CENSUS_SIMPLE_REQUEST_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_CENSUS_SIMPLE_REQUEST_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_census_simple_request_test - CHTTP2_SOCKET_PAIR_DISAPPEARING_SERVER_TEST_SRC = \ CHTTP2_SOCKET_PAIR_DISAPPEARING_SERVER_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_DISAPPEARING_SERVER_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_DISAPPEARING_SERVER_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_DISAPPEARING_SERVER_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_disappearing_server_test: openssl_dep_error else @@ -9063,28 +8524,23 @@ bins/$(CONFIG)/chttp2_socket_pair_disappearing_server_test: $(CHTTP2_SOCKET_PAIR endif -deps_chttp2_socket_pair_disappearing_server_test: $(CHTTP2_SOCKET_PAIR_DISAPPEARING_SERVER_TEST_DEPS) +deps_chttp2_socket_pair_disappearing_server_test: $(CHTTP2_SOCKET_PAIR_DISAPPEARING_SERVER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_DISAPPEARING_SERVER_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_DISAPPEARING_SERVER_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_socket_pair_disappearing_server_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_disappearing_server_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_DISAPPEARING_SERVER_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_DISAPPEARING_SERVER_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_disappearing_server_test - CHTTP2_SOCKET_PAIR_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_SRC = \ CHTTP2_SOCKET_PAIR_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_inflight_calls_test: openssl_dep_error else @@ -9097,28 +8553,23 @@ bins/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_inflight_calls_ endif -deps_chttp2_socket_pair_early_server_shutdown_finishes_inflight_calls_test: $(CHTTP2_SOCKET_PAIR_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_DEPS) +deps_chttp2_socket_pair_early_server_shutdown_finishes_inflight_calls_test: $(CHTTP2_SOCKET_PAIR_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_socket_pair_early_server_shutdown_finishes_inflight_calls_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_early_server_shutdown_finishes_inflight_calls_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_inflight_calls_test - CHTTP2_SOCKET_PAIR_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_SRC = \ CHTTP2_SOCKET_PAIR_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_tags_test: openssl_dep_error else @@ -9131,28 +8582,52 @@ bins/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_tags_test: $(CH endif -deps_chttp2_socket_pair_early_server_shutdown_finishes_tags_test: $(CHTTP2_SOCKET_PAIR_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_DEPS) +deps_chttp2_socket_pair_early_server_shutdown_finishes_tags_test: $(CHTTP2_SOCKET_PAIR_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_socket_pair_early_server_shutdown_finishes_tags_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_early_server_shutdown_finishes_tags_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_tags_test + +CHTTP2_SOCKET_PAIR_GRACEFUL_SERVER_SHUTDOWN_TEST_SRC = \ + +CHTTP2_SOCKET_PAIR_GRACEFUL_SERVER_SHUTDOWN_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_GRACEFUL_SERVER_SHUTDOWN_TEST_SRC)))) + +ifeq ($(NO_SECURE),true) + +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/chttp2_socket_pair_graceful_server_shutdown_test: openssl_dep_error + +else + +bins/$(CONFIG)/chttp2_socket_pair_graceful_server_shutdown_test: $(CHTTP2_SOCKET_PAIR_GRACEFUL_SERVER_SHUTDOWN_TEST_OBJS) libs/$(CONFIG)/libend2end_fixture_chttp2_socket_pair.a libs/$(CONFIG)/libend2end_test_graceful_server_shutdown.a libs/$(CONFIG)/libend2end_certs.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a + $(E) "[LD] Linking $@" + $(Q) mkdir -p `dirname $@` + $(Q) $(LD) $(LDFLAGS) $(CHTTP2_SOCKET_PAIR_GRACEFUL_SERVER_SHUTDOWN_TEST_OBJS) libs/$(CONFIG)/libend2end_fixture_chttp2_socket_pair.a libs/$(CONFIG)/libend2end_test_graceful_server_shutdown.a libs/$(CONFIG)/libend2end_certs.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/chttp2_socket_pair_graceful_server_shutdown_test + +endif + + +deps_chttp2_socket_pair_graceful_server_shutdown_test: $(CHTTP2_SOCKET_PAIR_GRACEFUL_SERVER_SHUTDOWN_TEST_OBJS:.o=.dep) + +ifneq ($(NO_SECURE),true) +ifneq ($(NO_DEPS),true) +-include $(CHTTP2_SOCKET_PAIR_GRACEFUL_SERVER_SHUTDOWN_TEST_OBJS:.o=.dep) +endif +endif CHTTP2_SOCKET_PAIR_INVOKE_LARGE_REQUEST_TEST_SRC = \ CHTTP2_SOCKET_PAIR_INVOKE_LARGE_REQUEST_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_INVOKE_LARGE_REQUEST_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_INVOKE_LARGE_REQUEST_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_INVOKE_LARGE_REQUEST_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_invoke_large_request_test: openssl_dep_error else @@ -9165,28 +8640,23 @@ bins/$(CONFIG)/chttp2_socket_pair_invoke_large_request_test: $(CHTTP2_SOCKET_PAI endif -deps_chttp2_socket_pair_invoke_large_request_test: $(CHTTP2_SOCKET_PAIR_INVOKE_LARGE_REQUEST_TEST_DEPS) +deps_chttp2_socket_pair_invoke_large_request_test: $(CHTTP2_SOCKET_PAIR_INVOKE_LARGE_REQUEST_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_INVOKE_LARGE_REQUEST_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_INVOKE_LARGE_REQUEST_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_socket_pair_invoke_large_request_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_invoke_large_request_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_INVOKE_LARGE_REQUEST_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_INVOKE_LARGE_REQUEST_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_invoke_large_request_test - CHTTP2_SOCKET_PAIR_MAX_CONCURRENT_STREAMS_TEST_SRC = \ CHTTP2_SOCKET_PAIR_MAX_CONCURRENT_STREAMS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_MAX_CONCURRENT_STREAMS_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_MAX_CONCURRENT_STREAMS_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_MAX_CONCURRENT_STREAMS_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_max_concurrent_streams_test: openssl_dep_error else @@ -9199,28 +8669,23 @@ bins/$(CONFIG)/chttp2_socket_pair_max_concurrent_streams_test: $(CHTTP2_SOCKET_P endif -deps_chttp2_socket_pair_max_concurrent_streams_test: $(CHTTP2_SOCKET_PAIR_MAX_CONCURRENT_STREAMS_TEST_DEPS) +deps_chttp2_socket_pair_max_concurrent_streams_test: $(CHTTP2_SOCKET_PAIR_MAX_CONCURRENT_STREAMS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_MAX_CONCURRENT_STREAMS_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_MAX_CONCURRENT_STREAMS_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_socket_pair_max_concurrent_streams_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_max_concurrent_streams_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_MAX_CONCURRENT_STREAMS_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_MAX_CONCURRENT_STREAMS_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_max_concurrent_streams_test - CHTTP2_SOCKET_PAIR_NO_OP_TEST_SRC = \ CHTTP2_SOCKET_PAIR_NO_OP_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_NO_OP_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_NO_OP_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_NO_OP_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_no_op_test: openssl_dep_error else @@ -9233,28 +8698,23 @@ bins/$(CONFIG)/chttp2_socket_pair_no_op_test: $(CHTTP2_SOCKET_PAIR_NO_OP_TEST_OB endif -deps_chttp2_socket_pair_no_op_test: $(CHTTP2_SOCKET_PAIR_NO_OP_TEST_DEPS) +deps_chttp2_socket_pair_no_op_test: $(CHTTP2_SOCKET_PAIR_NO_OP_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_NO_OP_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_NO_OP_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_socket_pair_no_op_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_no_op_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_NO_OP_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_NO_OP_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_no_op_test - CHTTP2_SOCKET_PAIR_PING_PONG_STREAMING_TEST_SRC = \ CHTTP2_SOCKET_PAIR_PING_PONG_STREAMING_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_PING_PONG_STREAMING_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_PING_PONG_STREAMING_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_PING_PONG_STREAMING_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_ping_pong_streaming_test: openssl_dep_error else @@ -9267,28 +8727,23 @@ bins/$(CONFIG)/chttp2_socket_pair_ping_pong_streaming_test: $(CHTTP2_SOCKET_PAIR endif -deps_chttp2_socket_pair_ping_pong_streaming_test: $(CHTTP2_SOCKET_PAIR_PING_PONG_STREAMING_TEST_DEPS) +deps_chttp2_socket_pair_ping_pong_streaming_test: $(CHTTP2_SOCKET_PAIR_PING_PONG_STREAMING_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_PING_PONG_STREAMING_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_PING_PONG_STREAMING_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_socket_pair_ping_pong_streaming_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_ping_pong_streaming_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_PING_PONG_STREAMING_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_PING_PONG_STREAMING_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_ping_pong_streaming_test - CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_SRC = \ CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_request_response_with_binary_metadata_and_payload_test: openssl_dep_error else @@ -9301,28 +8756,23 @@ bins/$(CONFIG)/chttp2_socket_pair_request_response_with_binary_metadata_and_payl endif -deps_chttp2_socket_pair_request_response_with_binary_metadata_and_payload_test: $(CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_DEPS) +deps_chttp2_socket_pair_request_response_with_binary_metadata_and_payload_test: $(CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_socket_pair_request_response_with_binary_metadata_and_payload_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_request_response_with_binary_metadata_and_payload_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_request_response_with_binary_metadata_and_payload_test - CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_SRC = \ CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_request_response_with_metadata_and_payload_test: openssl_dep_error else @@ -9335,28 +8785,23 @@ bins/$(CONFIG)/chttp2_socket_pair_request_response_with_metadata_and_payload_tes endif -deps_chttp2_socket_pair_request_response_with_metadata_and_payload_test: $(CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_DEPS) +deps_chttp2_socket_pair_request_response_with_metadata_and_payload_test: $(CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_socket_pair_request_response_with_metadata_and_payload_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_request_response_with_metadata_and_payload_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_request_response_with_metadata_and_payload_test - CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_SRC = \ CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_request_response_with_payload_test: openssl_dep_error else @@ -9369,28 +8814,23 @@ bins/$(CONFIG)/chttp2_socket_pair_request_response_with_payload_test: $(CHTTP2_S endif -deps_chttp2_socket_pair_request_response_with_payload_test: $(CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_DEPS) +deps_chttp2_socket_pair_request_response_with_payload_test: $(CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_socket_pair_request_response_with_payload_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_request_response_with_payload_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_request_response_with_payload_test - CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_SRC = \ CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_request_response_with_trailing_metadata_and_payload_test: openssl_dep_error else @@ -9403,28 +8843,23 @@ bins/$(CONFIG)/chttp2_socket_pair_request_response_with_trailing_metadata_and_pa endif -deps_chttp2_socket_pair_request_response_with_trailing_metadata_and_payload_test: $(CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_DEPS) +deps_chttp2_socket_pair_request_response_with_trailing_metadata_and_payload_test: $(CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_socket_pair_request_response_with_trailing_metadata_and_payload_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_request_response_with_trailing_metadata_and_payload_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_request_response_with_trailing_metadata_and_payload_test - CHTTP2_SOCKET_PAIR_SIMPLE_DELAYED_REQUEST_TEST_SRC = \ CHTTP2_SOCKET_PAIR_SIMPLE_DELAYED_REQUEST_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_SIMPLE_DELAYED_REQUEST_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_SIMPLE_DELAYED_REQUEST_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_SIMPLE_DELAYED_REQUEST_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_simple_delayed_request_test: openssl_dep_error else @@ -9437,28 +8872,23 @@ bins/$(CONFIG)/chttp2_socket_pair_simple_delayed_request_test: $(CHTTP2_SOCKET_P endif -deps_chttp2_socket_pair_simple_delayed_request_test: $(CHTTP2_SOCKET_PAIR_SIMPLE_DELAYED_REQUEST_TEST_DEPS) +deps_chttp2_socket_pair_simple_delayed_request_test: $(CHTTP2_SOCKET_PAIR_SIMPLE_DELAYED_REQUEST_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_SIMPLE_DELAYED_REQUEST_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_SIMPLE_DELAYED_REQUEST_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_socket_pair_simple_delayed_request_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_simple_delayed_request_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_SIMPLE_DELAYED_REQUEST_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_SIMPLE_DELAYED_REQUEST_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_simple_delayed_request_test - CHTTP2_SOCKET_PAIR_SIMPLE_REQUEST_TEST_SRC = \ CHTTP2_SOCKET_PAIR_SIMPLE_REQUEST_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_SIMPLE_REQUEST_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_SIMPLE_REQUEST_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_SIMPLE_REQUEST_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_simple_request_test: openssl_dep_error else @@ -9471,28 +8901,23 @@ bins/$(CONFIG)/chttp2_socket_pair_simple_request_test: $(CHTTP2_SOCKET_PAIR_SIMP endif -deps_chttp2_socket_pair_simple_request_test: $(CHTTP2_SOCKET_PAIR_SIMPLE_REQUEST_TEST_DEPS) +deps_chttp2_socket_pair_simple_request_test: $(CHTTP2_SOCKET_PAIR_SIMPLE_REQUEST_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_SIMPLE_REQUEST_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_SIMPLE_REQUEST_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_socket_pair_simple_request_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_simple_request_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_SIMPLE_REQUEST_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_SIMPLE_REQUEST_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_simple_request_test - CHTTP2_SOCKET_PAIR_THREAD_STRESS_TEST_SRC = \ CHTTP2_SOCKET_PAIR_THREAD_STRESS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_THREAD_STRESS_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_THREAD_STRESS_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_THREAD_STRESS_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_thread_stress_test: openssl_dep_error else @@ -9505,28 +8930,23 @@ bins/$(CONFIG)/chttp2_socket_pair_thread_stress_test: $(CHTTP2_SOCKET_PAIR_THREA endif -deps_chttp2_socket_pair_thread_stress_test: $(CHTTP2_SOCKET_PAIR_THREAD_STRESS_TEST_DEPS) +deps_chttp2_socket_pair_thread_stress_test: $(CHTTP2_SOCKET_PAIR_THREAD_STRESS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_THREAD_STRESS_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_THREAD_STRESS_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_socket_pair_thread_stress_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_thread_stress_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_THREAD_STRESS_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_THREAD_STRESS_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_thread_stress_test - CHTTP2_SOCKET_PAIR_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_SRC = \ CHTTP2_SOCKET_PAIR_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_writes_done_hangs_with_pending_read_test: openssl_dep_error else @@ -9539,28 +8959,23 @@ bins/$(CONFIG)/chttp2_socket_pair_writes_done_hangs_with_pending_read_test: $(CH endif -deps_chttp2_socket_pair_writes_done_hangs_with_pending_read_test: $(CHTTP2_SOCKET_PAIR_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_DEPS) +deps_chttp2_socket_pair_writes_done_hangs_with_pending_read_test: $(CHTTP2_SOCKET_PAIR_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_socket_pair_writes_done_hangs_with_pending_read_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_writes_done_hangs_with_pending_read_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_writes_done_hangs_with_pending_read_test - CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_AFTER_ACCEPT_TEST_SRC = \ CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_AFTER_ACCEPT_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_AFTER_ACCEPT_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_AFTER_ACCEPT_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_AFTER_ACCEPT_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_test: openssl_dep_error else @@ -9573,28 +8988,23 @@ bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_test: $ endif -deps_chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_AFTER_ACCEPT_TEST_DEPS) +deps_chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_AFTER_ACCEPT_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_AFTER_ACCEPT_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_AFTER_ACCEPT_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_AFTER_ACCEPT_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_AFTER_ACCEPT_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_test - CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_SRC = \ CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_and_writes_closed_test: openssl_dep_error else @@ -9607,28 +9017,23 @@ bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_and_wri endif -deps_chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_and_writes_closed_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_DEPS) +deps_chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_and_writes_closed_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_and_writes_closed_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_and_writes_closed_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_and_writes_closed_test - CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_AFTER_INVOKE_TEST_SRC = \ CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_AFTER_INVOKE_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_AFTER_INVOKE_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_AFTER_INVOKE_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_AFTER_INVOKE_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_invoke_test: openssl_dep_error else @@ -9641,28 +9046,23 @@ bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_invoke_test: $ endif -deps_chttp2_socket_pair_one_byte_at_a_time_cancel_after_invoke_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_AFTER_INVOKE_TEST_DEPS) +deps_chttp2_socket_pair_one_byte_at_a_time_cancel_after_invoke_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_AFTER_INVOKE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_AFTER_INVOKE_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_AFTER_INVOKE_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_socket_pair_one_byte_at_a_time_cancel_after_invoke_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_one_byte_at_a_time_cancel_after_invoke_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_AFTER_INVOKE_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_AFTER_INVOKE_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_invoke_test - CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_BEFORE_INVOKE_TEST_SRC = \ CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_BEFORE_INVOKE_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_BEFORE_INVOKE_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_BEFORE_INVOKE_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_BEFORE_INVOKE_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_before_invoke_test: openssl_dep_error else @@ -9675,28 +9075,23 @@ bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_before_invoke_test: endif -deps_chttp2_socket_pair_one_byte_at_a_time_cancel_before_invoke_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_BEFORE_INVOKE_TEST_DEPS) +deps_chttp2_socket_pair_one_byte_at_a_time_cancel_before_invoke_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_BEFORE_INVOKE_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_BEFORE_INVOKE_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_BEFORE_INVOKE_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_socket_pair_one_byte_at_a_time_cancel_before_invoke_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_one_byte_at_a_time_cancel_before_invoke_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_BEFORE_INVOKE_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_BEFORE_INVOKE_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_before_invoke_test - CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_IN_A_VACUUM_TEST_SRC = \ CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_IN_A_VACUUM_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_IN_A_VACUUM_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_IN_A_VACUUM_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_IN_A_VACUUM_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_in_a_vacuum_test: openssl_dep_error else @@ -9709,28 +9104,23 @@ bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_in_a_vacuum_test: $( endif -deps_chttp2_socket_pair_one_byte_at_a_time_cancel_in_a_vacuum_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_IN_A_VACUUM_TEST_DEPS) +deps_chttp2_socket_pair_one_byte_at_a_time_cancel_in_a_vacuum_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_IN_A_VACUUM_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_IN_A_VACUUM_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_IN_A_VACUUM_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_socket_pair_one_byte_at_a_time_cancel_in_a_vacuum_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_one_byte_at_a_time_cancel_in_a_vacuum_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_IN_A_VACUUM_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CANCEL_IN_A_VACUUM_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_in_a_vacuum_test - CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CENSUS_SIMPLE_REQUEST_TEST_SRC = \ CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CENSUS_SIMPLE_REQUEST_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CENSUS_SIMPLE_REQUEST_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CENSUS_SIMPLE_REQUEST_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CENSUS_SIMPLE_REQUEST_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_census_simple_request_test: openssl_dep_error else @@ -9743,28 +9133,23 @@ bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_census_simple_request_test: endif -deps_chttp2_socket_pair_one_byte_at_a_time_census_simple_request_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CENSUS_SIMPLE_REQUEST_TEST_DEPS) +deps_chttp2_socket_pair_one_byte_at_a_time_census_simple_request_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CENSUS_SIMPLE_REQUEST_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CENSUS_SIMPLE_REQUEST_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CENSUS_SIMPLE_REQUEST_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_socket_pair_one_byte_at_a_time_census_simple_request_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_one_byte_at_a_time_census_simple_request_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CENSUS_SIMPLE_REQUEST_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_CENSUS_SIMPLE_REQUEST_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_census_simple_request_test - CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_DISAPPEARING_SERVER_TEST_SRC = \ CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_DISAPPEARING_SERVER_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_DISAPPEARING_SERVER_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_DISAPPEARING_SERVER_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_DISAPPEARING_SERVER_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_disappearing_server_test: openssl_dep_error else @@ -9777,28 +9162,23 @@ bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_disappearing_server_test: $ endif -deps_chttp2_socket_pair_one_byte_at_a_time_disappearing_server_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_DISAPPEARING_SERVER_TEST_DEPS) +deps_chttp2_socket_pair_one_byte_at_a_time_disappearing_server_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_DISAPPEARING_SERVER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_DISAPPEARING_SERVER_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_DISAPPEARING_SERVER_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_socket_pair_one_byte_at_a_time_disappearing_server_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_one_byte_at_a_time_disappearing_server_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_DISAPPEARING_SERVER_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_DISAPPEARING_SERVER_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_disappearing_server_test - CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_SRC = \ CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_inflight_calls_test: openssl_dep_error else @@ -9811,28 +9191,23 @@ bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finis endif -deps_chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_inflight_calls_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_DEPS) +deps_chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_inflight_calls_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_inflight_calls_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_inflight_calls_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_inflight_calls_test - CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_SRC = \ CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_tags_test: openssl_dep_error else @@ -9845,28 +9220,52 @@ bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finis endif -deps_chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_tags_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_DEPS) +deps_chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_tags_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_OBJS:.o=.dep) +endif endif + + +CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_GRACEFUL_SERVER_SHUTDOWN_TEST_SRC = \ + +CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_GRACEFUL_SERVER_SHUTDOWN_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_GRACEFUL_SERVER_SHUTDOWN_TEST_SRC)))) + +ifeq ($(NO_SECURE),true) + +# You can't build secure targets if you don't have OpenSSL with ALPN. + +bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_graceful_server_shutdown_test: openssl_dep_error + +else + +bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_graceful_server_shutdown_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_GRACEFUL_SERVER_SHUTDOWN_TEST_OBJS) libs/$(CONFIG)/libend2end_fixture_chttp2_socket_pair_one_byte_at_a_time.a libs/$(CONFIG)/libend2end_test_graceful_server_shutdown.a libs/$(CONFIG)/libend2end_certs.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a + $(E) "[LD] Linking $@" + $(Q) mkdir -p `dirname $@` + $(Q) $(LD) $(LDFLAGS) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_GRACEFUL_SERVER_SHUTDOWN_TEST_OBJS) libs/$(CONFIG)/libend2end_fixture_chttp2_socket_pair_one_byte_at_a_time.a libs/$(CONFIG)/libend2end_test_graceful_server_shutdown.a libs/$(CONFIG)/libend2end_certs.a libs/$(CONFIG)/libgrpc_test_util.a libs/$(CONFIG)/libgrpc.a libs/$(CONFIG)/libgpr_test_util.a libs/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_graceful_server_shutdown_test + endif -clean_chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_tags_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_tags_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_tags_test + +deps_chttp2_socket_pair_one_byte_at_a_time_graceful_server_shutdown_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_GRACEFUL_SERVER_SHUTDOWN_TEST_OBJS:.o=.dep) + +ifneq ($(NO_SECURE),true) +ifneq ($(NO_DEPS),true) +-include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_GRACEFUL_SERVER_SHUTDOWN_TEST_OBJS:.o=.dep) +endif +endif CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_INVOKE_LARGE_REQUEST_TEST_SRC = \ CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_INVOKE_LARGE_REQUEST_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_INVOKE_LARGE_REQUEST_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_INVOKE_LARGE_REQUEST_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_INVOKE_LARGE_REQUEST_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_test: openssl_dep_error else @@ -9879,28 +9278,23 @@ bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_test: endif -deps_chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_INVOKE_LARGE_REQUEST_TEST_DEPS) +deps_chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_INVOKE_LARGE_REQUEST_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_INVOKE_LARGE_REQUEST_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_INVOKE_LARGE_REQUEST_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_INVOKE_LARGE_REQUEST_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_INVOKE_LARGE_REQUEST_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_test - CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_MAX_CONCURRENT_STREAMS_TEST_SRC = \ CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_MAX_CONCURRENT_STREAMS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_MAX_CONCURRENT_STREAMS_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_MAX_CONCURRENT_STREAMS_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_MAX_CONCURRENT_STREAMS_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_max_concurrent_streams_test: openssl_dep_error else @@ -9913,28 +9307,23 @@ bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_max_concurrent_streams_test endif -deps_chttp2_socket_pair_one_byte_at_a_time_max_concurrent_streams_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_MAX_CONCURRENT_STREAMS_TEST_DEPS) +deps_chttp2_socket_pair_one_byte_at_a_time_max_concurrent_streams_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_MAX_CONCURRENT_STREAMS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_MAX_CONCURRENT_STREAMS_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_MAX_CONCURRENT_STREAMS_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_socket_pair_one_byte_at_a_time_max_concurrent_streams_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_one_byte_at_a_time_max_concurrent_streams_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_MAX_CONCURRENT_STREAMS_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_MAX_CONCURRENT_STREAMS_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_max_concurrent_streams_test - CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_NO_OP_TEST_SRC = \ CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_NO_OP_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_NO_OP_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_NO_OP_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_NO_OP_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_no_op_test: openssl_dep_error else @@ -9947,28 +9336,23 @@ bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_no_op_test: $(CHTTP2_SOCKET endif -deps_chttp2_socket_pair_one_byte_at_a_time_no_op_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_NO_OP_TEST_DEPS) +deps_chttp2_socket_pair_one_byte_at_a_time_no_op_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_NO_OP_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_NO_OP_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_NO_OP_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_socket_pair_one_byte_at_a_time_no_op_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_one_byte_at_a_time_no_op_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_NO_OP_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_NO_OP_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_no_op_test - CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_PING_PONG_STREAMING_TEST_SRC = \ CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_PING_PONG_STREAMING_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_PING_PONG_STREAMING_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_PING_PONG_STREAMING_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_PING_PONG_STREAMING_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_ping_pong_streaming_test: openssl_dep_error else @@ -9981,28 +9365,23 @@ bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_ping_pong_streaming_test: $ endif -deps_chttp2_socket_pair_one_byte_at_a_time_ping_pong_streaming_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_PING_PONG_STREAMING_TEST_DEPS) +deps_chttp2_socket_pair_one_byte_at_a_time_ping_pong_streaming_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_PING_PONG_STREAMING_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_PING_PONG_STREAMING_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_PING_PONG_STREAMING_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_socket_pair_one_byte_at_a_time_ping_pong_streaming_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_one_byte_at_a_time_ping_pong_streaming_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_PING_PONG_STREAMING_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_PING_PONG_STREAMING_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_ping_pong_streaming_test - CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_SRC = \ CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_binary_metadata_and_payload_test: openssl_dep_error else @@ -10015,28 +9394,23 @@ bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_binar endif -deps_chttp2_socket_pair_one_byte_at_a_time_request_response_with_binary_metadata_and_payload_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_DEPS) +deps_chttp2_socket_pair_one_byte_at_a_time_request_response_with_binary_metadata_and_payload_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_socket_pair_one_byte_at_a_time_request_response_with_binary_metadata_and_payload_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_one_byte_at_a_time_request_response_with_binary_metadata_and_payload_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_binary_metadata_and_payload_test - CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_SRC = \ CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_metadata_and_payload_test: openssl_dep_error else @@ -10049,28 +9423,23 @@ bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_metad endif -deps_chttp2_socket_pair_one_byte_at_a_time_request_response_with_metadata_and_payload_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_DEPS) +deps_chttp2_socket_pair_one_byte_at_a_time_request_response_with_metadata_and_payload_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_socket_pair_one_byte_at_a_time_request_response_with_metadata_and_payload_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_one_byte_at_a_time_request_response_with_metadata_and_payload_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_metadata_and_payload_test - CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_SRC = \ CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_payload_test: openssl_dep_error else @@ -10083,28 +9452,23 @@ bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_paylo endif -deps_chttp2_socket_pair_one_byte_at_a_time_request_response_with_payload_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_DEPS) +deps_chttp2_socket_pair_one_byte_at_a_time_request_response_with_payload_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_socket_pair_one_byte_at_a_time_request_response_with_payload_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_one_byte_at_a_time_request_response_with_payload_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_PAYLOAD_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_payload_test - CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_SRC = \ CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_trailing_metadata_and_payload_test: openssl_dep_error else @@ -10117,28 +9481,23 @@ bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_trail endif -deps_chttp2_socket_pair_one_byte_at_a_time_request_response_with_trailing_metadata_and_payload_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_DEPS) +deps_chttp2_socket_pair_one_byte_at_a_time_request_response_with_trailing_metadata_and_payload_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_socket_pair_one_byte_at_a_time_request_response_with_trailing_metadata_and_payload_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_one_byte_at_a_time_request_response_with_trailing_metadata_and_payload_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_trailing_metadata_and_payload_test - CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_SIMPLE_DELAYED_REQUEST_TEST_SRC = \ CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_SIMPLE_DELAYED_REQUEST_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_SIMPLE_DELAYED_REQUEST_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_SIMPLE_DELAYED_REQUEST_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_SIMPLE_DELAYED_REQUEST_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_simple_delayed_request_test: openssl_dep_error else @@ -10151,28 +9510,23 @@ bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_simple_delayed_request_test endif -deps_chttp2_socket_pair_one_byte_at_a_time_simple_delayed_request_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_SIMPLE_DELAYED_REQUEST_TEST_DEPS) +deps_chttp2_socket_pair_one_byte_at_a_time_simple_delayed_request_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_SIMPLE_DELAYED_REQUEST_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_SIMPLE_DELAYED_REQUEST_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_SIMPLE_DELAYED_REQUEST_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_socket_pair_one_byte_at_a_time_simple_delayed_request_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_one_byte_at_a_time_simple_delayed_request_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_SIMPLE_DELAYED_REQUEST_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_SIMPLE_DELAYED_REQUEST_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_simple_delayed_request_test - CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_SIMPLE_REQUEST_TEST_SRC = \ CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_SIMPLE_REQUEST_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_SIMPLE_REQUEST_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_SIMPLE_REQUEST_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_SIMPLE_REQUEST_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_simple_request_test: openssl_dep_error else @@ -10185,28 +9539,23 @@ bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_simple_request_test: $(CHTT endif -deps_chttp2_socket_pair_one_byte_at_a_time_simple_request_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_SIMPLE_REQUEST_TEST_DEPS) +deps_chttp2_socket_pair_one_byte_at_a_time_simple_request_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_SIMPLE_REQUEST_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_SIMPLE_REQUEST_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_SIMPLE_REQUEST_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_socket_pair_one_byte_at_a_time_simple_request_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_one_byte_at_a_time_simple_request_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_SIMPLE_REQUEST_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_SIMPLE_REQUEST_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_simple_request_test - CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_THREAD_STRESS_TEST_SRC = \ CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_THREAD_STRESS_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_THREAD_STRESS_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_THREAD_STRESS_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_THREAD_STRESS_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_thread_stress_test: openssl_dep_error else @@ -10219,28 +9568,23 @@ bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_thread_stress_test: $(CHTTP endif -deps_chttp2_socket_pair_one_byte_at_a_time_thread_stress_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_THREAD_STRESS_TEST_DEPS) +deps_chttp2_socket_pair_one_byte_at_a_time_thread_stress_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_THREAD_STRESS_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_THREAD_STRESS_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_THREAD_STRESS_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_socket_pair_one_byte_at_a_time_thread_stress_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_one_byte_at_a_time_thread_stress_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_THREAD_STRESS_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_THREAD_STRESS_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_thread_stress_test - CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_SRC = \ CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_SRC)))) -CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_SRC)))) ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_writes_done_hangs_with_pending_read_test: openssl_dep_error else @@ -10253,23 +9597,18 @@ bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_writes_done_hangs_with_pend endif -deps_chttp2_socket_pair_one_byte_at_a_time_writes_done_hangs_with_pending_read_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_DEPS) +deps_chttp2_socket_pair_one_byte_at_a_time_writes_done_hangs_with_pending_read_test: $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_DEPS) +-include $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_OBJS:.o=.dep) endif endif -clean_chttp2_socket_pair_one_byte_at_a_time_writes_done_hangs_with_pending_read_test: - $(E) "[CLEAN] Cleaning chttp2_socket_pair_one_byte_at_a_time_writes_done_hangs_with_pending_read_test files" - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_OBJS) - $(Q) $(RM) $(CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_WRITES_DONE_HANGS_WITH_PENDING_READ_TEST_DEPS) - $(Q) $(RM) bins/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_writes_done_hangs_with_pending_read_test +.PHONY: all strip tools dep_error openssl_dep_error openssl_dep_message git_update stop buildtests buildtests_c buildtests_cxx test test_c test_cxx install install_c install_cxx install-headers install-headers_c install-headers_cxx install-shared install-shared_c install-shared_cxx install-static install-static_c install-static_cxx strip strip-shared strip-static strip_c strip-shared_c strip-static_c strip_cxx strip-shared_cxx strip-static_cxx dep_c dep_cxx bins_dep_c bins_dep_cxx clean -.PHONY: all strip tools dep_error openssl_dep_error openssl_dep_message git_update stop buildtests buildtests_c buildtests_cxx test test_c test_cxx install install_c install_cxx install-headers install-headers_c install-headers_cxx install-shared install-shared_c install-shared_cxx install-static install-static_c install-static_cxx strip strip-shared strip-static strip_c strip-shared_c strip-static_c strip_cxx strip-shared_cxx strip-static_cxx clean dep_c dep_cxx bins_dep_c bins_dep_cxx deps_libgpr clean_libgpr deps_libgrpc clean_libgrpc deps_libgrpc_unsecure clean_libgrpc_unsecure deps_libgpr_test_util clean_libgpr_test_util deps_libgrpc_test_util clean_libgrpc_test_util deps_libgrpc++ clean_libgrpc++ deps_libgrpc++_test_util clean_libgrpc++_test_util deps_libend2end_fixture_chttp2_fake_security clean_libend2end_fixture_chttp2_fake_security deps_libend2end_fixture_chttp2_fullstack clean_libend2end_fixture_chttp2_fullstack deps_libend2end_fixture_chttp2_simple_ssl_fullstack clean_libend2end_fixture_chttp2_simple_ssl_fullstack deps_libend2end_fixture_chttp2_simple_ssl_with_oauth2_fullstack clean_libend2end_fixture_chttp2_simple_ssl_with_oauth2_fullstack deps_libend2end_fixture_chttp2_socket_pair clean_libend2end_fixture_chttp2_socket_pair deps_libend2end_fixture_chttp2_socket_pair_one_byte_at_a_time clean_libend2end_fixture_chttp2_socket_pair_one_byte_at_a_time deps_libend2end_test_cancel_after_accept clean_libend2end_test_cancel_after_accept deps_libend2end_test_cancel_after_accept_and_writes_closed clean_libend2end_test_cancel_after_accept_and_writes_closed deps_libend2end_test_cancel_after_invoke clean_libend2end_test_cancel_after_invoke deps_libend2end_test_cancel_before_invoke clean_libend2end_test_cancel_before_invoke deps_libend2end_test_cancel_in_a_vacuum clean_libend2end_test_cancel_in_a_vacuum deps_libend2end_test_census_simple_request clean_libend2end_test_census_simple_request deps_libend2end_test_disappearing_server clean_libend2end_test_disappearing_server deps_libend2end_test_early_server_shutdown_finishes_inflight_calls clean_libend2end_test_early_server_shutdown_finishes_inflight_calls deps_libend2end_test_early_server_shutdown_finishes_tags clean_libend2end_test_early_server_shutdown_finishes_tags deps_libend2end_test_invoke_large_request clean_libend2end_test_invoke_large_request deps_libend2end_test_max_concurrent_streams clean_libend2end_test_max_concurrent_streams deps_libend2end_test_no_op clean_libend2end_test_no_op deps_libend2end_test_ping_pong_streaming clean_libend2end_test_ping_pong_streaming deps_libend2end_test_request_response_with_binary_metadata_and_payload clean_libend2end_test_request_response_with_binary_metadata_and_payload deps_libend2end_test_request_response_with_metadata_and_payload clean_libend2end_test_request_response_with_metadata_and_payload deps_libend2end_test_request_response_with_payload clean_libend2end_test_request_response_with_payload deps_libend2end_test_request_response_with_trailing_metadata_and_payload clean_libend2end_test_request_response_with_trailing_metadata_and_payload deps_libend2end_test_simple_delayed_request clean_libend2end_test_simple_delayed_request deps_libend2end_test_simple_request clean_libend2end_test_simple_request deps_libend2end_test_thread_stress clean_libend2end_test_thread_stress deps_libend2end_test_writes_done_hangs_with_pending_read clean_libend2end_test_writes_done_hangs_with_pending_read deps_libend2end_certs clean_libend2end_certs deps_gen_hpack_tables clean_gen_hpack_tables deps_cpp_plugin clean_cpp_plugin deps_ruby_plugin clean_ruby_plugin deps_grpc_byte_buffer_reader_test clean_grpc_byte_buffer_reader_test deps_gpr_cancellable_test clean_gpr_cancellable_test deps_gpr_log_test clean_gpr_log_test deps_gpr_useful_test clean_gpr_useful_test deps_gpr_cmdline_test clean_gpr_cmdline_test deps_gpr_histogram_test clean_gpr_histogram_test deps_gpr_host_port_test clean_gpr_host_port_test deps_gpr_slice_buffer_test clean_gpr_slice_buffer_test deps_gpr_slice_test clean_gpr_slice_test deps_gpr_string_test clean_gpr_string_test deps_gpr_sync_test clean_gpr_sync_test deps_gpr_thd_test clean_gpr_thd_test deps_gpr_time_test clean_gpr_time_test deps_murmur_hash_test clean_murmur_hash_test deps_grpc_stream_op_test clean_grpc_stream_op_test deps_alpn_test clean_alpn_test deps_time_averaged_stats_test clean_time_averaged_stats_test deps_chttp2_stream_encoder_test clean_chttp2_stream_encoder_test deps_hpack_table_test clean_hpack_table_test deps_chttp2_stream_map_test clean_chttp2_stream_map_test deps_hpack_parser_test clean_hpack_parser_test deps_transport_metadata_test clean_transport_metadata_test deps_chttp2_status_conversion_test clean_chttp2_status_conversion_test deps_chttp2_transport_end2end_test clean_chttp2_transport_end2end_test deps_tcp_posix_test clean_tcp_posix_test deps_dualstack_socket_test clean_dualstack_socket_test deps_no_server_test clean_no_server_test deps_resolve_address_test clean_resolve_address_test deps_sockaddr_utils_test clean_sockaddr_utils_test deps_tcp_server_posix_test clean_tcp_server_posix_test deps_tcp_client_posix_test clean_tcp_client_posix_test deps_grpc_channel_stack_test clean_grpc_channel_stack_test deps_metadata_buffer_test clean_metadata_buffer_test deps_grpc_completion_queue_test clean_grpc_completion_queue_test deps_grpc_completion_queue_benchmark clean_grpc_completion_queue_benchmark deps_census_trace_store_test clean_census_trace_store_test deps_census_stats_store_test clean_census_stats_store_test deps_census_window_stats_test clean_census_window_stats_test deps_census_statistics_quick_test clean_census_statistics_quick_test deps_census_statistics_small_log_test clean_census_statistics_small_log_test deps_census_statistics_performance_test clean_census_statistics_performance_test deps_census_statistics_multiple_writers_test clean_census_statistics_multiple_writers_test deps_census_statistics_multiple_writers_circular_buffer_test clean_census_statistics_multiple_writers_circular_buffer_test deps_census_stub_test clean_census_stub_test deps_census_hash_table_test clean_census_hash_table_test deps_fling_server clean_fling_server deps_fling_client clean_fling_client deps_fling_test clean_fling_test deps_echo_server clean_echo_server deps_echo_client clean_echo_client deps_echo_test clean_echo_test deps_low_level_ping_pong_benchmark clean_low_level_ping_pong_benchmark deps_message_compress_test clean_message_compress_test deps_bin_encoder_test clean_bin_encoder_test deps_secure_endpoint_test clean_secure_endpoint_test deps_httpcli_format_request_test clean_httpcli_format_request_test deps_httpcli_parser_test clean_httpcli_parser_test deps_httpcli_test clean_httpcli_test deps_grpc_credentials_test clean_grpc_credentials_test deps_grpc_fetch_oauth2 clean_grpc_fetch_oauth2 deps_grpc_base64_test clean_grpc_base64_test deps_grpc_json_token_test clean_grpc_json_token_test deps_timeout_encoding_test clean_timeout_encoding_test deps_fd_posix_test clean_fd_posix_test deps_fling_stream_test clean_fling_stream_test deps_lame_client_test clean_lame_client_test deps_thread_pool_test clean_thread_pool_test deps_status_test clean_status_test deps_sync_client_async_server_test clean_sync_client_async_server_test deps_qps_client clean_qps_client deps_qps_server clean_qps_server deps_interop_server clean_interop_server deps_interop_client clean_interop_client deps_end2end_test clean_end2end_test deps_channel_arguments_test clean_channel_arguments_test deps_credentials_test clean_credentials_test deps_alarm_test clean_alarm_test deps_alarm_list_test clean_alarm_list_test deps_alarm_heap_test clean_alarm_heap_test deps_time_test clean_time_test deps_chttp2_fake_security_cancel_after_accept_test clean_chttp2_fake_security_cancel_after_accept_test deps_chttp2_fake_security_cancel_after_accept_and_writes_closed_test clean_chttp2_fake_security_cancel_after_accept_and_writes_closed_test deps_chttp2_fake_security_cancel_after_invoke_test clean_chttp2_fake_security_cancel_after_invoke_test deps_chttp2_fake_security_cancel_before_invoke_test clean_chttp2_fake_security_cancel_before_invoke_test deps_chttp2_fake_security_cancel_in_a_vacuum_test clean_chttp2_fake_security_cancel_in_a_vacuum_test deps_chttp2_fake_security_census_simple_request_test clean_chttp2_fake_security_census_simple_request_test deps_chttp2_fake_security_disappearing_server_test clean_chttp2_fake_security_disappearing_server_test deps_chttp2_fake_security_early_server_shutdown_finishes_inflight_calls_test clean_chttp2_fake_security_early_server_shutdown_finishes_inflight_calls_test deps_chttp2_fake_security_early_server_shutdown_finishes_tags_test clean_chttp2_fake_security_early_server_shutdown_finishes_tags_test deps_chttp2_fake_security_invoke_large_request_test clean_chttp2_fake_security_invoke_large_request_test deps_chttp2_fake_security_max_concurrent_streams_test clean_chttp2_fake_security_max_concurrent_streams_test deps_chttp2_fake_security_no_op_test clean_chttp2_fake_security_no_op_test deps_chttp2_fake_security_ping_pong_streaming_test clean_chttp2_fake_security_ping_pong_streaming_test deps_chttp2_fake_security_request_response_with_binary_metadata_and_payload_test clean_chttp2_fake_security_request_response_with_binary_metadata_and_payload_test deps_chttp2_fake_security_request_response_with_metadata_and_payload_test clean_chttp2_fake_security_request_response_with_metadata_and_payload_test deps_chttp2_fake_security_request_response_with_payload_test clean_chttp2_fake_security_request_response_with_payload_test deps_chttp2_fake_security_request_response_with_trailing_metadata_and_payload_test clean_chttp2_fake_security_request_response_with_trailing_metadata_and_payload_test deps_chttp2_fake_security_simple_delayed_request_test clean_chttp2_fake_security_simple_delayed_request_test deps_chttp2_fake_security_simple_request_test clean_chttp2_fake_security_simple_request_test deps_chttp2_fake_security_thread_stress_test clean_chttp2_fake_security_thread_stress_test deps_chttp2_fake_security_writes_done_hangs_with_pending_read_test clean_chttp2_fake_security_writes_done_hangs_with_pending_read_test deps_chttp2_fullstack_cancel_after_accept_test clean_chttp2_fullstack_cancel_after_accept_test deps_chttp2_fullstack_cancel_after_accept_and_writes_closed_test clean_chttp2_fullstack_cancel_after_accept_and_writes_closed_test deps_chttp2_fullstack_cancel_after_invoke_test clean_chttp2_fullstack_cancel_after_invoke_test deps_chttp2_fullstack_cancel_before_invoke_test clean_chttp2_fullstack_cancel_before_invoke_test deps_chttp2_fullstack_cancel_in_a_vacuum_test clean_chttp2_fullstack_cancel_in_a_vacuum_test deps_chttp2_fullstack_census_simple_request_test clean_chttp2_fullstack_census_simple_request_test deps_chttp2_fullstack_disappearing_server_test clean_chttp2_fullstack_disappearing_server_test deps_chttp2_fullstack_early_server_shutdown_finishes_inflight_calls_test clean_chttp2_fullstack_early_server_shutdown_finishes_inflight_calls_test deps_chttp2_fullstack_early_server_shutdown_finishes_tags_test clean_chttp2_fullstack_early_server_shutdown_finishes_tags_test deps_chttp2_fullstack_invoke_large_request_test clean_chttp2_fullstack_invoke_large_request_test deps_chttp2_fullstack_max_concurrent_streams_test clean_chttp2_fullstack_max_concurrent_streams_test deps_chttp2_fullstack_no_op_test clean_chttp2_fullstack_no_op_test deps_chttp2_fullstack_ping_pong_streaming_test clean_chttp2_fullstack_ping_pong_streaming_test deps_chttp2_fullstack_request_response_with_binary_metadata_and_payload_test clean_chttp2_fullstack_request_response_with_binary_metadata_and_payload_test deps_chttp2_fullstack_request_response_with_metadata_and_payload_test clean_chttp2_fullstack_request_response_with_metadata_and_payload_test deps_chttp2_fullstack_request_response_with_payload_test clean_chttp2_fullstack_request_response_with_payload_test deps_chttp2_fullstack_request_response_with_trailing_metadata_and_payload_test clean_chttp2_fullstack_request_response_with_trailing_metadata_and_payload_test deps_chttp2_fullstack_simple_delayed_request_test clean_chttp2_fullstack_simple_delayed_request_test deps_chttp2_fullstack_simple_request_test clean_chttp2_fullstack_simple_request_test deps_chttp2_fullstack_thread_stress_test clean_chttp2_fullstack_thread_stress_test deps_chttp2_fullstack_writes_done_hangs_with_pending_read_test clean_chttp2_fullstack_writes_done_hangs_with_pending_read_test deps_chttp2_simple_ssl_fullstack_cancel_after_accept_test clean_chttp2_simple_ssl_fullstack_cancel_after_accept_test deps_chttp2_simple_ssl_fullstack_cancel_after_accept_and_writes_closed_test clean_chttp2_simple_ssl_fullstack_cancel_after_accept_and_writes_closed_test deps_chttp2_simple_ssl_fullstack_cancel_after_invoke_test clean_chttp2_simple_ssl_fullstack_cancel_after_invoke_test deps_chttp2_simple_ssl_fullstack_cancel_before_invoke_test clean_chttp2_simple_ssl_fullstack_cancel_before_invoke_test deps_chttp2_simple_ssl_fullstack_cancel_in_a_vacuum_test clean_chttp2_simple_ssl_fullstack_cancel_in_a_vacuum_test deps_chttp2_simple_ssl_fullstack_census_simple_request_test clean_chttp2_simple_ssl_fullstack_census_simple_request_test deps_chttp2_simple_ssl_fullstack_disappearing_server_test clean_chttp2_simple_ssl_fullstack_disappearing_server_test deps_chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_inflight_calls_test clean_chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_inflight_calls_test deps_chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_tags_test clean_chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_tags_test deps_chttp2_simple_ssl_fullstack_invoke_large_request_test clean_chttp2_simple_ssl_fullstack_invoke_large_request_test deps_chttp2_simple_ssl_fullstack_max_concurrent_streams_test clean_chttp2_simple_ssl_fullstack_max_concurrent_streams_test deps_chttp2_simple_ssl_fullstack_no_op_test clean_chttp2_simple_ssl_fullstack_no_op_test deps_chttp2_simple_ssl_fullstack_ping_pong_streaming_test clean_chttp2_simple_ssl_fullstack_ping_pong_streaming_test deps_chttp2_simple_ssl_fullstack_request_response_with_binary_metadata_and_payload_test clean_chttp2_simple_ssl_fullstack_request_response_with_binary_metadata_and_payload_test deps_chttp2_simple_ssl_fullstack_request_response_with_metadata_and_payload_test clean_chttp2_simple_ssl_fullstack_request_response_with_metadata_and_payload_test deps_chttp2_simple_ssl_fullstack_request_response_with_payload_test clean_chttp2_simple_ssl_fullstack_request_response_with_payload_test deps_chttp2_simple_ssl_fullstack_request_response_with_trailing_metadata_and_payload_test clean_chttp2_simple_ssl_fullstack_request_response_with_trailing_metadata_and_payload_test deps_chttp2_simple_ssl_fullstack_simple_delayed_request_test clean_chttp2_simple_ssl_fullstack_simple_delayed_request_test deps_chttp2_simple_ssl_fullstack_simple_request_test clean_chttp2_simple_ssl_fullstack_simple_request_test deps_chttp2_simple_ssl_fullstack_thread_stress_test clean_chttp2_simple_ssl_fullstack_thread_stress_test deps_chttp2_simple_ssl_fullstack_writes_done_hangs_with_pending_read_test clean_chttp2_simple_ssl_fullstack_writes_done_hangs_with_pending_read_test deps_chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_test clean_chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_test deps_chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_and_writes_closed_test clean_chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_and_writes_closed_test deps_chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_invoke_test clean_chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_invoke_test deps_chttp2_simple_ssl_with_oauth2_fullstack_cancel_before_invoke_test clean_chttp2_simple_ssl_with_oauth2_fullstack_cancel_before_invoke_test deps_chttp2_simple_ssl_with_oauth2_fullstack_cancel_in_a_vacuum_test clean_chttp2_simple_ssl_with_oauth2_fullstack_cancel_in_a_vacuum_test deps_chttp2_simple_ssl_with_oauth2_fullstack_census_simple_request_test clean_chttp2_simple_ssl_with_oauth2_fullstack_census_simple_request_test deps_chttp2_simple_ssl_with_oauth2_fullstack_disappearing_server_test clean_chttp2_simple_ssl_with_oauth2_fullstack_disappearing_server_test deps_chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_inflight_calls_test clean_chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_inflight_calls_test deps_chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_tags_test clean_chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_tags_test deps_chttp2_simple_ssl_with_oauth2_fullstack_invoke_large_request_test clean_chttp2_simple_ssl_with_oauth2_fullstack_invoke_large_request_test deps_chttp2_simple_ssl_with_oauth2_fullstack_max_concurrent_streams_test clean_chttp2_simple_ssl_with_oauth2_fullstack_max_concurrent_streams_test deps_chttp2_simple_ssl_with_oauth2_fullstack_no_op_test clean_chttp2_simple_ssl_with_oauth2_fullstack_no_op_test deps_chttp2_simple_ssl_with_oauth2_fullstack_ping_pong_streaming_test clean_chttp2_simple_ssl_with_oauth2_fullstack_ping_pong_streaming_test deps_chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_binary_metadata_and_payload_test clean_chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_binary_metadata_and_payload_test deps_chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_metadata_and_payload_test clean_chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_metadata_and_payload_test deps_chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_payload_test clean_chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_payload_test deps_chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_trailing_metadata_and_payload_test clean_chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_trailing_metadata_and_payload_test deps_chttp2_simple_ssl_with_oauth2_fullstack_simple_delayed_request_test clean_chttp2_simple_ssl_with_oauth2_fullstack_simple_delayed_request_test deps_chttp2_simple_ssl_with_oauth2_fullstack_simple_request_test clean_chttp2_simple_ssl_with_oauth2_fullstack_simple_request_test deps_chttp2_simple_ssl_with_oauth2_fullstack_thread_stress_test clean_chttp2_simple_ssl_with_oauth2_fullstack_thread_stress_test deps_chttp2_simple_ssl_with_oauth2_fullstack_writes_done_hangs_with_pending_read_test clean_chttp2_simple_ssl_with_oauth2_fullstack_writes_done_hangs_with_pending_read_test deps_chttp2_socket_pair_cancel_after_accept_test clean_chttp2_socket_pair_cancel_after_accept_test deps_chttp2_socket_pair_cancel_after_accept_and_writes_closed_test clean_chttp2_socket_pair_cancel_after_accept_and_writes_closed_test deps_chttp2_socket_pair_cancel_after_invoke_test clean_chttp2_socket_pair_cancel_after_invoke_test deps_chttp2_socket_pair_cancel_before_invoke_test clean_chttp2_socket_pair_cancel_before_invoke_test deps_chttp2_socket_pair_cancel_in_a_vacuum_test clean_chttp2_socket_pair_cancel_in_a_vacuum_test deps_chttp2_socket_pair_census_simple_request_test clean_chttp2_socket_pair_census_simple_request_test deps_chttp2_socket_pair_disappearing_server_test clean_chttp2_socket_pair_disappearing_server_test deps_chttp2_socket_pair_early_server_shutdown_finishes_inflight_calls_test clean_chttp2_socket_pair_early_server_shutdown_finishes_inflight_calls_test deps_chttp2_socket_pair_early_server_shutdown_finishes_tags_test clean_chttp2_socket_pair_early_server_shutdown_finishes_tags_test deps_chttp2_socket_pair_invoke_large_request_test clean_chttp2_socket_pair_invoke_large_request_test deps_chttp2_socket_pair_max_concurrent_streams_test clean_chttp2_socket_pair_max_concurrent_streams_test deps_chttp2_socket_pair_no_op_test clean_chttp2_socket_pair_no_op_test deps_chttp2_socket_pair_ping_pong_streaming_test clean_chttp2_socket_pair_ping_pong_streaming_test deps_chttp2_socket_pair_request_response_with_binary_metadata_and_payload_test clean_chttp2_socket_pair_request_response_with_binary_metadata_and_payload_test deps_chttp2_socket_pair_request_response_with_metadata_and_payload_test clean_chttp2_socket_pair_request_response_with_metadata_and_payload_test deps_chttp2_socket_pair_request_response_with_payload_test clean_chttp2_socket_pair_request_response_with_payload_test deps_chttp2_socket_pair_request_response_with_trailing_metadata_and_payload_test clean_chttp2_socket_pair_request_response_with_trailing_metadata_and_payload_test deps_chttp2_socket_pair_simple_delayed_request_test clean_chttp2_socket_pair_simple_delayed_request_test deps_chttp2_socket_pair_simple_request_test clean_chttp2_socket_pair_simple_request_test deps_chttp2_socket_pair_thread_stress_test clean_chttp2_socket_pair_thread_stress_test deps_chttp2_socket_pair_writes_done_hangs_with_pending_read_test clean_chttp2_socket_pair_writes_done_hangs_with_pending_read_test deps_chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_test clean_chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_test deps_chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_and_writes_closed_test clean_chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_and_writes_closed_test deps_chttp2_socket_pair_one_byte_at_a_time_cancel_after_invoke_test clean_chttp2_socket_pair_one_byte_at_a_time_cancel_after_invoke_test deps_chttp2_socket_pair_one_byte_at_a_time_cancel_before_invoke_test clean_chttp2_socket_pair_one_byte_at_a_time_cancel_before_invoke_test deps_chttp2_socket_pair_one_byte_at_a_time_cancel_in_a_vacuum_test clean_chttp2_socket_pair_one_byte_at_a_time_cancel_in_a_vacuum_test deps_chttp2_socket_pair_one_byte_at_a_time_census_simple_request_test clean_chttp2_socket_pair_one_byte_at_a_time_census_simple_request_test deps_chttp2_socket_pair_one_byte_at_a_time_disappearing_server_test clean_chttp2_socket_pair_one_byte_at_a_time_disappearing_server_test deps_chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_inflight_calls_test clean_chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_inflight_calls_test deps_chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_tags_test clean_chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_tags_test deps_chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_test clean_chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_test deps_chttp2_socket_pair_one_byte_at_a_time_max_concurrent_streams_test clean_chttp2_socket_pair_one_byte_at_a_time_max_concurrent_streams_test deps_chttp2_socket_pair_one_byte_at_a_time_no_op_test clean_chttp2_socket_pair_one_byte_at_a_time_no_op_test deps_chttp2_socket_pair_one_byte_at_a_time_ping_pong_streaming_test clean_chttp2_socket_pair_one_byte_at_a_time_ping_pong_streaming_test deps_chttp2_socket_pair_one_byte_at_a_time_request_response_with_binary_metadata_and_payload_test clean_chttp2_socket_pair_one_byte_at_a_time_request_response_with_binary_metadata_and_payload_test deps_chttp2_socket_pair_one_byte_at_a_time_request_response_with_metadata_and_payload_test clean_chttp2_socket_pair_one_byte_at_a_time_request_response_with_metadata_and_payload_test deps_chttp2_socket_pair_one_byte_at_a_time_request_response_with_payload_test clean_chttp2_socket_pair_one_byte_at_a_time_request_response_with_payload_test deps_chttp2_socket_pair_one_byte_at_a_time_request_response_with_trailing_metadata_and_payload_test clean_chttp2_socket_pair_one_byte_at_a_time_request_response_with_trailing_metadata_and_payload_test deps_chttp2_socket_pair_one_byte_at_a_time_simple_delayed_request_test clean_chttp2_socket_pair_one_byte_at_a_time_simple_delayed_request_test deps_chttp2_socket_pair_one_byte_at_a_time_simple_request_test clean_chttp2_socket_pair_one_byte_at_a_time_simple_request_test deps_chttp2_socket_pair_one_byte_at_a_time_thread_stress_test clean_chttp2_socket_pair_one_byte_at_a_time_thread_stress_test deps_chttp2_socket_pair_one_byte_at_a_time_writes_done_hangs_with_pending_read_test clean_chttp2_socket_pair_one_byte_at_a_time_writes_done_hangs_with_pending_read_test diff --git a/build.json b/build.json index 8dfd5c4f9771c93ee0fc8e49798b89c97c07defa..31bec6cd9aadf55ad3dc0a86a2da058898f3f694 100644 --- a/build.json +++ b/build.json @@ -11,87 +11,6 @@ "filegroups": [ { "name": "grpc_base", - "src": [ - "src/core/channel/call_op_string.c", - "src/core/channel/census_filter.c", - "src/core/channel/channel_args.c", - "src/core/channel/channel_stack.c", - "src/core/channel/child_channel.c", - "src/core/channel/client_channel.c", - "src/core/channel/client_setup.c", - "src/core/channel/connected_channel.c", - "src/core/channel/http_client_filter.c", - "src/core/channel/http_filter.c", - "src/core/channel/http_server_filter.c", - "src/core/channel/metadata_buffer.c", - "src/core/channel/noop_filter.c", - "src/core/compression/algorithm.c", - "src/core/compression/message_compress.c", - "src/core/httpcli/format_request.c", - "src/core/httpcli/httpcli.c", - "src/core/httpcli/httpcli_security_context.c", - "src/core/httpcli/parser.c", - "src/core/iomgr/alarm.c", - "src/core/iomgr/alarm_heap.c", - "src/core/iomgr/endpoint.c", - "src/core/iomgr/endpoint_pair_posix.c", - "src/core/iomgr/fd_posix.c", - "src/core/iomgr/iomgr.c", - "src/core/iomgr/iomgr_posix.c", - "src/core/iomgr/pollset_multipoller_with_poll_posix.c", - "src/core/iomgr/pollset_posix.c", - "src/core/iomgr/resolve_address_posix.c", - "src/core/iomgr/sockaddr_utils.c", - "src/core/iomgr/socket_utils_common_posix.c", - "src/core/iomgr/socket_utils_linux.c", - "src/core/iomgr/socket_utils_posix.c", - "src/core/iomgr/tcp_client_posix.c", - "src/core/iomgr/tcp_posix.c", - "src/core/iomgr/tcp_server_posix.c", - "src/core/iomgr/time_averaged_stats.c", - "src/core/statistics/census_init.c", - "src/core/statistics/census_log.c", - "src/core/statistics/census_rpc_stats.c", - "src/core/statistics/census_tracing.c", - "src/core/statistics/hash_table.c", - "src/core/statistics/window_stats.c", - "src/core/surface/byte_buffer.c", - "src/core/surface/byte_buffer_reader.c", - "src/core/surface/call.c", - "src/core/surface/channel.c", - "src/core/surface/channel_create.c", - "src/core/surface/client.c", - "src/core/surface/completion_queue.c", - "src/core/surface/event_string.c", - "src/core/surface/init.c", - "src/core/surface/lame_client.c", - "src/core/surface/secure_channel_create.c", - "src/core/surface/secure_server_create.c", - "src/core/surface/server.c", - "src/core/surface/server_chttp2.c", - "src/core/surface/server_create.c", - "src/core/transport/chttp2/alpn.c", - "src/core/transport/chttp2/bin_encoder.c", - "src/core/transport/chttp2/frame_data.c", - "src/core/transport/chttp2/frame_goaway.c", - "src/core/transport/chttp2/frame_ping.c", - "src/core/transport/chttp2/frame_rst_stream.c", - "src/core/transport/chttp2/frame_settings.c", - "src/core/transport/chttp2/frame_window_update.c", - "src/core/transport/chttp2/hpack_parser.c", - "src/core/transport/chttp2/hpack_table.c", - "src/core/transport/chttp2/huffsyms.c", - "src/core/transport/chttp2/status_conversion.c", - "src/core/transport/chttp2/stream_encoder.c", - "src/core/transport/chttp2/stream_map.c", - "src/core/transport/chttp2/timeout_encoding.c", - "src/core/transport/chttp2/varint.c", - "src/core/transport/chttp2_transport.c", - "src/core/transport/metadata.c", - "src/core/transport/stream_op.c", - "src/core/transport/transport.c", - "third_party/cJSON/cJSON.c" - ], "public_headers": [ "include/grpc/byte_buffer.h", "include/grpc/byte_buffer_reader.h", @@ -127,6 +46,8 @@ "src/core/iomgr/iomgr_internal.h", "src/core/iomgr/iomgr_posix.h", "src/core/iomgr/pollset.h", + "src/core/iomgr/pollset_kick.h", + "src/core/iomgr/pollset_kick_posix.h", "src/core/iomgr/pollset_posix.h", "src/core/iomgr/resolve_address.h", "src/core/iomgr/sockaddr.h", @@ -174,6 +95,88 @@ "src/core/transport/stream_op.h", "src/core/transport/transport.h", "src/core/transport/transport_impl.h" + ], + "src": [ + "src/core/channel/call_op_string.c", + "src/core/channel/census_filter.c", + "src/core/channel/channel_args.c", + "src/core/channel/channel_stack.c", + "src/core/channel/child_channel.c", + "src/core/channel/client_channel.c", + "src/core/channel/client_setup.c", + "src/core/channel/connected_channel.c", + "src/core/channel/http_client_filter.c", + "src/core/channel/http_filter.c", + "src/core/channel/http_server_filter.c", + "src/core/channel/metadata_buffer.c", + "src/core/channel/noop_filter.c", + "src/core/compression/algorithm.c", + "src/core/compression/message_compress.c", + "src/core/httpcli/format_request.c", + "src/core/httpcli/httpcli.c", + "src/core/httpcli/httpcli_security_context.c", + "src/core/httpcli/parser.c", + "src/core/iomgr/alarm.c", + "src/core/iomgr/alarm_heap.c", + "src/core/iomgr/endpoint.c", + "src/core/iomgr/endpoint_pair_posix.c", + "src/core/iomgr/fd_posix.c", + "src/core/iomgr/iomgr.c", + "src/core/iomgr/iomgr_posix.c", + "src/core/iomgr/pollset_kick_posix.c", + "src/core/iomgr/pollset_multipoller_with_poll_posix.c", + "src/core/iomgr/pollset_posix.c", + "src/core/iomgr/resolve_address_posix.c", + "src/core/iomgr/sockaddr_utils.c", + "src/core/iomgr/socket_utils_common_posix.c", + "src/core/iomgr/socket_utils_linux.c", + "src/core/iomgr/socket_utils_posix.c", + "src/core/iomgr/tcp_client_posix.c", + "src/core/iomgr/tcp_posix.c", + "src/core/iomgr/tcp_server_posix.c", + "src/core/iomgr/time_averaged_stats.c", + "src/core/statistics/census_init.c", + "src/core/statistics/census_log.c", + "src/core/statistics/census_rpc_stats.c", + "src/core/statistics/census_tracing.c", + "src/core/statistics/hash_table.c", + "src/core/statistics/window_stats.c", + "src/core/surface/byte_buffer.c", + "src/core/surface/byte_buffer_reader.c", + "src/core/surface/call.c", + "src/core/surface/channel.c", + "src/core/surface/channel_create.c", + "src/core/surface/client.c", + "src/core/surface/completion_queue.c", + "src/core/surface/event_string.c", + "src/core/surface/init.c", + "src/core/surface/lame_client.c", + "src/core/surface/secure_channel_create.c", + "src/core/surface/secure_server_create.c", + "src/core/surface/server.c", + "src/core/surface/server_chttp2.c", + "src/core/surface/server_create.c", + "src/core/transport/chttp2/alpn.c", + "src/core/transport/chttp2/bin_encoder.c", + "src/core/transport/chttp2/frame_data.c", + "src/core/transport/chttp2/frame_goaway.c", + "src/core/transport/chttp2/frame_ping.c", + "src/core/transport/chttp2/frame_rst_stream.c", + "src/core/transport/chttp2/frame_settings.c", + "src/core/transport/chttp2/frame_window_update.c", + "src/core/transport/chttp2/hpack_parser.c", + "src/core/transport/chttp2/hpack_table.c", + "src/core/transport/chttp2/huffsyms.c", + "src/core/transport/chttp2/status_conversion.c", + "src/core/transport/chttp2/stream_encoder.c", + "src/core/transport/chttp2/stream_map.c", + "src/core/transport/chttp2/timeout_encoding.c", + "src/core/transport/chttp2/varint.c", + "src/core/transport/chttp2_transport.c", + "src/core/transport/metadata.c", + "src/core/transport/stream_op.c", + "src/core/transport/transport.c", + "third_party/cJSON/cJSON.c" ] } ], @@ -181,41 +184,12 @@ { "name": "gpr", "build": "all", - "secure": false, - "vs_project_guid": "{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}", - "src": [ - "src/core/support/alloc.c", - "src/core/support/cancellable.c", - "src/core/support/cmdline.c", - "src/core/support/cpu_linux.c", - "src/core/support/cpu_posix.c", - "src/core/support/histogram.c", - "src/core/support/host_port.c", - "src/core/support/log_android.c", - "src/core/support/log.c", - "src/core/support/log_linux.c", - "src/core/support/log_posix.c", - "src/core/support/log_win32.c", - "src/core/support/murmur_hash.c", - "src/core/support/slice_buffer.c", - "src/core/support/slice.c", - "src/core/support/string.c", - "src/core/support/string_posix.c", - "src/core/support/string_win32.c", - "src/core/support/sync.c", - "src/core/support/sync_posix.c", - "src/core/support/sync_win32.c", - "src/core/support/thd_posix.c", - "src/core/support/thd_win32.c", - "src/core/support/time.c", - "src/core/support/time_posix.c", - "src/core/support/time_win32.c" - ], + "language": "c", "public_headers": [ "include/grpc/support/alloc.h", + "include/grpc/support/atm.h", "include/grpc/support/atm_gcc_atomic.h", "include/grpc/support/atm_gcc_sync.h", - "include/grpc/support/atm.h", "include/grpc/support/atm_win32.h", "include/grpc/support/cancellable_platform.h", "include/grpc/support/cmdline.h", @@ -223,11 +197,11 @@ "include/grpc/support/host_port.h", "include/grpc/support/log.h", "include/grpc/support/port_platform.h", - "include/grpc/support/slice_buffer.h", "include/grpc/support/slice.h", + "include/grpc/support/slice_buffer.h", "include/grpc/support/string.h", - "include/grpc/support/sync_generic.h", "include/grpc/support/sync.h", + "include/grpc/support/sync_generic.h", "include/grpc/support/sync_posix.h", "include/grpc/support/sync_win32.h", "include/grpc/support/thd.h", @@ -242,32 +216,51 @@ "src/core/support/cpu.h", "src/core/support/murmur_hash.h", "src/core/support/thd_internal.h" - ] + ], + "src": [ + "src/core/support/alloc.c", + "src/core/support/cancellable.c", + "src/core/support/cmdline.c", + "src/core/support/cpu_linux.c", + "src/core/support/cpu_posix.c", + "src/core/support/histogram.c", + "src/core/support/host_port.c", + "src/core/support/log.c", + "src/core/support/log_android.c", + "src/core/support/log_linux.c", + "src/core/support/log_posix.c", + "src/core/support/log_win32.c", + "src/core/support/murmur_hash.c", + "src/core/support/slice.c", + "src/core/support/slice_buffer.c", + "src/core/support/string.c", + "src/core/support/string_posix.c", + "src/core/support/string_win32.c", + "src/core/support/sync.c", + "src/core/support/sync_posix.c", + "src/core/support/sync_win32.c", + "src/core/support/thd_posix.c", + "src/core/support/thd_win32.c", + "src/core/support/time.c", + "src/core/support/time_posix.c", + "src/core/support/time_win32.c" + ], + "secure": false, + "vs_project_guid": "{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}" }, { - "name": "grpc", - "build": "all", - "secure": true, - "vs_project_guid": "{29D16885-7228-4C31-81ED-5F9187C7F2A9}", - "baselib": true, - "filegroups": [ - "grpc_base" - ], + "name": "gpr_test_util", + "build": "private", + "language": "c", "src": [ - "src/core/security/auth.c", - "src/core/security/base64.c", - "src/core/security/credentials.c", - "src/core/security/factories.c", - "src/core/security/google_root_certs.c", - "src/core/security/json_token.c", - "src/core/security/secure_endpoint.c", - "src/core/security/secure_transport_setup.c", - "src/core/security/security_context.c", - "src/core/security/server_secure_chttp2.c", - "src/core/tsi/fake_transport_security.c", - "src/core/tsi/ssl_transport_security.c", - "src/core/tsi/transport_security.c" + "test/core/util/test_config.c" ], + "vs_project_guid": "{EAB0A629-17A9-44DB-B5FF-E91A721FE037}" + }, + { + "name": "grpc", + "build": "all", + "language": "c", "public_headers": [ "include/grpc/grpc_security.h" ], @@ -284,81 +277,72 @@ "src/core/tsi/transport_security.h", "src/core/tsi/transport_security_interface.h" ], + "src": [ + "src/core/security/auth.c", + "src/core/security/base64.c", + "src/core/security/credentials.c", + "src/core/security/factories.c", + "src/core/security/google_root_certs.c", + "src/core/security/json_token.c", + "src/core/security/secure_endpoint.c", + "src/core/security/secure_transport_setup.c", + "src/core/security/security_context.c", + "src/core/security/server_secure_chttp2.c", + "src/core/tsi/fake_transport_security.c", + "src/core/tsi/ssl_transport_security.c", + "src/core/tsi/transport_security.c" + ], "deps": [ "gpr" - ] - }, - { - "name": "grpc_unsecure", - "build": "all", - "secure": false, - "vs_project_guid": "{46CEDFFF-9692-456A-AA24-38B5D6BCF4C5}", + ], "baselib": true, "filegroups": [ "grpc_base" ], - "deps": [ - "gpr" - ] - }, - { - "name": "gpr_test_util", - "build": "private", - "vs_project_guid": "{EAB0A629-17A9-44DB-B5FF-E91A721FE037}", - "src": [ - "test/core/util/test_config.c" - ] + "secure": true, + "vs_project_guid": "{29D16885-7228-4C31-81ED-5F9187C7F2A9}" }, { "name": "grpc_test_util", "build": "private", - "vs_project_guid": "{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}", + "language": "c", "src": [ "test/core/end2end/cq_verifier.c", - "test/core/end2end/data/test_root_cert.c", "test/core/end2end/data/prod_roots_certs.c", "test/core/end2end/data/server1_cert.c", "test/core/end2end/data/server1_key.c", + "test/core/end2end/data/test_root_cert.c", "test/core/iomgr/endpoint_tests.c", "test/core/statistics/census_log_tests.c", "test/core/transport/transport_end2end_tests.c", "test/core/util/grpc_profiler.c", - "test/core/util/port_posix.c", "test/core/util/parse_hexstring.c", + "test/core/util/port_posix.c", "test/core/util/slice_splitter.c" - ] + ], + "vs_project_guid": "{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}" }, { - "name": "grpc++", + "name": "grpc_unsecure", "build": "all", - "c++": true, - "secure": true, - "vs_project_guid": "{C187A093-A0FE-489D-A40A-6E33DE0F9FEB}", - "src": [ - "src/cpp/client/channel.cc", - "src/cpp/client/channel_arguments.cc", - "src/cpp/client/client_context.cc", - "src/cpp/client/create_channel.cc", - "src/cpp/client/credentials.cc", - "src/cpp/client/internal_stub.cc", - "src/cpp/proto/proto_utils.cc", - "src/cpp/common/rpc_method.cc", - "src/cpp/server/async_server.cc", - "src/cpp/server/async_server_context.cc", - "src/cpp/server/completion_queue.cc", - "src/cpp/server/server_builder.cc", - "src/cpp/server/server_context_impl.cc", - "src/cpp/server/server.cc", - "src/cpp/server/server_rpc_handler.cc", - "src/cpp/server/server_credentials.cc", - "src/cpp/server/thread_pool.cc", - "src/cpp/stream/stream_context.cc", - "src/cpp/util/status.cc", - "src/cpp/util/time.cc" + "language": "c", + "deps": [ + "gpr" ], + "baselib": true, + "filegroups": [ + "grpc_base" + ], + "secure": false, + "vs_project_guid": "{46CEDFFF-9692-456A-AA24-38B5D6BCF4C5}" + }, + { + "name": "grpc++", + "build": "all", + "language": "c++", "public_headers": [ - "include/grpc++/async_server_context.h", "include/grpc++/async_server.h", + "include/grpc++/async_server_context.h", "include/grpc++/channel_arguments.h", "include/grpc++/channel_interface.h", "include/grpc++/client_context.h", @@ -369,13 +353,13 @@ "include/grpc++/impl/internal_stub.h", "include/grpc++/impl/rpc_method.h", "include/grpc++/impl/rpc_service_method.h", + "include/grpc++/server.h", "include/grpc++/server_builder.h", "include/grpc++/server_context.h", "include/grpc++/server_credentials.h", - "include/grpc++/server.h", "include/grpc++/status.h", - "include/grpc++/stream_context_interface.h", - "include/grpc++/stream.h" + "include/grpc++/stream.h", + "include/grpc++/stream_context_interface.h" ], "headers": [ "src/cpp/client/channel.h", @@ -385,74 +369,112 @@ "src/cpp/stream/stream_context.h", "src/cpp/util/time.h" ], + "src": [ + "src/cpp/client/channel.cc", + "src/cpp/client/channel_arguments.cc", + "src/cpp/client/client_context.cc", + "src/cpp/client/create_channel.cc", + "src/cpp/client/credentials.cc", + "src/cpp/client/internal_stub.cc", + "src/cpp/common/rpc_method.cc", + "src/cpp/proto/proto_utils.cc", + "src/cpp/server/async_server.cc", + "src/cpp/server/async_server_context.cc", + "src/cpp/server/completion_queue.cc", + "src/cpp/server/server.cc", + "src/cpp/server/server_builder.cc", + "src/cpp/server/server_context_impl.cc", + "src/cpp/server/server_credentials.cc", + "src/cpp/server/server_rpc_handler.cc", + "src/cpp/server/thread_pool.cc", + "src/cpp/stream/stream_context.cc", + "src/cpp/util/status.cc", + "src/cpp/util/time.cc" + ], "deps": [ "grpc" + ], + "secure": true, + "vs_project_guid": "{C187A093-A0FE-489D-A40A-6E33DE0F9FEB}" + }, + { + "name": "grpc++_test_util", + "build": "private", + "language": "c++", + "src": [ + "test/cpp/util/echo.proto", + "test/cpp/util/echo_duplicate.proto", + "test/cpp/util/messages.proto", + "test/cpp/end2end/async_test_server.cc", + "test/cpp/util/create_test_channel.cc" ] }, { - "name": "grpc++_test_util", + "name": "tips_client_lib", "build": "private", + "language": "c++", "src": [ - "test/cpp/util/messages.proto", - "test/cpp/util/echo.proto", - "test/cpp/util/echo_duplicate.proto", - "test/cpp/util/create_test_channel.cc", - "test/cpp/end2end/async_test_server.cc" + "examples/tips/label.proto", + "examples/tips/empty.proto", + "examples/tips/pubsub.proto", + "examples/tips/client.cc" ], - "c++": true + "deps": [ + "grpc++", + "grpc", + "gpr" + ] } ], "targets": [ { - "name": "gen_hpack_tables", - "build": "tool", + "name": "alarm_heap_test", + "build": "test", + "language": "c", "src": [ - "src/core/transport/chttp2/gen_hpack_tables.c" + "test/core/iomgr/alarm_heap_test.c" ], "deps": [ "grpc_test_util", - "gpr", - "grpc" + "grpc", + "gpr_test_util", + "gpr" ] }, - { - "name": "cpp_plugin", - "build": "protoc", - "c++": true, - "secure": false, + "name": "alarm_list_test", + "build": "test", + "language": "c", "src": [ - "src/compiler/cpp_plugin.cpp", - "src/compiler/cpp_generator.cpp" - ], - "headers": [ - "src/compiler/cpp_generator.h", - "src/compiler/cpp_generator_helpers.h" + "test/core/iomgr/alarm_list_test.c" ], - "deps": [] + "deps": [ + "grpc_test_util", + "grpc", + "gpr_test_util", + "gpr" + ] }, { - "name": "ruby_plugin", - "build": "protoc", - "c++": true, - "secure": false, + "name": "alarm_test", + "build": "test", + "language": "c", "src": [ - "src/compiler/ruby_plugin.cpp", - "src/compiler/ruby_generator.cpp" - ], - "headers": [ - "src/compiler/cpp_generator.h", - "src/compiler/cpp_generator_helpers-inl.h", - "src/compiler/cpp_generator_map-inl.h", - "src/compiler/cpp_generator_string-inl.h" + "test/core/iomgr/alarm_test.c" ], - "deps": [] + "deps": [ + "grpc_test_util", + "grpc", + "gpr_test_util", + "gpr" + ] }, { - "name": "grpc_byte_buffer_reader_test", + "name": "alpn_test", "build": "test", + "language": "c", "src": [ - "test/core/surface/byte_buffer_reader_test.c" + "test/core/transport/chttp2/alpn_test.c" ], "deps": [ "grpc_test_util", @@ -462,153 +484,193 @@ ] }, { - "name": "gpr_cancellable_test", + "name": "bin_encoder_test", "build": "test", + "language": "c", "src": [ - "test/core/support/cancellable_test.c" + "test/core/transport/chttp2/bin_encoder_test.c" ], "deps": [ + "grpc_test_util", + "grpc", "gpr_test_util", "gpr" ] }, { - "name": "gpr_log_test", + "name": "census_hash_table_test", "build": "test", + "language": "c", "src": [ - "test/core/support/log_test.c" + "test/core/statistics/hash_table_test.c" ], "deps": [ + "grpc_test_util", + "grpc", "gpr_test_util", "gpr" ] }, { - "name": "gpr_useful_test", + "name": "census_statistics_multiple_writers_circular_buffer_test", "build": "test", + "language": "c", "src": [ - "test/core/support/useful_test.c" + "test/core/statistics/multiple_writers_circular_buffer_test.c" ], "deps": [ + "grpc_test_util", + "grpc", "gpr_test_util", "gpr" ] }, { - "name": "gpr_cmdline_test", + "name": "census_statistics_multiple_writers_test", "build": "test", + "language": "c", "src": [ - "test/core/support/cmdline_test.c" + "test/core/statistics/multiple_writers_test.c" ], "deps": [ + "grpc_test_util", + "grpc", "gpr_test_util", "gpr" ] }, { - "name": "gpr_histogram_test", + "name": "census_statistics_performance_test", "build": "test", + "language": "c", "src": [ - "test/core/support/histogram_test.c" + "test/core/statistics/performance_test.c" ], "deps": [ + "grpc_test_util", + "grpc", "gpr_test_util", "gpr" ] }, { - "name": "gpr_host_port_test", + "name": "census_statistics_quick_test", "build": "test", + "language": "c", "src": [ - "test/core/support/host_port_test.c" + "test/core/statistics/quick_test.c" ], "deps": [ + "grpc_test_util", + "grpc", "gpr_test_util", "gpr" ] }, { - "name": "gpr_slice_buffer_test", + "name": "census_statistics_small_log_test", "build": "test", + "language": "c", "src": [ - "test/core/support/slice_buffer_test.c" + "test/core/statistics/small_log_test.c" ], "deps": [ + "grpc_test_util", + "grpc", "gpr_test_util", "gpr" ] }, { - "name": "gpr_slice_test", - "build": "test", + "name": "census_stats_store_test", + "build": "executable", + "language": "c", "src": [ - "test/core/support/slice_test.c" + "test/core/statistics/rpc_stats_test.c" ], "deps": [ + "grpc_test_util", + "grpc", "gpr_test_util", "gpr" ] }, { - "name": "gpr_string_test", + "name": "census_stub_test", "build": "test", + "language": "c", "src": [ - "test/core/support/string_test.c" + "test/core/statistics/census_stub_test.c" ], "deps": [ + "grpc_test_util", + "grpc", "gpr_test_util", "gpr" ] }, { - "name": "gpr_sync_test", - "build": "test", + "name": "census_trace_store_test", + "build": "executable", + "language": "c", "src": [ - "test/core/support/sync_test.c" + "test/core/statistics/trace_test.c" ], "deps": [ + "grpc_test_util", + "grpc", "gpr_test_util", "gpr" ] }, { - "name": "gpr_thd_test", + "name": "census_window_stats_test", "build": "test", + "language": "c", "src": [ - "test/core/support/thd_test.c" + "test/core/statistics/window_stats_test.c" ], "deps": [ + "grpc_test_util", + "grpc", "gpr_test_util", "gpr" ] }, { - "name": "gpr_time_test", + "name": "chttp2_status_conversion_test", "build": "test", + "language": "c", "src": [ - "test/core/support/time_test.c" + "test/core/transport/chttp2/status_conversion_test.c" ], "deps": [ + "grpc_test_util", + "grpc", "gpr_test_util", "gpr" ] }, { - "name": "murmur_hash_test", + "name": "chttp2_stream_encoder_test", "build": "test", + "language": "c", "src": [ - "test/core/support/murmur_hash_test.c" + "test/core/transport/chttp2/stream_encoder_test.c" ], "deps": [ + "grpc_test_util", + "grpc", "gpr_test_util", "gpr" ] }, { - "name": "grpc_stream_op_test", + "name": "chttp2_stream_map_test", "build": "test", + "language": "c", "src": [ - "test/core/transport/stream_op_test.c" + "test/core/transport/chttp2/stream_map_test.c" ], "deps": [ "grpc_test_util", @@ -618,10 +680,11 @@ ] }, { - "name": "alpn_test", + "name": "chttp2_transport_end2end_test", "build": "test", + "language": "c", "src": [ - "test/core/transport/chttp2/alpn_test.c" + "test/core/transport/chttp2_transport_end2end_test.c" ], "deps": [ "grpc_test_util", @@ -631,10 +694,11 @@ ] }, { - "name": "time_averaged_stats_test", + "name": "dualstack_socket_test", "build": "test", + "language": "c", "src": [ - "test/core/iomgr/time_averaged_stats_test.c" + "test/core/end2end/dualstack_socket_test.c" ], "deps": [ "grpc_test_util", @@ -644,36 +708,41 @@ ] }, { - "name": "chttp2_stream_encoder_test", + "name": "echo_client", "build": "test", + "language": "c", "src": [ - "test/core/transport/chttp2/stream_encoder_test.c" + "test/core/echo/client.c" ], "deps": [ "grpc_test_util", "grpc", "gpr_test_util", "gpr" - ] + ], + "run": false }, { - "name": "hpack_table_test", + "name": "echo_server", "build": "test", + "language": "c", "src": [ - "test/core/transport/chttp2/hpack_table_test.c" + "test/core/echo/server.c" ], "deps": [ "grpc_test_util", "grpc", "gpr_test_util", "gpr" - ] + ], + "run": false }, { - "name": "chttp2_stream_map_test", + "name": "echo_test", "build": "test", + "language": "c", "src": [ - "test/core/transport/chttp2/stream_map_test.c" + "test/core/echo/echo_test.c" ], "deps": [ "grpc_test_util", @@ -683,10 +752,11 @@ ] }, { - "name": "hpack_parser_test", + "name": "fd_posix_test", "build": "test", + "language": "c", "src": [ - "test/core/transport/chttp2/hpack_parser_test.c" + "test/core/iomgr/fd_posix_test.c" ], "deps": [ "grpc_test_util", @@ -696,36 +766,41 @@ ] }, { - "name": "transport_metadata_test", + "name": "fling_client", "build": "test", + "language": "c", "src": [ - "test/core/transport/metadata_test.c" + "test/core/fling/client.c" ], "deps": [ "grpc_test_util", "grpc", "gpr_test_util", "gpr" - ] + ], + "run": false }, { - "name": "chttp2_status_conversion_test", + "name": "fling_server", "build": "test", + "language": "c", "src": [ - "test/core/transport/chttp2/status_conversion_test.c" + "test/core/fling/server.c" ], "deps": [ "grpc_test_util", "grpc", "gpr_test_util", "gpr" - ] + ], + "run": false }, { - "name": "chttp2_transport_end2end_test", + "name": "fling_stream_test", "build": "test", + "language": "c", "src": [ - "test/core/transport/chttp2_transport_end2end_test.c" + "test/core/fling/fling_stream_test.c" ], "deps": [ "grpc_test_util", @@ -735,10 +810,11 @@ ] }, { - "name": "tcp_posix_test", + "name": "fling_test", "build": "test", + "language": "c", "src": [ - "test/core/iomgr/tcp_posix_test.c" + "test/core/fling/fling_test.c" ], "deps": [ "grpc_test_util", @@ -748,153 +824,168 @@ ] }, { - "name": "dualstack_socket_test", - "build": "test", + "name": "gen_hpack_tables", + "build": "tool", + "language": "c", "src": [ - "test/core/end2end/dualstack_socket_test.c" + "src/core/transport/chttp2/gen_hpack_tables.c" ], "deps": [ "grpc_test_util", - "grpc", + "gpr", + "grpc" + ] + }, + { + "name": "gpr_cancellable_test", + "build": "test", + "language": "c", + "src": [ + "test/core/support/cancellable_test.c" + ], + "deps": [ "gpr_test_util", "gpr" ] }, { - "name": "no_server_test", + "name": "gpr_cmdline_test", "build": "test", + "language": "c", "src": [ - "test/core/end2end/no_server_test.c" + "test/core/support/cmdline_test.c" ], "deps": [ - "grpc_test_util", - "grpc", "gpr_test_util", "gpr" ] }, { - "name": "resolve_address_test", + "name": "gpr_histogram_test", "build": "test", + "language": "c", "src": [ - "test/core/iomgr/resolve_address_test.c" + "test/core/support/histogram_test.c" ], "deps": [ - "grpc_test_util", - "grpc", "gpr_test_util", "gpr" ] }, { - "name": "sockaddr_utils_test", + "name": "gpr_host_port_test", "build": "test", + "language": "c", "src": [ - "test/core/iomgr/sockaddr_utils_test.c" + "test/core/support/host_port_test.c" ], "deps": [ - "grpc_test_util", - "grpc", "gpr_test_util", "gpr" ] }, { - "name": "tcp_server_posix_test", + "name": "gpr_log_test", "build": "test", + "language": "c", "src": [ - "test/core/iomgr/tcp_server_posix_test.c" + "test/core/support/log_test.c" ], "deps": [ - "grpc_test_util", - "grpc", "gpr_test_util", "gpr" ] }, { - "name": "tcp_client_posix_test", + "name": "gpr_slice_buffer_test", "build": "test", + "language": "c", "src": [ - "test/core/iomgr/tcp_client_posix_test.c" + "test/core/support/slice_buffer_test.c" ], "deps": [ - "grpc_test_util", - "grpc", "gpr_test_util", "gpr" ] }, { - "name": "grpc_channel_stack_test", + "name": "gpr_slice_test", "build": "test", + "language": "c", "src": [ - "test/core/channel/channel_stack_test.c" + "test/core/support/slice_test.c" + ], + "deps": [ + "gpr_test_util", + "gpr" + ] + }, + { + "name": "gpr_string_test", + "build": "test", + "language": "c", + "src": [ + "test/core/support/string_test.c" ], "deps": [ - "grpc_test_util", - "grpc", "gpr_test_util", "gpr" ] }, { - "name": "metadata_buffer_test", + "name": "gpr_sync_test", "build": "test", + "language": "c", "src": [ - "test/core/channel/metadata_buffer_test.c" + "test/core/support/sync_test.c" ], "deps": [ - "grpc_test_util", - "grpc", "gpr_test_util", "gpr" ] }, { - "name": "grpc_completion_queue_test", + "name": "gpr_thd_test", "build": "test", + "language": "c", "src": [ - "test/core/surface/completion_queue_test.c" + "test/core/support/thd_test.c" ], "deps": [ - "grpc_test_util", - "grpc", "gpr_test_util", "gpr" ] }, { - "name": "grpc_completion_queue_benchmark", - "build": "benchmark", + "name": "gpr_time_test", + "build": "test", + "language": "c", "src": [ - "test/core/surface/completion_queue_benchmark.c" + "test/core/support/time_test.c" ], "deps": [ - "grpc_test_util", - "grpc", "gpr_test_util", "gpr" ] }, { - "name": "census_trace_store_test", - "build": "executable", + "name": "gpr_useful_test", + "build": "test", + "language": "c", "src": [ - "test/core/statistics/trace_test.c" + "test/core/support/useful_test.c" ], - "deps": [ - "grpc_test_util", - "grpc", + "deps": [ "gpr_test_util", "gpr" ] }, { - "name": "census_stats_store_test", - "build": "executable", + "name": "grpc_base64_test", + "build": "test", + "language": "c", "src": [ - "test/core/statistics/rpc_stats_test.c" + "test/core/security/base64_test.c" ], "deps": [ "grpc_test_util", @@ -904,10 +995,11 @@ ] }, { - "name": "census_window_stats_test", + "name": "grpc_byte_buffer_reader_test", "build": "test", + "language": "c", "src": [ - "test/core/statistics/window_stats_test.c" + "test/core/surface/byte_buffer_reader_test.c" ], "deps": [ "grpc_test_util", @@ -917,10 +1009,11 @@ ] }, { - "name": "census_statistics_quick_test", + "name": "grpc_channel_stack_test", "build": "test", + "language": "c", "src": [ - "test/core/statistics/quick_test.c" + "test/core/channel/channel_stack_test.c" ], "deps": [ "grpc_test_util", @@ -930,10 +1023,11 @@ ] }, { - "name": "census_statistics_small_log_test", - "build": "test", + "name": "grpc_completion_queue_benchmark", + "build": "benchmark", + "language": "c", "src": [ - "test/core/statistics/small_log_test.c" + "test/core/surface/completion_queue_benchmark.c" ], "deps": [ "grpc_test_util", @@ -943,10 +1037,11 @@ ] }, { - "name": "census_statistics_performance_test", + "name": "grpc_completion_queue_test", "build": "test", + "language": "c", "src": [ - "test/core/statistics/performance_test.c" + "test/core/surface/completion_queue_test.c" ], "deps": [ "grpc_test_util", @@ -956,10 +1051,11 @@ ] }, { - "name": "census_statistics_multiple_writers_test", + "name": "grpc_credentials_test", "build": "test", + "language": "c", "src": [ - "test/core/statistics/multiple_writers_test.c" + "test/core/security/credentials_test.c" ], "deps": [ "grpc_test_util", @@ -969,10 +1065,11 @@ ] }, { - "name": "census_statistics_multiple_writers_circular_buffer_test", - "build": "test", + "name": "grpc_fetch_oauth2", + "build": "tool", + "language": "c", "src": [ - "test/core/statistics/multiple_writers_circular_buffer_test.c" + "test/core/security/fetch_oauth2.c" ], "deps": [ "grpc_test_util", @@ -982,10 +1079,11 @@ ] }, { - "name": "census_stub_test", + "name": "grpc_json_token_test", "build": "test", + "language": "c", "src": [ - "test/core/statistics/census_stub_test.c" + "test/core/security/json_token_test.c" ], "deps": [ "grpc_test_util", @@ -995,10 +1093,11 @@ ] }, { - "name": "census_hash_table_test", + "name": "grpc_stream_op_test", "build": "test", + "language": "c", "src": [ - "test/core/statistics/hash_table_test.c" + "test/core/transport/stream_op_test.c" ], "deps": [ "grpc_test_util", @@ -1008,11 +1107,11 @@ ] }, { - "name": "fling_server", + "name": "hpack_parser_test", "build": "test", - "run": false, + "language": "c", "src": [ - "test/core/fling/server.c" + "test/core/transport/chttp2/hpack_parser_test.c" ], "deps": [ "grpc_test_util", @@ -1022,11 +1121,11 @@ ] }, { - "name": "fling_client", + "name": "hpack_table_test", "build": "test", - "run": false, + "language": "c", "src": [ - "test/core/fling/client.c" + "test/core/transport/chttp2/hpack_table_test.c" ], "deps": [ "grpc_test_util", @@ -1036,10 +1135,11 @@ ] }, { - "name": "fling_test", + "name": "httpcli_format_request_test", "build": "test", + "language": "c", "src": [ - "test/core/fling/fling_test.c" + "test/core/httpcli/format_request_test.c" ], "deps": [ "grpc_test_util", @@ -1049,11 +1149,11 @@ ] }, { - "name": "echo_server", + "name": "httpcli_parser_test", "build": "test", - "run": false, + "language": "c", "src": [ - "test/core/echo/server.c" + "test/core/httpcli/parser_test.c" ], "deps": [ "grpc_test_util", @@ -1063,11 +1163,11 @@ ] }, { - "name": "echo_client", + "name": "httpcli_test", "build": "test", - "run": false, + "language": "c", "src": [ - "test/core/echo/client.c" + "test/core/httpcli/httpcli_test.c" ], "deps": [ "grpc_test_util", @@ -1077,10 +1177,11 @@ ] }, { - "name": "echo_test", + "name": "lame_client_test", "build": "test", + "language": "c", "src": [ - "test/core/echo/echo_test.c" + "test/core/surface/lame_client_test.c" ], "deps": [ "grpc_test_util", @@ -1092,6 +1193,7 @@ { "name": "low_level_ping_pong_benchmark", "build": "benchmark", + "language": "c", "src": [ "test/core/network_benchmarks/low_level_ping_pong.c" ], @@ -1105,6 +1207,7 @@ { "name": "message_compress_test", "build": "test", + "language": "c", "src": [ "test/core/compression/message_compress_test.c" ], @@ -1116,10 +1219,11 @@ ] }, { - "name": "bin_encoder_test", + "name": "metadata_buffer_test", "build": "test", + "language": "c", "src": [ - "test/core/transport/chttp2/bin_encoder_test.c" + "test/core/channel/metadata_buffer_test.c" ], "deps": [ "grpc_test_util", @@ -1129,23 +1233,23 @@ ] }, { - "name": "secure_endpoint_test", + "name": "murmur_hash_test", "build": "test", + "language": "c", "src": [ - "test/core/security/secure_endpoint_test.c" + "test/core/support/murmur_hash_test.c" ], "deps": [ - "grpc_test_util", - "grpc", "gpr_test_util", "gpr" ] }, { - "name": "httpcli_format_request_test", + "name": "no_server_test", "build": "test", + "language": "c", "src": [ - "test/core/httpcli/format_request_test.c" + "test/core/end2end/no_server_test.c" ], "deps": [ "grpc_test_util", @@ -1155,10 +1259,11 @@ ] }, { - "name": "httpcli_parser_test", + "name": "poll_kick_test", "build": "test", + "language": "c", "src": [ - "test/core/httpcli/parser_test.c" + "test/core/iomgr/poll_kick_test.c" ], "deps": [ "grpc_test_util", @@ -1168,10 +1273,11 @@ ] }, { - "name": "httpcli_test", + "name": "resolve_address_test", "build": "test", + "language": "c", "src": [ - "test/core/httpcli/httpcli_test.c" + "test/core/iomgr/resolve_address_test.c" ], "deps": [ "grpc_test_util", @@ -1181,10 +1287,11 @@ ] }, { - "name": "grpc_credentials_test", + "name": "secure_endpoint_test", "build": "test", + "language": "c", "src": [ - "test/core/security/credentials_test.c" + "test/core/security/secure_endpoint_test.c" ], "deps": [ "grpc_test_util", @@ -1194,10 +1301,11 @@ ] }, { - "name": "grpc_fetch_oauth2", - "build": "tool", + "name": "sockaddr_utils_test", + "build": "test", + "language": "c", "src": [ - "test/core/security/fetch_oauth2.c" + "test/core/iomgr/sockaddr_utils_test.c" ], "deps": [ "grpc_test_util", @@ -1207,10 +1315,11 @@ ] }, { - "name": "grpc_base64_test", + "name": "tcp_client_posix_test", "build": "test", + "language": "c", "src": [ - "test/core/security/base64_test.c" + "test/core/iomgr/tcp_client_posix_test.c" ], "deps": [ "grpc_test_util", @@ -1220,10 +1329,11 @@ ] }, { - "name": "grpc_json_token_test", + "name": "tcp_posix_test", "build": "test", + "language": "c", "src": [ - "test/core/security/json_token_test.c" + "test/core/iomgr/tcp_posix_test.c" ], "deps": [ "grpc_test_util", @@ -1233,10 +1343,11 @@ ] }, { - "name": "timeout_encoding_test", + "name": "tcp_server_posix_test", "build": "test", + "language": "c", "src": [ - "test/core/transport/chttp2/timeout_encoding_test.c" + "test/core/iomgr/tcp_server_posix_test.c" ], "deps": [ "grpc_test_util", @@ -1246,10 +1357,11 @@ ] }, { - "name": "fd_posix_test", + "name": "time_averaged_stats_test", "build": "test", + "language": "c", "src": [ - "test/core/iomgr/fd_posix_test.c" + "test/core/iomgr/time_averaged_stats_test.c" ], "deps": [ "grpc_test_util", @@ -1259,10 +1371,11 @@ ] }, { - "name": "fling_stream_test", + "name": "time_test", "build": "test", + "language": "c", "src": [ - "test/core/fling/fling_stream_test.c" + "test/core/support/time_test.c" ], "deps": [ "grpc_test_util", @@ -1272,10 +1385,11 @@ ] }, { - "name": "lame_client_test", + "name": "timeout_encoding_test", "build": "test", + "language": "c", "src": [ - "test/core/surface/lame_client_test.c" + "test/core/transport/chttp2/timeout_encoding_test.c" ], "deps": [ "grpc_test_util", @@ -1285,58 +1399,66 @@ ] }, { - "name": "thread_pool_test", + "name": "transport_metadata_test", "build": "test", - "c++": true, + "language": "c", "src": [ - "test/cpp/server/thread_pool_test.cc" + "test/core/transport/metadata_test.c" ], "deps": [ "grpc_test_util", - "grpc++", "grpc", "gpr_test_util", "gpr" ] }, { - "name": "status_test", + "name": "channel_arguments_test", "build": "test", - "c++": true, + "language": "c++", "src": [ - "test/cpp/util/status_test.cc" + "test/cpp/client/channel_arguments_test.cc" ], "deps": [ - "grpc_test_util", "grpc++", "grpc", - "gpr_test_util", "gpr" ] }, { - "name": "sync_client_async_server_test", + "name": "cpp_plugin", + "build": "protoc", + "language": "c++", + "headers": [ + "src/compiler/cpp_generator.h", + "src/compiler/cpp_generator_helpers.h" + ], + "src": [ + "src/compiler/cpp_generator.cc", + "src/compiler/cpp_plugin.cc" + ], + "deps": [], + "secure": false + }, + { + "name": "credentials_test", "build": "test", - "c++": true, + "language": "c++", "src": [ - "test/cpp/end2end/sync_client_async_server_test.cc" + "test/cpp/client/credentials_test.cc" ], "deps": [ - "grpc++_test_util", - "grpc_test_util", "grpc++", "grpc", - "gpr_test_util", "gpr" ] }, { - "name": "qps_client", + "name": "end2end_test", "build": "test", - "c++": true, + "language": "c++", "src": [ - "test/cpp/qps/qpstest.proto", - "test/cpp/qps/client.cc" + "test/cpp/end2end/end2end_test.cc" ], "deps": [ "grpc++_test_util", @@ -1348,12 +1470,14 @@ ] }, { - "name": "qps_server", + "name": "interop_client", "build": "test", - "c++": true, + "language": "c++", "src": [ - "test/cpp/qps/qpstest.proto", - "test/cpp/qps/server.cc" + "test/cpp/interop/empty.proto", + "test/cpp/interop/messages.proto", + "test/cpp/interop/test.proto", + "test/cpp/interop/client.cc" ], "deps": [ "grpc++_test_util", @@ -1362,13 +1486,13 @@ "grpc", "gpr_test_util", "gpr" - ] + ], + "run": false }, { "name": "interop_server", "build": "test", - "run": false, - "c++": true, + "language": "c++", "src": [ "test/cpp/interop/empty.proto", "test/cpp/interop/messages.proto", @@ -1382,20 +1506,19 @@ "grpc", "gpr_test_util", "gpr" - ] + ], + "run": false }, { - "name": "interop_client", + "name": "tips_client", "build": "test", "run": false, - "c++": true, + "language": "c++", "src": [ - "test/cpp/interop/empty.proto", - "test/cpp/interop/messages.proto", - "test/cpp/interop/test.proto", - "test/cpp/interop/client.cc" + "examples/tips/client_main.cc" ], "deps": [ + "tips_client_lib", "grpc++_test_util", "grpc_test_util", "grpc++", @@ -1405,13 +1528,14 @@ ] }, { - "name": "end2end_test", + "name": "tips_client_test", "build": "test", - "c++": true, + "language": "c++", "src": [ - "test/cpp/end2end/end2end_test.cc" + "examples/tips/client_test.cc" ], "deps": [ + "tips_client_lib", "grpc++_test_util", "grpc_test_util", "grpc++", @@ -1421,78 +1545,97 @@ ] }, { - "name": "channel_arguments_test", + "name": "qps_client", "build": "test", - "c++": true, + "language": "c++", "src": [ - "test/cpp/client/channel_arguments_test.cc" + "test/cpp/qps/qpstest.proto", + "test/cpp/qps/client.cc" ], "deps": [ + "grpc++_test_util", + "grpc_test_util", "grpc++", "grpc", + "gpr_test_util", "gpr" ] }, { - "name": "credentials_test", + "name": "qps_server", "build": "test", - "c++": true, + "language": "c++", "src": [ - "test/cpp/client/credentials_test.cc" + "test/cpp/qps/qpstest.proto", + "test/cpp/qps/server.cc" ], "deps": [ + "grpc++_test_util", + "grpc_test_util", "grpc++", "grpc", + "gpr_test_util", "gpr" ] }, { - "name": "alarm_test", - "build": "test", + "name": "ruby_plugin", + "build": "protoc", + "language": "c++", + "headers": [ + "src/compiler/cpp_generator.h", + "src/compiler/cpp_generator_helpers-inl.h", + "src/compiler/cpp_generator_map-inl.h", + "src/compiler/cpp_generator_string-inl.h" + ], "src": [ - "test/core/iomgr/alarm_test.c" + "src/compiler/ruby_generator.cc", + "src/compiler/ruby_plugin.cc" ], - "deps": [ - "grpc_test_util", - "grpc", - "gpr_test_util", - "gpr" - ] + "deps": [], + "secure": false }, { - "name": "alarm_list_test", + "name": "status_test", "build": "test", + "language": "c++", "src": [ - "test/core/iomgr/alarm_list_test.c" + "test/cpp/util/status_test.cc" ], "deps": [ "grpc_test_util", + "grpc++", "grpc", "gpr_test_util", "gpr" ] }, { - "name": "alarm_heap_test", + "name": "sync_client_async_server_test", "build": "test", + "language": "c++", "src": [ - "test/core/iomgr/alarm_heap_test.c" + "test/cpp/end2end/sync_client_async_server_test.cc" ], "deps": [ + "grpc++_test_util", "grpc_test_util", + "grpc++", "grpc", "gpr_test_util", "gpr" ] }, { - "name": "time_test", + "name": "thread_pool_test", "build": "test", + "language": "c++", "src": [ - "test/core/support/time_test.c" + "test/cpp/server/thread_pool_test.cc" ], "deps": [ "grpc_test_util", + "grpc++", "grpc", "gpr_test_util", "gpr" diff --git a/examples/tips/client.cc b/examples/tips/client.cc new file mode 100644 index 0000000000000000000000000000000000000000..695ff80e8afacaf490a6d6e734567a3b2a17cb1b --- /dev/null +++ b/examples/tips/client.cc @@ -0,0 +1,60 @@ +/* + * + * Copyright 2014, 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++/client_context.h> + +#include "examples/tips/client.h" + +using tech::pubsub::Topic; +using tech::pubsub::PublisherService; + +namespace grpc { +namespace examples { +namespace tips { + +Client::Client(std::shared_ptr<ChannelInterface> channel) + : stub_(PublisherService::NewStub(channel)) { +} + +Status Client::CreateTopic(grpc::string topic) { + Topic request; + Topic response; + request.set_name(topic); + ClientContext context; + + return stub_->CreateTopic(&context, request, &response); +} + +} // namespace tips +} // namespace examples +} // namespace grpc diff --git a/src/node/port_picker.js b/examples/tips/client.h similarity index 75% rename from src/node/port_picker.js rename to examples/tips/client.h index ad82f2a7f8363dff316d9a6b5c1ca5fe63fc3448..3f4f1fd836990a328b0f16e3cf38f4d4f86d2f2e 100644 --- a/src/node/port_picker.js +++ b/examples/tips/client.h @@ -31,22 +31,24 @@ * */ -var net = require('net'); +#include <grpc++/channel_interface.h> +#include <grpc++/status.h> -/** - * Finds a free port that a server can bind to, in the format - * "address:port" - * @param {function(string)} cb The callback that should execute when the port - * is available - */ -function nextAvailablePort(cb) { - var server = net.createServer(); - server.listen(function() { - var address = server.address(); - server.close(function() { - cb(address.address + ':' + address.port.toString()); - }); - }); -} +#include "examples/tips/pubsub.pb.h" + +namespace grpc { +namespace examples { +namespace tips { + +class Client { + public: + Client(std::shared_ptr<grpc::ChannelInterface> channel); + Status CreateTopic(grpc::string topic); + + private: + std::unique_ptr<tech::pubsub::PublisherService::Stub> stub_; +}; -exports.nextAvailablePort = nextAvailablePort; +} // namespace tips +} // namespace examples +} // namespace grpc diff --git a/examples/tips/client_main.cc b/examples/tips/client_main.cc new file mode 100644 index 0000000000000000000000000000000000000000..17567b6f17a5f4f3e0db822ac4e8a690ad1860b9 --- /dev/null +++ b/examples/tips/client_main.cc @@ -0,0 +1,73 @@ +/* + * + * Copyright 2014, 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/grpc.h> +#include <grpc/support/log.h> +#include <google/gflags.h> +#include <grpc++/channel_interface.h> +#include <grpc++/create_channel.h> +#include <grpc++/status.h> + +#include "examples/tips/client.h" +#include "test/cpp/util/create_test_channel.h" + +DEFINE_bool(enable_ssl, true, "Whether to use ssl/tls."); +DEFINE_bool(use_prod_roots, true, "True to use SSL roots for production GFE"); +DEFINE_int32(server_port, 0, "Server port."); +DEFINE_string(server_host, "127.0.0.1", "Server host to connect to"); +DEFINE_string(server_host_override, "foo.test.google.com", + "Override the server host which is sent in HTTP header"); + +int main(int argc, char** argv) { + grpc_init(); + google::ParseCommandLineFlags(&argc, &argv, true); + gpr_log(GPR_INFO, "Start TIPS client"); + + GPR_ASSERT(FLAGS_server_port); + const int host_port_buf_size = 1024; + char host_port[host_port_buf_size]; + snprintf(host_port, host_port_buf_size, "%s:%d", FLAGS_server_host.c_str(), + FLAGS_server_port); + + std::shared_ptr<grpc::ChannelInterface> channel( + grpc::CreateTestChannel(host_port, FLAGS_server_host_override, + FLAGS_enable_ssl, FLAGS_use_prod_roots)); + + grpc::examples::tips::Client client(channel); + grpc::Status s = client.CreateTopic("test"); + GPR_ASSERT(s.IsOk()); + + channel.reset(); + grpc_shutdown(); + return 0; +} diff --git a/examples/tips/client_test.cc b/examples/tips/client_test.cc new file mode 100644 index 0000000000000000000000000000000000000000..69238f2c6fcc060eadb098f136899ebdd9deb95a --- /dev/null +++ b/examples/tips/client_test.cc @@ -0,0 +1,106 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include <grpc++/channel_arguments.h> +#include <grpc++/channel_interface.h> +#include <grpc++/client_context.h> +#include <grpc++/create_channel.h> +#include <grpc++/server.h> +#include <grpc++/server_builder.h> +#include <grpc++/server_context.h> +#include <grpc++/status.h> +#include <gtest/gtest.h> + +#include "examples/tips/client.h" +#include "test/core/util/port.h" +#include "test/core/util/test_config.h" + +using grpc::ChannelInterface; + +namespace grpc { +namespace testing { +namespace { + +const char kTopic[] = "test topic"; + +class PublishServiceImpl : public tech::pubsub::PublisherService::Service { + public: + Status CreateTopic(::grpc::ServerContext* context, + const ::tech::pubsub::Topic* request, + ::tech::pubsub::Topic* response) override { + EXPECT_EQ(request->name(), kTopic); + return Status::OK; + } +}; + +class End2endTest : public ::testing::Test { + protected: + void SetUp() override { + int port = grpc_pick_unused_port_or_die(); + server_address_ << "localhost:" << port; + // Setup server + ServerBuilder builder; + builder.AddPort(server_address_.str()); + builder.RegisterService(service_.service()); + server_ = builder.BuildAndStart(); + + channel_ = CreateChannel(server_address_.str(), ChannelArguments()); + } + + void TearDown() override { server_->Shutdown(); } + + std::unique_ptr<Server> server_; + std::ostringstream server_address_; + PublishServiceImpl service_; + + std::shared_ptr<ChannelInterface> channel_; +}; + +TEST_F(End2endTest, CreateTopic) { + grpc::examples::tips::Client client(channel_); + client.CreateTopic(kTopic); +} + +} // namespace +} // namespace testing +} // namespace grpc + +int main(int argc, char** argv) { + grpc_test_init(argc, argv); + grpc_init(); + ::testing::InitGoogleTest(&argc, argv); + gpr_log(GPR_INFO, "Start test ..."); + int result = RUN_ALL_TESTS(); + grpc_shutdown(); + return result; +} diff --git a/examples/tips/empty.proto b/examples/tips/empty.proto new file mode 100644 index 0000000000000000000000000000000000000000..adf66b5e614dc51bf180205a4374a79271ad0235 --- /dev/null +++ b/examples/tips/empty.proto @@ -0,0 +1,13 @@ +syntax = "proto2"; + +package proto2; + +// An empty message that you can re-use to avoid defining duplicated empty +// messages in your project. A typical example is to use it as argument or the +// return value of a service API. For instance: +// +// service Foo { +// rpc Bar (proto2.Empty) returns (proto2.Empty) { }; +// }; +// +message Empty {} diff --git a/examples/tips/label.proto b/examples/tips/label.proto new file mode 100644 index 0000000000000000000000000000000000000000..e93ac9dea3006c76644dedfb4f71c0857ac6b14e --- /dev/null +++ b/examples/tips/label.proto @@ -0,0 +1,48 @@ +// Labels provide a way to associate user-defined metadata with various +// objects. Labels may be used to organize objects into non-hierarchical +// groups; think metadata tags attached to mp3s. + +syntax = "proto2"; + +package tech.label; + +// A key-value pair applied to a given object. +message Label { + // The key of a label is a syntactically valid URL (as per RFC 1738) with + // the "scheme" and initial slashes omitted and with the additional + // restrictions noted below. Each key should be globally unique. The + // "host" portion is called the "namespace" and is not necessarily + // resolvable to a network endpoint. Instead, the namespace indicates what + // system or entity defines the semantics of the label. Namespaces do not + // restrict the set of objects to which a label may be associated. + // + // Keys are defined by the following grammar: + // + // key = hostname "/" kpath + // kpath = ksegment *[ "/" ksegment ] + // ksegment = alphadigit | *[ alphadigit | "-" | "_" | "." ] + // + // where "hostname" and "alphadigit" are defined as in RFC 1738. + // + // Example key: + // spanner.google.com/universe + required string key = 1; + + // The value of the label. + oneof value { + // A string value. + string str_value = 2; + // An integer value. + int64 num_value = 3; + } +} + +// A collection of labels, such as the set of all labels attached to an +// object. Each label in the set must have a different key. +// +// Users should prefer to embed "repeated Label" directly when possible. +// This message should only be used in cases where that isn't possible (e.g. +// with oneof). +message Labels { + repeated Label label = 1; +} diff --git a/examples/tips/pubsub.proto b/examples/tips/pubsub.proto new file mode 100644 index 0000000000000000000000000000000000000000..0b3bd5d012a4bffe50f30d4a2e41f4b0d751ba56 --- /dev/null +++ b/examples/tips/pubsub.proto @@ -0,0 +1,702 @@ +// Specification of the Pubsub API. + +syntax = "proto2"; + +import "examples/tips/empty.proto"; +import "examples/tips/label.proto"; + +package tech.pubsub; + +// ----------------------------------------------------------------------------- +// Overview of the Pubsub API +// ----------------------------------------------------------------------------- + +// This file describes an API for a Pubsub system. This system provides a +// reliable many-to-many communication mechanism between independently written +// publishers and subscribers where the publisher publishes messages to "topics" +// and each subscriber creates a "subscription" and consumes messages from it. +// +// (a) The pubsub system maintains bindings between topics and subscriptions. +// (b) A publisher publishes messages into a topic. +// (c) The pubsub system delivers messages from topics into relevant +// subscriptions. +// (d) A subscriber receives pending messages from its subscription and +// acknowledges or nacks each one to the pubsub system. +// (e) The pubsub system removes acknowledged messages from that subscription. + +// ----------------------------------------------------------------------------- +// Data Model +// ----------------------------------------------------------------------------- + +// The data model consists of the following: +// +// * Topic: A topic is a resource to which messages are published by publishers. +// Topics are named, and the name of the topic is unique within the pubsub +// system. +// +// * Subscription: A subscription records the subscriber's interest in a topic. +// It can optionally include a query to select a subset of interesting +// messages. The pubsub system maintains a logical cursor tracking the +// matching messages which still need to be delivered and acked so that +// they can retried as needed. The set of messages that have not been +// acknowledged is called the subscription backlog. +// +// * Message: A message is a unit of data that flows in the system. It contains +// opaque data from the publisher along with its labels. +// +// * Message Labels (optional): A set of opaque key, value pairs assigned +// by the publisher which the subscriber can use for filtering out messages +// in the topic. For example, a label with key "foo.com/device_type" and +// value "mobile" may be added for messages that are only relevant for a +// mobile subscriber; a subscriber on a phone may decide to create a +// subscription only for messages that have this label. + +// ----------------------------------------------------------------------------- +// Publisher Flow +// ----------------------------------------------------------------------------- + +// A publisher publishes messages to the topic using the Publish request: +// +// PubsubMessage message; +// message.set_data("...."); +// Label label; +// label.set_key("foo.com/key1"); +// label.set_str_value("value1"); +// message.add_label(label); +// PublishRequest request; +// request.set_topic("topicName"); +// request.set_message(message); +// PublisherService.Publish(request); + +// ----------------------------------------------------------------------------- +// Subscriber Flow +// ----------------------------------------------------------------------------- + +// The subscriber part of the API is richer than the publisher part and has a +// number of concepts w.r.t. subscription creation and monitoring: +// +// (1) A subscriber creates a subscription using the CreateSubscription call. +// It may specify an optional "query" to indicate that it wants to receive +// only messages with a certain set of labels using the label query syntax. +// It may also specify an optional truncation policy to indicate when old +// messages from the subcription can be removed. +// +// (2) A subscriber receives messages in one of two ways: via push or pull. +// +// (a) To receive messages via push, the PushConfig field must be specified in +// the Subscription parameter when creating a subscription. The PushConfig +// specifies an endpoint at which the subscriber must expose the +// PushEndpointService. Messages are received via the HandlePubsubEvent +// method. The push subscriber responds to the HandlePubsubEvent method +// with a result code that indicates one of three things: Ack (the message +// has been successfully processed and the Pubsub system may delete it), +// Nack (the message has been rejected, the Pubsub system should resend it +// at a later time), or Push-Back (this is a Nack with the additional +// semantics that the subscriber is overloaded and the pubsub system should +// back off on the rate at which it is invoking HandlePubsubEvent). The +// endpoint may be a load balancer for better scalability. +// +// (b) To receive messages via pull a subscriber calls the Pull method on the +// SubscriberService to get messages from the subscription. For each +// individual message, the subscriber may use the ack_id received in the +// PullResponse to Ack the message, Nack the message, or modify the ack +// deadline with ModifyAckDeadline. See the +// Subscription.ack_deadline_seconds field documentation for details on the +// ack deadline behavior. +// +// Note: Messages may be consumed in parallel by multiple subscribers making +// Pull calls to the same subscription; this will result in the set of +// messages from the subscription being shared and each subscriber +// receiving a subset of the messages. +// +// (4) The subscriber can explicitly truncate the current subscription. +// +// (5) "Truncated" events are delivered when a subscription is +// truncated, whether due to the subscription's truncation policy +// or an explicit request from the subscriber. +// +// Subscription creation: +// +// Subscription subscription; +// subscription.set_topic("topicName"); +// subscription.set_name("subscriptionName"); +// subscription.push_config().set_push_endpoint("machinename:8888"); +// SubscriberService.CreateSubscription(subscription); +// +// Consuming messages via push: +// +// TODO(eschapira): Add HTTP push example. +// +// The port 'machinename:8888' must be bound to a stubby server that implements +// the PushEndpointService with the following method: +// +// int HandlePubsubEvent(PubsubEvent event) { +// if (event.subscription().equals("subscriptionName")) { +// if (event.has_message()) { +// Process(event.message().data()); +// } else if (event.truncated()) { +// ProcessTruncatedEvent(); +// } +// } +// return OK; // This return code implies an acknowledgment +// } +// +// Consuming messages via pull: +// +// The subscription must be created without setting the push_config field. +// +// PullRequest pull_request; +// pull_request.set_subscription("subscriptionName"); +// pull_request.set_return_immediately(false); +// while (true) { +// PullResponse pull_response; +// if (SubscriberService.Pull(pull_request, pull_response) == OK) { +// PubsubEvent event = pull_response.pubsub_event(); +// if (event.has_message()) { +// Process(event.message().data()); +// } else if (event.truncated()) { +// ProcessTruncatedEvent(); +// } +// AcknowledgeRequest ack_request; +// ackRequest.set_subscription("subscriptionName"); +// ackRequest.set_ack_id(pull_response.ack_id()); +// SubscriberService.Acknowledge(ack_request); +// } +// } + +// ----------------------------------------------------------------------------- +// Reliability Semantics +// ----------------------------------------------------------------------------- + +// When a subscriber successfully creates a subscription using +// Subscriber.CreateSubscription, it establishes a "subscription point" with +// respect to that subscription - the subscriber is guaranteed to receive any +// message published after this subscription point that matches the +// subscription's query. Note that messages published before the Subscription +// point may or may not be delivered. +// +// If the system truncates the subscription according to the specified +// truncation policy, the system delivers a subscription status event with the +// "truncated" field set to true. We refer to such events as "truncation +// events". A truncation event: +// +// * Informs the subscriber that part of the subscription messages have been +// discarded. The subscriber may want to recover from the message loss, e.g., +// by resyncing its state with its backend. +// * Establishes a new subscription point, i.e., the subscriber is guaranteed to +// receive all changes published after the trunction event is received (or +// until another truncation event is received). +// +// Note that messages are not delivered in any particular order by the pubsub +// system. Furthermore, the system guarantees at-least-once delivery +// of each message or truncation events until acked. + +// ----------------------------------------------------------------------------- +// Deletion +// ----------------------------------------------------------------------------- + +// Both topics and subscriptions may be deleted. Deletion of a topic implies +// deletion of all attached subscriptions. +// +// When a subscription is deleted directly by calling DeleteSubscription, all +// messages are immediately dropped. If it is a pull subscriber, future pull +// requests will return NOT_FOUND. +// +// When a topic is deleted all corresponding subscriptions are immediately +// deleted, and subscribers experience the same behavior as directly deleting +// the subscription. + +// ----------------------------------------------------------------------------- +// The Publisher service and its protos. +// ----------------------------------------------------------------------------- + +// The service that an application uses to manipulate topics, and to send +// messages to a topic. +service PublisherService { + + // Creates the given topic with the given name. + rpc CreateTopic(Topic) returns (Topic) { + } + + // Adds a message to the topic. Returns NOT_FOUND if the topic does not + // exist. + // (-- For different error code values returned via Stubby, see + // util/task/codes.proto. --) + rpc Publish(PublishRequest) returns (proto2.Empty) { + } + + // Adds one or more messages to the topic. Returns NOT_FOUND if the topic does + // not exist. + rpc PublishBatch(PublishBatchRequest) returns (PublishBatchResponse) { + } + + // Gets the configuration of a topic. Since the topic only has the name + // attribute, this method is only useful to check the existence of a topic. + // If other attributes are added in the future, they will be returned here. + rpc GetTopic(GetTopicRequest) returns (Topic) { + } + + // Lists matching topics. + rpc ListTopics(ListTopicsRequest) returns (ListTopicsResponse) { + } + + // Deletes the topic with the given name. All subscriptions to this topic + // are also deleted. Returns NOT_FOUND if the topic does not exist. + // After a topic is deleted, a new topic may be created with the same name. + rpc DeleteTopic(DeleteTopicRequest) returns (proto2.Empty) { + } +} + +// A topic resource. +message Topic { + // Name of the topic. + optional string name = 1; +} + +// A message data and its labels. +message PubsubMessage { + // The message payload. + optional bytes data = 1; + + // Optional list of labels for this message. Keys in this collection must + // be unique. + //(-- TODO(eschapira): Define how key namespace may be scoped to the topic.--) + repeated tech.label.Label label = 2; + + // ID of this message assigned by the server at publication time. Guaranteed + // to be unique within the topic. This value may be read by a subscriber + // that receives a PubsubMessage via a Pull call or a push delivery. It must + // not be populated by a publisher in a Publish call. + optional string message_id = 3; +} + +// Request for the GetTopic method. +message GetTopicRequest { + // The name of the topic to get. + optional string topic = 1; +} + +// Request for the Publish method. +message PublishRequest { + // The message in the request will be published on this topic. + optional string topic = 1; + + // The message to publish. + optional PubsubMessage message = 2; +} + +// Request for the PublishBatch method. +message PublishBatchRequest { + // The messages in the request will be published on this topic. + optional string topic = 1; + + // The messages to publish. + repeated PubsubMessage messages = 2; +} + +// Response for the PublishBatch method. +message PublishBatchResponse { + // The server-assigned ID of each published message, in the same order as + // the messages in the request. IDs are guaranteed to be unique within + // the topic. + repeated string message_ids = 1; +} + +// Request for the ListTopics method. +message ListTopicsRequest { + // A valid label query expression. + // (-- Which labels are required or supported is implementation-specific. --) + optional string query = 1; + + // Maximum number of topics to return. + // (-- If not specified or <= 0, the implementation will select a reasonable + // value. --) + optional int32 max_results = 2; + + // The value obtained in the last <code>ListTopicsResponse</code> + // for continuation. + optional string page_token = 3; + +} + +// Response for the ListTopics method. +message ListTopicsResponse { + // The resulting topics. + repeated Topic topic = 1; + + // If not empty, indicates that there are more topics that match the request, + // and this value should be passed to the next <code>ListTopicsRequest</code> + // to continue. + optional string next_page_token = 2; +} + +// Request for the Delete method. +message DeleteTopicRequest { + // Name of the topic to delete. + optional string topic = 1; +} + +// ----------------------------------------------------------------------------- +// The Subscriber service and its protos. +// ----------------------------------------------------------------------------- + +// The service that an application uses to manipulate subscriptions and to +// consume messages from a subscription via the pull method. +service SubscriberService { + + // Creates a subscription on a given topic for a given subscriber. + // If the subscription already exists, returns ALREADY_EXISTS. + // If the corresponding topic doesn't exist, returns NOT_FOUND. + // + // If the name is not provided in the request, the server will assign a random + // name for this subscription on the same project as the topic. + rpc CreateSubscription(Subscription) returns (Subscription) { + } + + // Gets the configuration details of a subscription. + rpc GetSubscription(GetSubscriptionRequest) returns (Subscription) { + } + + // Lists matching subscriptions. + rpc ListSubscriptions(ListSubscriptionsRequest) + returns (ListSubscriptionsResponse) { + } + + // Deletes an existing subscription. All pending messages in the subscription + // are immediately dropped. Calls to Pull after deletion will return + // NOT_FOUND. + rpc DeleteSubscription(DeleteSubscriptionRequest) returns (proto2.Empty) { + } + + // Removes all the pending messages in the subscription and releases the + // storage associated with them. Results in a truncation event to be sent to + // the subscriber. Messages added after this call returns are stored in the + // subscription as before. + rpc TruncateSubscription(TruncateSubscriptionRequest) returns (proto2.Empty) { + } + + // + // Push subscriber calls. + // + + // Modifies the <code>PushConfig</code> for a specified subscription. + // This method can be used to suspend the flow of messages to an endpoint + // by clearing the <code>PushConfig</code> field in the request. Messages + // will be accumulated for delivery even if no push configuration is + // defined or while the configuration is modified. + rpc ModifyPushConfig(ModifyPushConfigRequest) returns (proto2.Empty) { + } + + // + // Pull Subscriber calls + // + + // Pulls a single message from the server. + // If return_immediately is true, and no messages are available in the + // subscription, this method returns FAILED_PRECONDITION. The system is free + // to return an UNAVAILABLE error if no messages are available in a + // reasonable amount of time (to reduce system load). + rpc Pull(PullRequest) returns (PullResponse) { + } + + // Pulls messages from the server. Returns an empty list if there are no + // messages available in the backlog. The system is free to return UNAVAILABLE + // if there are too many pull requests outstanding for the given subscription. + rpc PullBatch(PullBatchRequest) returns (PullBatchResponse) { + } + + // Modifies the Ack deadline for a message received from a pull request. + rpc ModifyAckDeadline(ModifyAckDeadlineRequest) returns (proto2.Empty) { + } + + // Acknowledges a particular received message: the Pub/Sub system can remove + // the given message from the subscription. Acknowledging a message whose + // Ack deadline has expired may succeed, but the message could have been + // already redelivered. Acknowledging a message more than once will not + // result in an error. This is only used for messages received via pull. + rpc Acknowledge(AcknowledgeRequest) returns (proto2.Empty) { + } + + // Refuses processing a particular received message. The system will + // redeliver this message to some consumer of the subscription at some + // future time. This is only used for messages received via pull. + rpc Nack(NackRequest) returns (proto2.Empty) { + } +} + +// A subscription resource. +message Subscription { + // Name of the subscription. + optional string name = 1; + + // The name of the topic from which this subscription is receiving messages. + optional string topic = 2; + + // If <code>query</code> is non-empty, only messages on the subscriber's + // topic whose labels match the query will be returned. Otherwise all + // messages on the topic will be returned. + // (-- The query syntax is described in tech/label/proto/label_query.proto --) + optional string query = 3; + + // The subscriber may specify requirements for truncating unacknowledged + // subscription entries. The system will honor the + // <code>CreateSubscription</code> request only if it can meet these + // requirements. If this field is not specified, messages are never truncated + // by the system. + optional TruncationPolicy truncation_policy = 4; + + // Specifies which messages can be truncated by the system. + message TruncationPolicy { + oneof policy { + // If <code>max_bytes</code> is specified, the system is allowed to drop + // old messages to keep the combined size of stored messages under + // <code>max_bytes</code>. This is a hint; the system may keep more than + // this many bytes, but will make a best effort to keep the size from + // growing much beyond this parameter. + int64 max_bytes = 1; + + // If <code>max_age_seconds</code> is specified, the system is allowed to + // drop messages that have been stored for at least this many seconds. + // This is a hint; the system may keep these messages, but will make a + // best effort to remove them when their maximum age is reached. + int64 max_age_seconds = 2; + } + } + + // If push delivery is used with this subscription, this field is + // used to configure it. + optional PushConfig push_config = 5; + + // For either push or pull delivery, the value is the maximum time after a + // subscriber receives a message before the subscriber should acknowledge or + // Nack the message. If the Ack deadline for a message passes without an + // Ack or a Nack, the Pub/Sub system will eventually redeliver the message. + // If a subscriber acknowledges after the deadline, the Pub/Sub system may + // accept the Ack, but it is possible that the message has been already + // delivered again. Multiple Acks to the message are allowed and will + // succeed. + // + // For push delivery, this value is used to set the request timeout for + // the call to the push endpoint. + // + // For pull delivery, this value is used as the initial value for the Ack + // deadline. It may be overridden for a specific pull request (message) with + // <code>ModifyAckDeadline</code>. + // While a message is outstanding (i.e. it has been delivered to a pull + // subscriber and the subscriber has not yet Acked or Nacked), the Pub/Sub + // system will not deliver that message to another pull subscriber + // (on a best-effort basis). + optional int32 ack_deadline_seconds = 6; + + // If this parameter is set to n, the system is allowed to (but not required + // to) delete the subscription when at least n seconds have elapsed since the + // client presence was detected. (Presence is detected through any + // interaction using the subscription ID, including Pull(), Get(), or + // acknowledging a message.) + // + // If this parameter is not set, the subscription will stay live until + // explicitly deleted. + // + // Clients can detect such garbage collection when a Get call or a Pull call + // (for pull subscribers only) returns NOT_FOUND. + optional int64 garbage_collect_seconds = 7; +} + +// Configuration for a push delivery endpoint. +message PushConfig { + // A URL locating the endpoint to which messages should be pushed. + // For example, a Webhook endpoint might use "https://example.com/push". + // (-- An Android application might use "gcm:<REGID>", where <REGID> is a + // GCM registration id allocated for pushing messages to the application. --) + optional string push_endpoint = 1; +} + +// An event indicating a received message or truncation event. +message PubsubEvent { + // The subscription that received the event. + optional string subscription = 1; + + oneof type { + // A received message. + PubsubMessage message = 2; + + // Indicates that this subscription has been truncated. + bool truncated = 3; + + // Indicates that this subscription has been deleted. (Note that pull + // subscribers will always receive NOT_FOUND in response in their pull + // request on the subscription, rather than seeing this boolean.) + bool deleted = 4; + } +} + +// Request for the GetSubscription method. +message GetSubscriptionRequest { + // The name of the subscription to get. + optional string subscription = 1; +} + +// Request for the ListSubscriptions method. +message ListSubscriptionsRequest { + // A valid label query expression. + // (-- Which labels are required or supported is implementation-specific. + // TODO(eschapira): This method must support to query by topic. We must + // define the key URI for the "topic" label. --) + optional string query = 1; + + // Maximum number of subscriptions to return. + // (-- If not specified or <= 0, the implementation will select a reasonable + // value. --) + optional int32 max_results = 3; + + // The value obtained in the last <code>ListSubscriptionsResponse</code> + // for continuation. + optional string page_token = 4; +} + +// Response for the ListSubscriptions method. +message ListSubscriptionsResponse { + // The subscriptions that match the request. + repeated Subscription subscription = 1; + + // If not empty, indicates that there are more subscriptions that match the + // request and this value should be passed to the next + // <code>ListSubscriptionsRequest</code> to continue. + optional string next_page_token = 2; +} + +// Request for the TruncateSubscription method. +message TruncateSubscriptionRequest { + // The subscription that is being truncated. + optional string subscription = 1; +} + +// Request for the DeleteSubscription method. +message DeleteSubscriptionRequest { + // The subscription to delete. + optional string subscription = 1; +} + +// Request for the ModifyPushConfig method. +message ModifyPushConfigRequest { + // The name of the subscription. + optional string subscription = 1; + + // An empty <code>push_config</code> indicates that the Pub/Sub system should + // pause pushing messages from the given subscription. + optional PushConfig push_config = 2; +} + +// ----------------------------------------------------------------------------- +// The protos used by a pull subscriber. +// ----------------------------------------------------------------------------- + +// Request for the Pull method. +message PullRequest { + // The subscription from which a message should be pulled. + optional string subscription = 1; + + // If this is specified as true the system will respond immediately even if + // it is not able to return a message in the Pull response. Otherwise the + // system is allowed to wait until at least one message is available rather + // than returning FAILED_PRECONDITION. The client may cancel the request if + // it does not wish to wait any longer for the response. + optional bool return_immediately = 2; +} + +// Either a <code>PubsubMessage</code> or a truncation event. One of these two +// must be populated. +message PullResponse { + // This ID must be used to acknowledge the received event or message. + optional string ack_id = 1; + + // A pubsub message or truncation event. + optional PubsubEvent pubsub_event = 2; +} + +// Request for the PullBatch method. +message PullBatchRequest { + // The subscription from which messages should be pulled. + optional string subscription = 1; + + // If this is specified as true the system will respond immediately even if + // it is not able to return a message in the Pull response. Otherwise the + // system is allowed to wait until at least one message is available rather + // than returning no messages. The client may cancel the request if it does + // not wish to wait any longer for the response. + optional bool return_immediately = 2; + + // The maximum number of PubsubEvents returned for this request. The Pub/Sub + // system may return fewer than the number of events specified. + optional int32 max_events = 3; +} + +// Response for the PullBatch method. +message PullBatchResponse { + + // Received Pub/Sub messages or status events. The Pub/Sub system will return + // zero messages if there are no more messages available in the backlog. The + // Pub/Sub system may return fewer than the max_events requested even if + // there are more messages available in the backlog. + repeated PullResponse pull_responses = 2; +} + +// Request for the ModifyAckDeadline method. +message ModifyAckDeadlineRequest { + // The name of the subscription from which messages are being pulled. + optional string subscription = 1; + + // The acknowledgment ID. + optional string ack_id = 2; + + // The new Ack deadline. Must be >= 0. + optional int32 ack_deadline_seconds = 3; +} + +// Request for the Acknowledge method. +message AcknowledgeRequest { + // The subscription whose message is being acknowledged. + optional string subscription = 1; + + // The acknowledgment ID for the message being acknowledged. This was + // returned by the Pub/Sub system in the Pull response. + repeated string ack_id = 2; +} + +// Request for the Nack method. +message NackRequest { + // The subscription whose message is being Nacked. + optional string subscription = 1; + + // The acknowledgment ID for the message being refused. This was returned by + // the Pub/Sub system in the Pull response. + repeated string ack_id = 2; +} + +// ----------------------------------------------------------------------------- +// The service and protos used by a push subscriber. +// ----------------------------------------------------------------------------- + +// The service that a subscriber uses to handle messages sent via push +// delivery. +// This service is not currently exported for HTTP clients. +// TODO(eschapira): Explain HTTP subscribers. +service PushEndpointService { + // Sends a <code>PubsubMessage</code> or a subscription status event to a + // push endpoint. + // The push endpoint responds with an empty message and a code from + // util/task/codes.proto. The following codes have a particular meaning to the + // Pub/Sub system: + // OK - This is interpreted by Pub/Sub as Ack. + // ABORTED - This is intepreted by Pub/Sub as a Nack, without implying + // pushback for congestion control. The Pub/Sub system will + // retry this message at a later time. + // UNAVAILABLE - This is intepreted by Pub/Sub as a Nack, with the additional + // semantics of push-back. The Pub/Sub system will use an AIMD + // congestion control algorithm to backoff the rate of sending + // messages from this subscription. + // Any other code, or a failure to respond, will be interpreted in the same + // way as ABORTED; i.e. the system will retry the message at a later time to + // ensure reliable delivery. + rpc HandlePubsubEvent(PubsubEvent) returns (proto2.Empty); +} diff --git a/include/grpc++/server_credentials.h b/include/grpc++/server_credentials.h index cf08870f424eb208113f5ff2ba538cfbe88ee70b..91504ae0ae3cc3e435f1169cd7d77ebb15649bed 100644 --- a/include/grpc++/server_credentials.h +++ b/include/grpc++/server_credentials.h @@ -35,6 +35,7 @@ #define __GRPCPP_SERVER_CREDENTIALS_H_ #include <memory> +#include <vector> #include <grpc++/config.h> @@ -60,9 +61,12 @@ class ServerCredentials final { // Options to create ServerCredentials with SSL struct SslServerCredentialsOptions { + struct PemKeyCertPair{ + grpc::string private_key; + grpc::string cert_chain; + }; grpc::string pem_root_certs; - grpc::string pem_private_key; - grpc::string pem_cert_chain; + std::vector<PemKeyCertPair> pem_key_cert_pairs; }; // Factory for building different types of ServerCredentials diff --git a/include/grpc/grpc.h b/include/grpc/grpc.h index 45915cbfadfb48aaea715eedee5d836e48428b36..f03f61d84ed8499fa07a2b84a2d63ff20d616327 100644 --- a/include/grpc/grpc.h +++ b/include/grpc/grpc.h @@ -194,6 +194,7 @@ typedef enum grpc_completion_type { GRPC_FINISHED, /* An RPC has finished. The event contains status. On the server this will be OK or Cancelled. */ GRPC_SERVER_RPC_NEW, /* A new RPC has arrived at the server */ + GRPC_SERVER_SHUTDOWN, /* The server has finished shutting down */ GRPC_COMPLETION_DO_NOT_USE /* must be last, forces users to include a default: case */ } grpc_completion_type; @@ -232,12 +233,12 @@ typedef struct grpc_event { } grpc_event; /* Initialize the grpc library */ -void grpc_init(); +void grpc_init(void); /* Shutdown the grpc library */ -void grpc_shutdown(); +void grpc_shutdown(void); -grpc_completion_queue *grpc_completion_queue_create(); +grpc_completion_queue *grpc_completion_queue_create(void); /* Blocks until an event is available, the completion queue is being shutdown, or deadline is reached. Returns NULL on timeout, otherwise the event that @@ -325,22 +326,6 @@ grpc_call_error grpc_call_start_invoke(grpc_call *call, void *metadata_read_tag, void *finished_tag, gpr_uint32 flags); -/* DEPRECATED: users should use grpc_call_server_accept, and - grpc_call_server_end_initial_metadata instead now. - - - Accept an incoming RPC, binding a completion queue to it. - To be called after adding metadata to the call, but before sending - messages. - flags is a bit-field combination of the write flags defined above. - REQUIRES: Can be called at most once per call. - Can only be called on the server. - Produces a GRPC_FINISHED event with finished_tag when the call has been - completed (there may be other events for the call pending at this - time) */ -grpc_call_error grpc_call_accept(grpc_call *call, grpc_completion_queue *cq, - void *finished_tag, gpr_uint32 flags); - /* Accept an incoming RPC, binding a completion queue to it. To be called before sending or receiving messages. REQUIRES: Can be called at most once per call. @@ -443,7 +428,8 @@ grpc_server *grpc_server_create(grpc_completion_queue *cq, REQUIRES: server not started */ int grpc_server_add_http2_port(grpc_server *server, const char *addr); -/* Add a secure port to server; returns 1 on success, 0 on failure +/* Add a secure port to server. + Returns bound port number on success, 0 on failure. REQUIRES: server not started */ int grpc_server_add_secure_http2_port(grpc_server *server, const char *addr); @@ -455,6 +441,10 @@ void grpc_server_start(grpc_server *server); Existing calls will be allowed to complete. */ void grpc_server_shutdown(grpc_server *server); +/* As per grpc_server_shutdown, but send a GRPC_SERVER_SHUTDOWN event when + there are no more calls being serviced. */ +void grpc_server_shutdown_and_notify(grpc_server *server, void *tag); + /* Destroy a server. Forcefully cancels all existing calls. */ void grpc_server_destroy(grpc_server *server); diff --git a/include/grpc/grpc_security.h b/include/grpc/grpc_security.h index 644b31f763b6486b9536b809c54eea1ab7160ced..0732a8f83a580c76f999053b4673c56bf804efb8 100644 --- a/include/grpc/grpc_security.h +++ b/include/grpc/grpc_security.h @@ -54,22 +54,26 @@ void grpc_credentials_release(grpc_credentials *creds); /* Creates default credentials. */ grpc_credentials *grpc_default_credentials_create(void); +/* Object that holds a private key / certificate chain pair in PEM format. */ +typedef struct { + /* private_key is the NULL-terminated string containing the PEM encoding of + the client's private key. */ + const char *private_key; + + /* cert_chain is the NULL-terminated string containing the PEM encoding of + the client's certificate chain. */ + const char *cert_chain; +} grpc_ssl_pem_key_cert_pair; + /* Creates an SSL credentials object. - - pem_roots_cert is the buffer containing the PEM encoding of the server - root certificates. This parameter cannot be NULL. - - pem_roots_cert_size is the size of the associated buffer. - - pem_private_key is the buffer containing the PEM encoding of the client's - private key. This parameter can be NULL if the client does not have a - private key. - - pem_private_key_size is the size of the associated buffer. - - pem_cert_chain is the buffer containing the PEM encoding of the client's - certificate chain. This parameter can be NULL if the client does not have - a certificate chain. - - pem_cert_chain_size is the size of the associated buffer. */ + - pem_roots_cert is the NULL-terminated string containing the PEM encoding + of the server root certificates. If this parameter is NULL, the default + roots will be used. + - pem_key_cert_pair is a pointer on the object containing client's private + key and certificate chain. This parameter can be NULL if the client does + not have such a key/cert pair. */ grpc_credentials *grpc_ssl_credentials_create( - const unsigned char *pem_root_certs, size_t pem_root_certs_size, - const unsigned char *pem_private_key, size_t pem_private_key_size, - const unsigned char *pem_cert_chain, size_t pem_cert_chain_size); + const char *pem_root_certs, grpc_ssl_pem_key_cert_pair *pem_key_cert_pair); /* Creates a composite credentials object. */ grpc_credentials *grpc_composite_credentials_create(grpc_credentials *creds1, @@ -130,22 +134,16 @@ typedef struct grpc_server_credentials grpc_server_credentials; void grpc_server_credentials_release(grpc_server_credentials *creds); /* Creates an SSL server_credentials object. - TODO(jboeuf): Change the constructor so that it can support multiple - key/cert pairs. - - pem_roots_cert is the buffer containing the PEM encoding of the server - root certificates. This parameter may be NULL if the server does not want - the client to be authenticated with SSL. - - pem_roots_cert_size is the size of the associated buffer. - - pem_private_key is the buffer containing the PEM encoding of the client's - private key. This parameter cannot be NULL. - - pem_private_key_size is the size of the associated buffer. - - pem_cert_chain is the buffer containing the PEM encoding of the client's - certificate chain. This parameter cannot be NULL. - - pem_cert_chain_size is the size of the associated buffer. */ + - pem_roots_cert is the NULL-terminated string containing the PEM encoding of + the client root certificates. This parameter may be NULL if the server does + not want the client to be authenticated with SSL. + - pem_key_cert_pairs is an array private key / certificate chains of the + server. This parameter cannot be NULL. + - num_key_cert_pairs indicates the number of items in the private_key_files + and cert_chain_files parameters. It should be at least 1. */ grpc_server_credentials *grpc_ssl_server_credentials_create( - const unsigned char *pem_root_certs, size_t pem_root_certs_size, - const unsigned char *pem_private_key, size_t pem_private_key_size, - const unsigned char *pem_cert_chain, size_t pem_cert_chain_size); + const char *pem_root_certs, grpc_ssl_pem_key_cert_pair *pem_key_cert_pairs, + size_t num_key_cert_pairs); /* Creates a fake server transport security credentials object for testing. */ grpc_server_credentials *grpc_fake_transport_security_server_credentials_create( diff --git a/include/grpc/support/slice.h b/include/grpc/support/slice.h index 597b5688fce6f5bd8b8c68294dfe0289f83e992d..7828ccdd13c305b00eb7255add9ed8516e55a33e 100644 --- a/include/grpc/support/slice.h +++ b/include/grpc/support/slice.h @@ -163,7 +163,7 @@ gpr_slice gpr_slice_split_tail(gpr_slice *s, size_t split); Requires s intialized, split <= s.length */ gpr_slice gpr_slice_split_head(gpr_slice *s, size_t split); -gpr_slice gpr_empty_slice(); +gpr_slice gpr_empty_slice(void); /* Returns <0 if a < b, ==0 if a == b, >0 if a > b */ int gpr_slice_cmp(gpr_slice a, gpr_slice b); diff --git a/src/compiler/cpp_generator.cc b/src/compiler/cpp_generator.cc index 94e56d73a6e338dcc36d4d946451cf3bc51316ed..8724f97e8be496435a5ec235dd2e9fa85facb776 100644 --- a/src/compiler/cpp_generator.cc +++ b/src/compiler/cpp_generator.cc @@ -31,6 +31,9 @@ * */ +#include <string> +#include <map> + #include "src/compiler/cpp_generator.h" #include "src/compiler/cpp_generator_helpers.h" @@ -42,23 +45,23 @@ namespace grpc_cpp_generator { namespace { -bool NoStreaming(const google::protobuf::MethodDescriptor* method) { +bool NoStreaming(const google::protobuf::MethodDescriptor *method) { return !method->client_streaming() && !method->server_streaming(); } -bool ClientOnlyStreaming(const google::protobuf::MethodDescriptor* method) { +bool ClientOnlyStreaming(const google::protobuf::MethodDescriptor *method) { return method->client_streaming() && !method->server_streaming(); } -bool ServerOnlyStreaming(const google::protobuf::MethodDescriptor* method) { +bool ServerOnlyStreaming(const google::protobuf::MethodDescriptor *method) { return !method->client_streaming() && method->server_streaming(); } -bool BidiStreaming(const google::protobuf::MethodDescriptor* method) { +bool BidiStreaming(const google::protobuf::MethodDescriptor *method) { return method->client_streaming() && method->server_streaming(); } -bool HasClientOnlyStreaming(const google::protobuf::FileDescriptor* file) { +bool HasClientOnlyStreaming(const google::protobuf::FileDescriptor *file) { for (int i = 0; i < file->service_count(); i++) { for (int j = 0; j < file->service(i)->method_count(); j++) { if (ClientOnlyStreaming(file->service(i)->method(j))) { @@ -69,7 +72,7 @@ bool HasClientOnlyStreaming(const google::protobuf::FileDescriptor* file) { return false; } -bool HasServerOnlyStreaming(const google::protobuf::FileDescriptor* file) { +bool HasServerOnlyStreaming(const google::protobuf::FileDescriptor *file) { for (int i = 0; i < file->service_count(); i++) { for (int j = 0; j < file->service(i)->method_count(); j++) { if (ServerOnlyStreaming(file->service(i)->method(j))) { @@ -80,7 +83,7 @@ bool HasServerOnlyStreaming(const google::protobuf::FileDescriptor* file) { return false; } -bool HasBidiStreaming(const google::protobuf::FileDescriptor* file) { +bool HasBidiStreaming(const google::protobuf::FileDescriptor *file) { for (int i = 0; i < file->service_count(); i++) { for (int j = 0; j < file->service(i)->method_count(); j++) { if (BidiStreaming(file->service(i)->method(j))) { @@ -92,8 +95,8 @@ bool HasBidiStreaming(const google::protobuf::FileDescriptor* file) { } } // namespace -string GetHeaderIncludes(const google::protobuf::FileDescriptor* file) { - string temp = +std::string GetHeaderIncludes(const google::protobuf::FileDescriptor *file) { + std::string temp = "#include \"grpc++/impl/internal_stub.h\"\n" "#include \"grpc++/status.h\"\n" "\n" @@ -121,16 +124,16 @@ string GetHeaderIncludes(const google::protobuf::FileDescriptor* file) { return temp; } -string GetSourceIncludes() { +std::string GetSourceIncludes() { return "#include \"grpc++/channel_interface.h\"\n" "#include \"grpc++/impl/rpc_method.h\"\n" "#include \"grpc++/impl/rpc_service_method.h\"\n" "#include \"grpc++/stream.h\"\n"; } -void PrintHeaderClientMethod(google::protobuf::io::Printer* printer, - const google::protobuf::MethodDescriptor* method, - map<string, string>* vars) { +void PrintHeaderClientMethod(google::protobuf::io::Printer *printer, + const google::protobuf::MethodDescriptor *method, + std::map<std::string, std::string> *vars) { (*vars)["Method"] = method->name(); (*vars)["Request"] = grpc_cpp_generator::ClassName(method->input_type(), true); @@ -157,9 +160,9 @@ void PrintHeaderClientMethod(google::protobuf::io::Printer* printer, } } -void PrintHeaderServerMethod(google::protobuf::io::Printer* printer, - const google::protobuf::MethodDescriptor* method, - map<string, string>* vars) { +void PrintHeaderServerMethod(google::protobuf::io::Printer *printer, + const google::protobuf::MethodDescriptor *method, + std::map<std::string, std::string> *vars) { (*vars)["Method"] = method->name(); (*vars)["Request"] = grpc_cpp_generator::ClassName(method->input_type(), true); @@ -191,9 +194,9 @@ void PrintHeaderServerMethod(google::protobuf::io::Printer* printer, } } -void PrintHeaderService(google::protobuf::io::Printer* printer, - const google::protobuf::ServiceDescriptor* service, - map<string, string>* vars) { +void PrintHeaderService(google::protobuf::io::Printer *printer, + const google::protobuf::ServiceDescriptor *service, + std::map<std::string, std::string> *vars) { (*vars)["Service"] = service->name(); printer->Print(*vars, @@ -238,11 +241,11 @@ void PrintHeaderService(google::protobuf::io::Printer* printer, printer->Print("};\n"); } -string GetHeaderServices(const google::protobuf::FileDescriptor* file) { - string output; +std::string GetHeaderServices(const google::protobuf::FileDescriptor *file) { + std::string output; google::protobuf::io::StringOutputStream output_stream(&output); google::protobuf::io::Printer printer(&output_stream, '$'); - map<string, string> vars; + std::map<std::string, std::string> vars; for (int i = 0; i < file->service_count(); ++i) { PrintHeaderService(&printer, file->service(i), &vars); @@ -251,9 +254,9 @@ string GetHeaderServices(const google::protobuf::FileDescriptor* file) { return output; } -void PrintSourceClientMethod(google::protobuf::io::Printer* printer, - const google::protobuf::MethodDescriptor* method, - map<string, string>* vars) { +void PrintSourceClientMethod(google::protobuf::io::Printer *printer, + const google::protobuf::MethodDescriptor *method, + std::map<std::string, std::string> *vars) { (*vars)["Method"] = method->name(); (*vars)["Request"] = grpc_cpp_generator::ClassName(method->input_type(), true); @@ -309,9 +312,9 @@ void PrintSourceClientMethod(google::protobuf::io::Printer* printer, } } -void PrintSourceServerMethod(google::protobuf::io::Printer* printer, - const google::protobuf::MethodDescriptor* method, - map<string, string>* vars) { +void PrintSourceServerMethod(google::protobuf::io::Printer *printer, + const google::protobuf::MethodDescriptor *method, + std::map<std::string, std::string> *vars) { (*vars)["Method"] = method->name(); (*vars)["Request"] = grpc_cpp_generator::ClassName(method->input_type(), true); @@ -359,9 +362,9 @@ void PrintSourceServerMethod(google::protobuf::io::Printer* printer, } } -void PrintSourceService(google::protobuf::io::Printer* printer, - const google::protobuf::ServiceDescriptor* service, - map<string, string>* vars) { +void PrintSourceService(google::protobuf::io::Printer *printer, + const google::protobuf::ServiceDescriptor *service, + std::map<std::string, std::string> *vars) { (*vars)["Service"] = service->name(); printer->Print( *vars, @@ -391,7 +394,7 @@ void PrintSourceService(google::protobuf::io::Printer* printer, "}\n"); printer->Print("service_ = new ::grpc::RpcService();\n"); for (int i = 0; i < service->method_count(); ++i) { - const google::protobuf::MethodDescriptor* method = service->method(i); + const google::protobuf::MethodDescriptor *method = service->method(i); (*vars)["Method"] = method->name(); (*vars)["Request"] = grpc_cpp_generator::ClassName(method->input_type(), true); @@ -455,11 +458,11 @@ void PrintSourceService(google::protobuf::io::Printer* printer, printer->Print("}\n\n"); } -string GetSourceServices(const google::protobuf::FileDescriptor* file) { - string output; +std::string GetSourceServices(const google::protobuf::FileDescriptor *file) { + std::string output; google::protobuf::io::StringOutputStream output_stream(&output); google::protobuf::io::Printer printer(&output_stream, '$'); - map<string, string> vars; + std::map<std::string, std::string> vars; // Package string is empty or ends with a dot. It is used to fully qualify // method names. vars["Package"] = file->package(); diff --git a/src/compiler/cpp_generator.h b/src/compiler/cpp_generator.h index 8bd785f13e81a2577fb2f81eced1651ef9f804b7..fe84d08b4c8a9a7453df6b587cf84db4053e84e4 100644 --- a/src/compiler/cpp_generator.h +++ b/src/compiler/cpp_generator.h @@ -42,21 +42,19 @@ class FileDescriptor; } // namespace protobuf } // namespace google -using namespace std; - namespace grpc_cpp_generator { // Return the includes needed for generated header file. -string GetHeaderIncludes(const google::protobuf::FileDescriptor* file); +std::string GetHeaderIncludes(const google::protobuf::FileDescriptor *file); // Return the includes needed for generated source file. -string GetSourceIncludes(); +std::string GetSourceIncludes(); // Return the services for generated header file. -string GetHeaderServices(const google::protobuf::FileDescriptor* file); +std::string GetHeaderServices(const google::protobuf::FileDescriptor *file); // Return the services for generated source file. -string GetSourceServices(const google::protobuf::FileDescriptor* file); +std::string GetSourceServices(const google::protobuf::FileDescriptor *file); } // namespace grpc_cpp_generator diff --git a/src/compiler/cpp_generator_helpers.h b/src/compiler/cpp_generator_helpers.h index ba251faf29af4bf5da733babb0bed7ecde80a544..54c343866fc6bc25853ac7e6bc8ee0e541a2be45 100644 --- a/src/compiler/cpp_generator_helpers.h +++ b/src/compiler/cpp_generator_helpers.h @@ -39,14 +39,12 @@ #include <google/protobuf/descriptor.h> #include <google/protobuf/descriptor.pb.h> -using namespace std; - namespace grpc_cpp_generator { -inline bool StripSuffix(string* filename, const string& suffix) { +inline bool StripSuffix(std::string *filename, const std::string &suffix) { if (filename->length() >= suffix.length()) { size_t suffix_pos = filename->length() - suffix.length(); - if (filename->compare(suffix_pos, string::npos, suffix) == 0) { + if (filename->compare(suffix_pos, std::string::npos, suffix) == 0) { filename->resize(filename->size() - suffix.size()); return true; } @@ -55,19 +53,20 @@ inline bool StripSuffix(string* filename, const string& suffix) { return false; } -inline string StripProto(string filename) { +inline std::string StripProto(std::string filename) { if (!StripSuffix(&filename, ".protodevel")) { StripSuffix(&filename, ".proto"); } return filename; } -inline string StringReplace(string str, const string& from, const string& to) { +inline std::string StringReplace(std::string str, const std::string &from, + const std::string &to) { size_t pos = 0; for (;;) { pos = str.find(from, pos); - if (pos == string::npos) { + if (pos == std::string::npos) { break; } str.replace(pos, from.length(), to); @@ -77,23 +76,23 @@ inline string StringReplace(string str, const string& from, const string& to) { return str; } -inline string DotsToColons(const string& name) { +inline std::string DotsToColons(const std::string &name) { return StringReplace(name, ".", "::"); } -inline string DotsToUnderscores(const string& name) { +inline std::string DotsToUnderscores(const std::string &name) { return StringReplace(name, ".", "_"); } -inline string ClassName(const google::protobuf::Descriptor* descriptor, - bool qualified) { +inline std::string ClassName(const google::protobuf::Descriptor *descriptor, + bool qualified) { // Find "outer", the descriptor of the top-level message in which // "descriptor" is embedded. - const google::protobuf::Descriptor* outer = descriptor; + const google::protobuf::Descriptor *outer = descriptor; while (outer->containing_type() != NULL) outer = outer->containing_type(); - const string& outer_name = outer->full_name(); - string inner_name = descriptor->full_name().substr(outer_name.size()); + const std::string &outer_name = outer->full_name(); + std::string inner_name = descriptor->full_name().substr(outer_name.size()); if (qualified) { return "::" + DotsToColons(outer_name) + DotsToUnderscores(inner_name); diff --git a/src/compiler/cpp_plugin.cc b/src/compiler/cpp_plugin.cc index 17836b161259298f5fbaa377a3f9d5cd4bb9ee51..a7fdb1f093f01c1ba5c978a301a2bcf26cb5877f 100644 --- a/src/compiler/cpp_plugin.cc +++ b/src/compiler/cpp_plugin.cc @@ -35,6 +35,8 @@ // #include <memory> +#include <string> + #include "src/compiler/cpp_generator.h" #include "src/compiler/cpp_generator_helpers.h" #include <google/protobuf/descriptor.h> @@ -49,10 +51,10 @@ class CppGrpcGenerator : public google::protobuf::compiler::CodeGenerator { CppGrpcGenerator() {} virtual ~CppGrpcGenerator() {} - virtual bool Generate(const google::protobuf::FileDescriptor* file, - const string& parameter, - google::protobuf::compiler::GeneratorContext* context, - string* error) const { + virtual bool Generate(const google::protobuf::FileDescriptor *file, + const std::string ¶meter, + google::protobuf::compiler::GeneratorContext *context, + std::string *error) const { if (file->options().cc_generic_services()) { *error = "cpp grpc proto compiler plugin does not work with generic " @@ -61,7 +63,7 @@ class CppGrpcGenerator : public google::protobuf::compiler::CodeGenerator { return false; } - string file_name = grpc_cpp_generator::StripProto(file->name()); + std::string file_name = grpc_cpp_generator::StripProto(file->name()); // Generate .pb.h Insert(context, file_name + ".pb.h", "includes", @@ -79,9 +81,9 @@ class CppGrpcGenerator : public google::protobuf::compiler::CodeGenerator { private: // Insert the given code into the given file at the given insertion point. - void Insert(google::protobuf::compiler::GeneratorContext* context, - const string& filename, const string& insertion_point, - const string& code) const { + void Insert(google::protobuf::compiler::GeneratorContext *context, + const std::string &filename, const std::string &insertion_point, + const std::string &code) const { std::unique_ptr<google::protobuf::io::ZeroCopyOutputStream> output( context->OpenForInsert(filename, insertion_point)); google::protobuf::io::CodedOutputStream coded_out(output.get()); @@ -89,7 +91,7 @@ class CppGrpcGenerator : public google::protobuf::compiler::CodeGenerator { } }; -int main(int argc, char* argv[]) { +int main(int argc, char *argv[]) { CppGrpcGenerator generator; return google::protobuf::compiler::PluginMain(argc, argv, &generator); } diff --git a/src/compiler/ruby_generator.cc b/src/compiler/ruby_generator.cc index fae8858ff720fd80c7fe8eb5006c930e8eb278e2..16632325dcb8038917edd9d3ca754d182d617728 100644 --- a/src/compiler/ruby_generator.cc +++ b/src/compiler/ruby_generator.cc @@ -32,6 +32,7 @@ */ #include <cctype> +#include <string> #include <map> #include <vector> @@ -56,17 +57,17 @@ namespace grpc_ruby_generator { namespace { // Prints out the method using the ruby gRPC DSL. -void PrintMethod(const MethodDescriptor* method, const string& package, - Printer* out) { - string input_type = RubyTypeOf(method->input_type()->name(), package); +void PrintMethod(const MethodDescriptor *method, const std::string &package, + Printer *out) { + std::string input_type = RubyTypeOf(method->input_type()->name(), package); if (method->client_streaming()) { input_type = "stream(" + input_type + ")"; } - string output_type = RubyTypeOf(method->output_type()->name(), package); + std::string output_type = RubyTypeOf(method->output_type()->name(), package); if (method->server_streaming()) { output_type = "stream(" + output_type + ")"; } - map<string, string> method_vars = ListToDict({ + std::map<std::string, std::string> method_vars = ListToDict({ "mth.name", method->name(), "input.type", input_type, "output.type", output_type, }); @@ -74,22 +75,22 @@ void PrintMethod(const MethodDescriptor* method, const string& package, } // Prints out the service using the ruby gRPC DSL. -void PrintService(const ServiceDescriptor* service, const string& package, - Printer* out) { +void PrintService(const ServiceDescriptor *service, const std::string &package, + Printer *out) { if (service->method_count() == 0) { return; } // Begin the service module - map<string, string> module_vars = ListToDict({ + std::map<std::string, std::string> module_vars = ListToDict({ "module.name", CapitalizeFirst(service->name()), }); out->Print(module_vars, "module $module.name$\n"); out->Indent(); // TODO(temiola): add documentation - string doc = "TODO: add proto service documentation here"; - map<string, string> template_vars = ListToDict({ + std::string doc = "TODO: add proto service documentation here"; + std::map<std::string, std::string> template_vars = ListToDict({ "Documentation", doc, }); out->Print("\n"); @@ -103,7 +104,7 @@ void PrintService(const ServiceDescriptor* service, const string& package, out->Print("\n"); out->Print("self.marshal_class_method = :encode\n"); out->Print("self.unmarshal_class_method = :decode\n"); - map<string, string> pkg_vars = ListToDict({ + std::map<std::string, std::string> pkg_vars = ListToDict({ "service.name", service->name(), "pkg.name", package, }); out->Print(pkg_vars, "self.service_name = '$pkg.name$.$service.name$'\n"); @@ -124,8 +125,8 @@ void PrintService(const ServiceDescriptor* service, const string& package, } // namespace -string GetServices(const FileDescriptor* file) { - string output; +std::string GetServices(const FileDescriptor *file) { + std::string output; StringOutputStream output_stream(&output); Printer out(&output_stream, '$'); @@ -136,7 +137,7 @@ string GetServices(const FileDescriptor* file) { } // Write out a file header. - map<string, string> header_comment_vars = ListToDict({ + std::map<std::string, std::string> header_comment_vars = ListToDict({ "file.name", file->name(), "file.package", file->package(), }); out.Print("# Generated by the protocol buffer compiler. DO NOT EDIT!\n"); @@ -148,16 +149,16 @@ string GetServices(const FileDescriptor* file) { // Write out require statemment to import the separately generated file // that defines the messages used by the service. This is generated by the // main ruby plugin. - map<string, string> dep_vars = ListToDict({ + std::map<std::string, std::string> dep_vars = ListToDict({ "dep.name", MessagesRequireName(file), }); out.Print(dep_vars, "require '$dep.name$'\n"); // Write out services within the modules out.Print("\n"); - vector<string> modules = Split(file->package(), '.'); + std::vector<std::string> modules = Split(file->package(), '.'); for (size_t i = 0; i < modules.size(); ++i) { - map<string, string> module_vars = ListToDict({ + std::map<std::string, std::string> module_vars = ListToDict({ "module.name", CapitalizeFirst(modules[i]), }); out.Print(module_vars, "module $module.name$\n"); diff --git a/src/compiler/ruby_generator.h b/src/compiler/ruby_generator.h index 4f13f1a33b060a694a748ce922f135822c07b032..89d7a0b92a9f5c9942660a4a68b12bb69490bc61 100644 --- a/src/compiler/ruby_generator.h +++ b/src/compiler/ruby_generator.h @@ -36,8 +36,6 @@ #include <string> -using namespace std; - namespace google { namespace protobuf { class FileDescriptor; @@ -46,7 +44,7 @@ class FileDescriptor; namespace grpc_ruby_generator { -string GetServices(const google::protobuf::FileDescriptor* file); +std::string GetServices(const google::protobuf::FileDescriptor *file); } // namespace grpc_ruby_generator diff --git a/src/compiler/ruby_generator_helpers-inl.h b/src/compiler/ruby_generator_helpers-inl.h index 8263e353b2449980adc8d22fc403cc984b3b03d6..0034f5ef569bd9d64f22cfb17496606e10728ad3 100644 --- a/src/compiler/ruby_generator_helpers-inl.h +++ b/src/compiler/ruby_generator_helpers-inl.h @@ -41,8 +41,8 @@ namespace grpc_ruby_generator { -inline bool ServicesFilename(const google::protobuf::FileDescriptor* file, - string* file_name_or_error) { +inline bool ServicesFilename(const google::protobuf::FileDescriptor *file, + std::string *file_name_or_error) { // Get output file name. static const unsigned proto_suffix_length = 6; // length of ".proto" if (file->name().size() > proto_suffix_length && @@ -57,8 +57,8 @@ inline bool ServicesFilename(const google::protobuf::FileDescriptor* file, } } -inline string MessagesRequireName( - const google::protobuf::FileDescriptor* file) { +inline std::string MessagesRequireName( + const google::protobuf::FileDescriptor *file) { return Replace(file->name(), ".proto", ""); } diff --git a/src/compiler/ruby_generator_map-inl.h b/src/compiler/ruby_generator_map-inl.h index fa86fbb95691c3f919ab5cebf490343b2bf96b58..fea9c2e2fac616c40c0ae2e96d46ebc90eb719f2 100644 --- a/src/compiler/ruby_generator_map-inl.h +++ b/src/compiler/ruby_generator_map-inl.h @@ -48,17 +48,18 @@ namespace grpc_ruby_generator { // Converts an initializer list of the form { key0, value0, key1, value1, ... } // into a map of key* to value*. Is merely a readability helper for later code. -inline map<string, string> ListToDict(const initializer_list<string>& values) { +inline std::map<std::string, std::string> ListToDict( + const initializer_list<std::string> &values) { if (values.size() % 2 != 0) { // MOE: insert std::cerr << "Not every 'key' has a value in `values`." // << std::endl; } - map<string, string> value_map; + std::map<std::string, std::string> value_map; auto value_iter = values.begin(); for (unsigned i = 0; i < values.size() / 2; ++i) { - string key = *value_iter; + std::string key = *value_iter; ++value_iter; - string value = *value_iter; + std::string value = *value_iter; value_map[key] = value; ++value_iter; } diff --git a/src/compiler/ruby_generator_string-inl.h b/src/compiler/ruby_generator_string-inl.h index 44e17a202a767012ac8ec7869e8907b009fdf724..d24a61b9f5f976c20d3feb9416c9f815d148c33d 100644 --- a/src/compiler/ruby_generator_string-inl.h +++ b/src/compiler/ruby_generator_string-inl.h @@ -45,10 +45,10 @@ using std::transform; namespace grpc_ruby_generator { // Split splits a string using char into elems. -inline vector<string>& Split(const string& s, char delim, - vector<string>* elems) { - stringstream ss(s); - string item; +inline std::vector<std::string> &Split(const std::string &s, char delim, + std::vector<std::string> *elems) { + std::stringstream ss(s); + std::string item; while (getline(ss, item, delim)) { elems->push_back(item); } @@ -56,16 +56,17 @@ inline vector<string>& Split(const string& s, char delim, } // Split splits a string using char, returning the result in a vector. -inline vector<string> Split(const string& s, char delim) { - vector<string> elems; +inline std::vector<std::string> Split(const std::string &s, char delim) { + std::vector<std::string> elems; Split(s, delim, &elems); return elems; } // Replace replaces from with to in s. -inline string Replace(string s, const string& from, const string& to) { +inline std::string Replace(std::string s, const std::string &from, + const std::string &to) { size_t start_pos = s.find(from); - if (start_pos == string::npos) { + if (start_pos == std::string::npos) { return s; } s.replace(start_pos, from.length(), to); @@ -73,10 +74,10 @@ inline string Replace(string s, const string& from, const string& to) { } // ReplaceAll replaces all instances of search with replace in s. -inline string ReplaceAll(string s, const string& search, - const string& replace) { +inline std::string ReplaceAll(std::string s, const std::string &search, + const std::string &replace) { size_t pos = 0; - while ((pos = s.find(search, pos)) != string::npos) { + while ((pos = s.find(search, pos)) != std::string::npos) { s.replace(pos, search.length(), replace); pos += replace.length(); } @@ -84,9 +85,10 @@ inline string ReplaceAll(string s, const string& search, } // ReplacePrefix replaces from with to in s if search is a prefix of s. -inline bool ReplacePrefix(string* s, const string& from, const string& to) { +inline bool ReplacePrefix(std::string *s, const std::string &from, + const std::string &to) { size_t start_pos = s->find(from); - if (start_pos == string::npos || start_pos != 0) { + if (start_pos == std::string::npos || start_pos != 0) { return false; } s->replace(start_pos, from.length(), to); @@ -94,7 +96,7 @@ inline bool ReplacePrefix(string* s, const string& from, const string& to) { } // CapitalizeFirst capitalizes the first char in a string. -inline string CapitalizeFirst(string s) { +inline std::string CapitalizeFirst(std::string s) { if (s.empty()) { return s; } @@ -103,14 +105,15 @@ inline string CapitalizeFirst(string s) { } // RubyTypeOf updates a proto type to the required ruby equivalent. -inline string RubyTypeOf(const string& a_type, const string& package) { - string res(a_type); +inline std::string RubyTypeOf(const std::string &a_type, + const std::string &package) { + std::string res(a_type); ReplacePrefix(&res, package, ""); // remove the leading package if present ReplacePrefix(&res, ".", ""); // remove the leading . (no package) - if (res.find('.') == string::npos) { + if (res.find('.') == std::string::npos) { return res; } else { - vector<string> prefixes_and_type = Split(res, '.'); + std::vector<std::string> prefixes_and_type = Split(res, '.'); for (unsigned int i = 0; i < prefixes_and_type.size(); ++i) { if (i != 0) { res += "::"; // switch '.' to the ruby module delim diff --git a/src/compiler/ruby_plugin.cc b/src/compiler/ruby_plugin.cc index c1748cfaeb0cba48a86503449b52124a8a7bcf2d..9397452f55ea60f037933e70da77395c68f28d81 100644 --- a/src/compiler/ruby_plugin.cc +++ b/src/compiler/ruby_plugin.cc @@ -37,6 +37,7 @@ // and net/proto2/compiler/public/plugin.h for more information on plugins. #include <memory> +#include <string> #include "src/compiler/ruby_generator.h" #include "src/compiler/ruby_generator_helpers-inl.h" @@ -51,17 +52,17 @@ class RubyGrpcGenerator : public google::protobuf::compiler::CodeGenerator { RubyGrpcGenerator() {} ~RubyGrpcGenerator() override {} - bool Generate(const google::protobuf::FileDescriptor* file, - const string& parameter, - google::protobuf::compiler::GeneratorContext* context, - string* error) const override { - string code = grpc_ruby_generator::GetServices(file); + bool Generate(const google::protobuf::FileDescriptor *file, + const std::string ¶meter, + google::protobuf::compiler::GeneratorContext *context, + std::string *error) const override { + std::string code = grpc_ruby_generator::GetServices(file); if (code.size() == 0) { return true; // don't generate a file if there are no services } // Get output file name. - string file_name; + std::string file_name; if (!grpc_ruby_generator::ServicesFilename(file, &file_name)) { return false; } @@ -73,7 +74,7 @@ class RubyGrpcGenerator : public google::protobuf::compiler::CodeGenerator { } }; -int main(int argc, char* argv[]) { +int main(int argc, char *argv[]) { RubyGrpcGenerator generator; return google::protobuf::compiler::PluginMain(argc, argv, &generator); } diff --git a/src/core/channel/census_filter.c b/src/core/channel/census_filter.c index 2799bded8a6e4d0a054de64e9be89ef56cb391d0..ed60f0a5f6ea5c696be1f86030580cdf3c8ff963 100644 --- a/src/core/channel/census_filter.c +++ b/src/core/channel/census_filter.c @@ -178,19 +178,19 @@ static void destroy_channel_elem(grpc_channel_element* elem) { } const grpc_channel_filter grpc_client_census_filter = { - client_call_op, channel_op, + client_call_op, channel_op, - sizeof(call_data), client_init_call_elem, client_destroy_call_elem, + sizeof(call_data), client_init_call_elem, client_destroy_call_elem, - sizeof(channel_data), init_channel_elem, destroy_channel_elem, + sizeof(channel_data), init_channel_elem, destroy_channel_elem, "census-client"}; const grpc_channel_filter grpc_server_census_filter = { - server_call_op, channel_op, + server_call_op, channel_op, - sizeof(call_data), server_init_call_elem, server_destroy_call_elem, + sizeof(call_data), server_init_call_elem, server_destroy_call_elem, - sizeof(channel_data), init_channel_elem, destroy_channel_elem, + sizeof(channel_data), init_channel_elem, destroy_channel_elem, "census-server"}; diff --git a/src/core/channel/channel_stack.c b/src/core/channel/channel_stack.c index 14fc8007785c0e98da55bd846a9dedba256daf6a..5ee412bf7d0cc57d5c8bfaf5caffaf58e376a837 100644 --- a/src/core/channel/channel_stack.c +++ b/src/core/channel/channel_stack.c @@ -54,7 +54,7 @@ /* Given a size, round up to the next multiple of sizeof(void*) */ #define ROUND_UP_TO_ALIGNMENT_SIZE(x) \ - (((x) + GPR_MAX_ALIGNMENT - 1) & ~(GPR_MAX_ALIGNMENT - 1)) + (((x)+GPR_MAX_ALIGNMENT - 1) & ~(GPR_MAX_ALIGNMENT - 1)) size_t grpc_channel_stack_size(const grpc_channel_filter **filters, size_t filter_count) { @@ -190,13 +190,14 @@ void grpc_channel_next_op(grpc_channel_element *elem, grpc_channel_op *op) { grpc_channel_stack *grpc_channel_stack_from_top_element( grpc_channel_element *elem) { - return (grpc_channel_stack *)((char *)(elem)-ROUND_UP_TO_ALIGNMENT_SIZE( - sizeof(grpc_channel_stack))); + return (grpc_channel_stack *)((char *)(elem) - + ROUND_UP_TO_ALIGNMENT_SIZE( + sizeof(grpc_channel_stack))); } grpc_call_stack *grpc_call_stack_from_top_element(grpc_call_element *elem) { - return (grpc_call_stack *)((char *)(elem)-ROUND_UP_TO_ALIGNMENT_SIZE( - sizeof(grpc_call_stack))); + return (grpc_call_stack *)((char *)(elem) - ROUND_UP_TO_ALIGNMENT_SIZE( + sizeof(grpc_call_stack))); } static void do_nothing(void *user_data, grpc_op_error error) {} diff --git a/src/core/channel/child_channel.c b/src/core/channel/child_channel.c index 3778f4fb88f2402a1a326e6fd13b9dc7e86224ea..f400e9b6705ec136c0428b4fc8e28874e75dc432 100644 --- a/src/core/channel/child_channel.c +++ b/src/core/channel/child_channel.c @@ -165,9 +165,9 @@ static void lb_destroy_channel_elem(grpc_channel_element *elem) { } const grpc_channel_filter grpc_child_channel_top_filter = { - lb_call_op, lb_channel_op, + lb_call_op, lb_channel_op, - sizeof(lb_call_data), lb_init_call_elem, lb_destroy_call_elem, + sizeof(lb_call_data), lb_init_call_elem, lb_destroy_call_elem, sizeof(lb_channel_data), lb_init_channel_elem, lb_destroy_channel_elem, diff --git a/src/core/channel/child_channel.h b/src/core/channel/child_channel.h index 3ba4c1b8a9ef39a19cdd1d1586662be55c49d223..ece0ff99a925de34526241a7d10c115a01f80a36 100644 --- a/src/core/channel/child_channel.h +++ b/src/core/channel/child_channel.h @@ -39,7 +39,7 @@ /* helper for filters that need to host child channel stacks... handles lifetime and upwards propagation cleanly */ -const grpc_channel_filter grpc_child_channel_top_filter; +extern const grpc_channel_filter grpc_child_channel_top_filter; typedef grpc_channel_stack grpc_child_channel; typedef grpc_call_stack grpc_child_call; diff --git a/src/core/channel/client_channel.c b/src/core/channel/client_channel.c index 46283835a05ad03e3979649128bea0c210708e53..fa75561c78b6946d0e859a3604f91ef0283ba052 100644 --- a/src/core/channel/client_channel.c +++ b/src/core/channel/client_channel.c @@ -450,9 +450,9 @@ static void destroy_channel_elem(grpc_channel_element *elem) { } const grpc_channel_filter grpc_client_channel_filter = { - call_op, channel_op, + call_op, channel_op, - sizeof(call_data), init_call_elem, destroy_call_elem, + sizeof(call_data), init_call_elem, destroy_call_elem, sizeof(channel_data), init_channel_elem, destroy_channel_elem, diff --git a/src/core/channel/connected_channel.c b/src/core/channel/connected_channel.c index 30de10905ce0091212f04228e0299e5380a5413c..e01cb81a890e486fe25f3692af28aa102623d059 100644 --- a/src/core/channel/connected_channel.c +++ b/src/core/channel/connected_channel.c @@ -69,7 +69,7 @@ typedef struct { /* We perform a small hack to locate transport data alongside the connected channel data in call allocations, to allow everything to be pulled in minimal cache line requests */ -#define TRANSPORT_STREAM_FROM_CALL_DATA(calld) ((grpc_stream *)((calld) + 1)) +#define TRANSPORT_STREAM_FROM_CALL_DATA(calld) ((grpc_stream *)((calld)+1)) #define CALL_DATA_FROM_TRANSPORT_STREAM(transport_stream) \ (((call_data *)(transport_stream)) - 1) @@ -257,9 +257,9 @@ static void destroy_channel_elem(grpc_channel_element *elem) { } const grpc_channel_filter grpc_connected_channel_filter = { - call_op, channel_op, + call_op, channel_op, - sizeof(call_data), init_call_elem, destroy_call_elem, + sizeof(call_data), init_call_elem, destroy_call_elem, sizeof(channel_data), init_channel_elem, destroy_channel_elem, diff --git a/src/core/channel/http_client_filter.c b/src/core/channel/http_client_filter.c index ab9d3aff16b5432aa020578ee3dd0214d233ad53..b139b72795fd77c1df70ee676fdc586b5025ef3d 100644 --- a/src/core/channel/http_client_filter.c +++ b/src/core/channel/http_client_filter.c @@ -178,9 +178,9 @@ static void destroy_channel_elem(grpc_channel_element *elem) { } const grpc_channel_filter grpc_http_client_filter = { - call_op, channel_op, + call_op, channel_op, - sizeof(call_data), init_call_elem, destroy_call_elem, + sizeof(call_data), init_call_elem, destroy_call_elem, sizeof(channel_data), init_channel_elem, destroy_channel_elem, diff --git a/src/core/channel/http_filter.c b/src/core/channel/http_filter.c index 6cfe34695c4d933a17feb9bcd0fbd70d933c44da..846f7b9713a22b74e0924c1ee2ce6991480b4e32 100644 --- a/src/core/channel/http_filter.c +++ b/src/core/channel/http_filter.c @@ -132,9 +132,9 @@ static void destroy_channel_elem(grpc_channel_element *elem) { } const grpc_channel_filter grpc_http_filter = { - call_op, channel_op, + call_op, channel_op, - sizeof(call_data), init_call_elem, destroy_call_elem, + sizeof(call_data), init_call_elem, destroy_call_elem, sizeof(channel_data), init_channel_elem, destroy_channel_elem, diff --git a/src/core/channel/http_server_filter.c b/src/core/channel/http_server_filter.c index 44eab43f09d7968c1223416140ca038ef4dddd37..19b9606b433160edab164b06d4f97ebc1be8a2e8 100644 --- a/src/core/channel/http_server_filter.c +++ b/src/core/channel/http_server_filter.c @@ -244,9 +244,9 @@ static void destroy_channel_elem(grpc_channel_element *elem) { } const grpc_channel_filter grpc_http_server_filter = { - call_op, channel_op, + call_op, channel_op, - sizeof(call_data), init_call_elem, destroy_call_elem, + sizeof(call_data), init_call_elem, destroy_call_elem, sizeof(channel_data), init_channel_elem, destroy_channel_elem, diff --git a/src/core/channel/metadata_buffer.c b/src/core/channel/metadata_buffer.c index d4de4ba576c04332c8a35af3887d811eae7968ce..75fd90b707dbb9fe4ecaba00bfd5fbf36baa3fd7 100644 --- a/src/core/channel/metadata_buffer.c +++ b/src/core/channel/metadata_buffer.c @@ -61,7 +61,7 @@ struct grpc_metadata_buffer_impl { size_t elem_cap; }; -#define ELEMS(buffer) ((qelem *)((buffer) + 1)) +#define ELEMS(buffer) ((qelem *)((buffer)+1)) void grpc_metadata_buffer_init(grpc_metadata_buffer *buffer) { /* start buffer as NULL, indicating no elements */ diff --git a/src/core/channel/noop_filter.c b/src/core/channel/noop_filter.c index 6f854a2b8716c8b8f030e58ce32191b045baf798..b6b3f661f7b49d3fb2ebc6dfd978c8924ca5d52b 100644 --- a/src/core/channel/noop_filter.c +++ b/src/core/channel/noop_filter.c @@ -131,9 +131,9 @@ static void destroy_channel_elem(grpc_channel_element *elem) { } const grpc_channel_filter grpc_no_op_filter = { - call_op, channel_op, + call_op, channel_op, - sizeof(call_data), init_call_elem, destroy_call_elem, + sizeof(call_data), init_call_elem, destroy_call_elem, sizeof(channel_data), init_channel_elem, destroy_channel_elem, diff --git a/src/core/iomgr/alarm.c b/src/core/iomgr/alarm.c index 266487932389692804c940f7ffbd9ff29da55f5c..5b80368e3a2dbe70bf5ece449eaf6de0ee67fb5f 100644 --- a/src/core/iomgr/alarm.c +++ b/src/core/iomgr/alarm.c @@ -100,7 +100,7 @@ void grpc_alarm_list_init(gpr_timespec now) { } } -void grpc_alarm_list_shutdown() { +void grpc_alarm_list_shutdown(void) { int i; while (run_some_expired_alarms(NULL, gpr_inf_future, NULL, 0)) ; @@ -360,7 +360,7 @@ int grpc_alarm_check(gpr_mu *drop_mu, gpr_timespec now, gpr_timespec *next) { return run_some_expired_alarms(drop_mu, now, next, 1); } -gpr_timespec grpc_alarm_list_next_timeout() { +gpr_timespec grpc_alarm_list_next_timeout(void) { gpr_timespec out; gpr_mu_lock(&g_mu); out = g_shard_queue[0]->min_deadline; diff --git a/src/core/iomgr/alarm_internal.h b/src/core/iomgr/alarm_internal.h index 12b6ab4286deacf463df480dd5c5651405e75864..5c6b869302e452a1ac20b0ed5e9beb136a6a1739 100644 --- a/src/core/iomgr/alarm_internal.h +++ b/src/core/iomgr/alarm_internal.h @@ -42,12 +42,12 @@ int grpc_alarm_check(gpr_mu *drop_mu, gpr_timespec now, gpr_timespec *next); void grpc_alarm_list_init(gpr_timespec now); -void grpc_alarm_list_shutdown(); +void grpc_alarm_list_shutdown(void); -gpr_timespec grpc_alarm_list_next_timeout(); +gpr_timespec grpc_alarm_list_next_timeout(void); /* the following must be implemented by each iomgr implementation */ -void grpc_kick_poller(); +void grpc_kick_poller(void); #endif /* __GRPC_INTERNAL_IOMGR_ALARM_INTERNAL_H_ */ diff --git a/src/core/iomgr/iomgr.c b/src/core/iomgr/iomgr.c index 03f56a50a32003bead4c78a73c510c2cc4ec62b8..7f266ab235c70e76266eb120851b10346b047b42 100644 --- a/src/core/iomgr/iomgr.c +++ b/src/core/iomgr/iomgr.c @@ -80,9 +80,9 @@ static void background_callback_executor(void *ignored) { gpr_event_set(&g_background_callback_executor_done, (void *)1); } -void grpc_kick_poller() { gpr_cv_broadcast(&g_cv); } +void grpc_kick_poller(void) { gpr_cv_broadcast(&g_cv); } -void grpc_iomgr_init() { +void grpc_iomgr_init(void) { gpr_thd_id id; gpr_mu_init(&g_mu); gpr_cv_init(&g_cv); @@ -93,7 +93,7 @@ void grpc_iomgr_init() { gpr_thd_new(&id, background_callback_executor, NULL, NULL); } -void grpc_iomgr_shutdown() { +void grpc_iomgr_shutdown(void) { delayed_callback *cb; gpr_timespec shutdown_deadline = gpr_time_add(gpr_now(), gpr_time_from_seconds(10)); @@ -134,13 +134,13 @@ void grpc_iomgr_shutdown() { gpr_cv_destroy(&g_cv); } -void grpc_iomgr_ref() { +void grpc_iomgr_ref(void) { gpr_mu_lock(&g_mu); ++g_refs; gpr_mu_unlock(&g_mu); } -void grpc_iomgr_unref() { +void grpc_iomgr_unref(void) { gpr_mu_lock(&g_mu); if (0 == --g_refs) { gpr_cv_signal(&g_cv); diff --git a/src/core/iomgr/iomgr.h b/src/core/iomgr/iomgr.h index 16991a9b90e1128fd445fe2392e6895d2c844b28..06dc2e5dbfaaab4f2b34d5ccdb401f2b9b0450a5 100644 --- a/src/core/iomgr/iomgr.h +++ b/src/core/iomgr/iomgr.h @@ -37,8 +37,8 @@ /* gRPC Callback definition */ typedef void (*grpc_iomgr_cb_func)(void *arg, int success); -void grpc_iomgr_init(); -void grpc_iomgr_shutdown(); +void grpc_iomgr_init(void); +void grpc_iomgr_shutdown(void); /* This function is called from within a callback or from anywhere else and causes the invocation of a callback at some point in the future */ diff --git a/src/core/iomgr/iomgr_internal.h b/src/core/iomgr/iomgr_internal.h index 5f72542777d9539f47b13447bfccdbef42524130..e9962a0f66beb4739963fd4c3a583c770352d296 100644 --- a/src/core/iomgr/iomgr_internal.h +++ b/src/core/iomgr/iomgr_internal.h @@ -42,10 +42,10 @@ int grpc_maybe_call_delayed_callbacks(gpr_mu *drop_mu, int success); void grpc_iomgr_add_delayed_callback(grpc_iomgr_cb_func cb, void *cb_arg, int success); -void grpc_iomgr_ref(); -void grpc_iomgr_unref(); +void grpc_iomgr_ref(void); +void grpc_iomgr_unref(void); -void grpc_iomgr_platform_init(); -void grpc_iomgr_platform_shutdown(); +void grpc_iomgr_platform_init(void); +void grpc_iomgr_platform_shutdown(void); #endif /* __GRPC_INTERNAL_IOMGR_IOMGR_INTERNAL_H_ */ diff --git a/src/core/iomgr/iomgr_posix.c b/src/core/iomgr/iomgr_posix.c index ff9195ec1dc53304214521c7ade404058bf0d02c..61fec6bc5325e561e43fbb6365cfcd5bf1cd5d18 100644 --- a/src/core/iomgr/iomgr_posix.c +++ b/src/core/iomgr/iomgr_posix.c @@ -33,6 +33,6 @@ #include "src/core/iomgr/iomgr_posix.h" -void grpc_iomgr_platform_init() { grpc_pollset_global_init(); } +void grpc_iomgr_platform_init(void) { grpc_pollset_global_init(); } -void grpc_iomgr_platform_shutdown() { grpc_pollset_global_shutdown(); } +void grpc_iomgr_platform_shutdown(void) { grpc_pollset_global_shutdown(); } diff --git a/src/core/iomgr/iomgr_posix.h b/src/core/iomgr/iomgr_posix.h index ca5af3e52761c1c72f8fad61e6b02a589f59fbde..86973a050dc1883b03bad3ca26c8245c982fc2e4 100644 --- a/src/core/iomgr/iomgr_posix.h +++ b/src/core/iomgr/iomgr_posix.h @@ -36,7 +36,7 @@ #include "src/core/iomgr/iomgr_internal.h" -void grpc_pollset_global_init(); -void grpc_pollset_global_shutdown(); +void grpc_pollset_global_init(void); +void grpc_pollset_global_shutdown(void); #endif /* __GRPC_INTERNAL_IOMGR_IOMGR_POSIX_H_ */ diff --git a/src/core/iomgr/pollset_kick.h b/src/core/iomgr/pollset_kick.h new file mode 100644 index 0000000000000000000000000000000000000000..f088818b9a10d06043381dcb3b5bb0d5542df679 --- /dev/null +++ b/src/core/iomgr/pollset_kick.h @@ -0,0 +1,68 @@ +/* + * + * 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_INTERNAL_IOMGR_POLLSET_KICK_H_ +#define __GRPC_INTERNAL_IOMGR_POLLSET_KICK_H_ + +#include <grpc/support/port_platform.h> + +/* This is an abstraction around the typical pipe mechanism for waking up a + thread sitting in a poll() style call. */ + +#ifdef GPR_POSIX_SOCKET +#include "src/core/iomgr/pollset_kick_posix.h" +#else +#error "No pollset kick support on platform" +#endif + +void grpc_pollset_kick_global_init(void); +void grpc_pollset_kick_global_destroy(void); + +void grpc_pollset_kick_init(grpc_pollset_kick_state *kick_state); +void grpc_pollset_kick_destroy(grpc_pollset_kick_state *kick_state); + +/* Must be called before entering poll(). If return value is -1, this consumed + an existing kick. Otherwise the return value is an FD to add to the poll set. + */ +int grpc_pollset_kick_pre_poll(grpc_pollset_kick_state *kick_state); + +/* Consume an existing kick. Must be called after poll returns that the fd was + readable, and before calling kick_post_poll. */ +void grpc_pollset_kick_consume(grpc_pollset_kick_state *kick_state); + +/* Must be called after pre_poll, and after consume if applicable */ +void grpc_pollset_kick_post_poll(grpc_pollset_kick_state *kick_state); + +void grpc_pollset_kick_kick(grpc_pollset_kick_state *kick_state); + +#endif /* __GRPC_INTERNAL_IOMGR_POLLSET_KICK_H_ */ diff --git a/src/core/iomgr/pollset_kick_posix.c b/src/core/iomgr/pollset_kick_posix.c new file mode 100644 index 0000000000000000000000000000000000000000..9f85b6137afc77d72e6f609ef1de488b072d52d4 --- /dev/null +++ b/src/core/iomgr/pollset_kick_posix.c @@ -0,0 +1,177 @@ +/* + * + * 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/iomgr/pollset_kick_posix.h" + +#include <errno.h> +#include <string.h> +#include <unistd.h> + +#include "src/core/iomgr/socket_utils_posix.h" +#include <grpc/support/alloc.h> +#include <grpc/support/log.h> + +/* This implementation is based on a freelist of pipes. */ + +#define GRPC_MAX_CACHED_PIPES 50 +#define GRPC_PIPE_LOW_WATERMARK 25 + +typedef struct grpc_kick_pipe_info { + int pipe_read_fd; + int pipe_write_fd; + struct grpc_kick_pipe_info *next; +} grpc_kick_pipe_info; + +static grpc_kick_pipe_info *pipe_freelist = NULL; +static int pipe_freelist_count = 0; +static gpr_mu pipe_freelist_mu; + +static grpc_kick_pipe_info *allocate_pipe(void) { + grpc_kick_pipe_info *info; + gpr_mu_lock(&pipe_freelist_mu); + if (pipe_freelist != NULL) { + info = pipe_freelist; + pipe_freelist = pipe_freelist->next; + --pipe_freelist_count; + } else { + int pipefd[2]; + /* TODO(klempner): Make this nonfatal */ + GPR_ASSERT(0 == pipe(pipefd)); + GPR_ASSERT(grpc_set_socket_nonblocking(pipefd[0], 1)); + GPR_ASSERT(grpc_set_socket_nonblocking(pipefd[1], 1)); + info = gpr_malloc(sizeof(*info)); + info->pipe_read_fd = pipefd[0]; + info->pipe_write_fd = pipefd[1]; + info->next = NULL; + } + gpr_mu_unlock(&pipe_freelist_mu); + return info; +} + +static void destroy_pipe(void) { + /* assumes pipe_freelist_mu is held */ + grpc_kick_pipe_info *current = pipe_freelist; + pipe_freelist = pipe_freelist->next; + pipe_freelist_count--; + close(current->pipe_read_fd); + close(current->pipe_write_fd); + gpr_free(current); +} + +static void free_pipe(grpc_kick_pipe_info *pipe_info) { + gpr_mu_lock(&pipe_freelist_mu); + pipe_info->next = pipe_freelist; + pipe_freelist = pipe_info; + pipe_freelist_count++; + if (pipe_freelist_count > GRPC_MAX_CACHED_PIPES) { + while (pipe_freelist_count > GRPC_PIPE_LOW_WATERMARK) { + destroy_pipe(); + } + } + gpr_mu_unlock(&pipe_freelist_mu); +} + +void grpc_pollset_kick_global_init() { + pipe_freelist = NULL; + gpr_mu_init(&pipe_freelist_mu); +} + +void grpc_pollset_kick_global_destroy() { + while (pipe_freelist != NULL) { + destroy_pipe(); + } + gpr_mu_destroy(&pipe_freelist_mu); +} + +void grpc_pollset_kick_init(grpc_pollset_kick_state *kick_state) { + gpr_mu_init(&kick_state->mu); + kick_state->kicked = 0; + kick_state->pipe_info = NULL; +} + +void grpc_pollset_kick_destroy(grpc_pollset_kick_state *kick_state) { + gpr_mu_destroy(&kick_state->mu); + GPR_ASSERT(kick_state->pipe_info == NULL); +} + +int grpc_pollset_kick_pre_poll(grpc_pollset_kick_state *kick_state) { + gpr_mu_lock(&kick_state->mu); + if (kick_state->kicked) { + kick_state->kicked = 0; + gpr_mu_unlock(&kick_state->mu); + return -1; + } + kick_state->pipe_info = allocate_pipe(); + gpr_mu_unlock(&kick_state->mu); + return kick_state->pipe_info->pipe_read_fd; +} + +void grpc_pollset_kick_consume(grpc_pollset_kick_state *kick_state) { + char buf[128]; + int r; + + for (;;) { + r = read(kick_state->pipe_info->pipe_read_fd, buf, sizeof(buf)); + if (r > 0) continue; + if (r == 0) return; + switch (errno) { + case EAGAIN: + return; + case EINTR: + continue; + default: + gpr_log(GPR_ERROR, "error reading pipe: %s", strerror(errno)); + return; + } + } +} + +void grpc_pollset_kick_post_poll(grpc_pollset_kick_state *kick_state) { + gpr_mu_lock(&kick_state->mu); + free_pipe(kick_state->pipe_info); + kick_state->pipe_info = NULL; + gpr_mu_unlock(&kick_state->mu); +} + +void grpc_pollset_kick_kick(grpc_pollset_kick_state *kick_state) { + gpr_mu_lock(&kick_state->mu); + if (kick_state->pipe_info != NULL) { + char c = 0; + while (write(kick_state->pipe_info->pipe_write_fd, &c, 1) != 1 && + errno == EINTR) + ; + } else { + kick_state->kicked = 1; + } + gpr_mu_unlock(&kick_state->mu); +} diff --git a/src/core/iomgr/pollset_kick_posix.h b/src/core/iomgr/pollset_kick_posix.h new file mode 100644 index 0000000000000000000000000000000000000000..bae3b5923a2574c77a7118aa2a3b0153ed636e56 --- /dev/null +++ b/src/core/iomgr/pollset_kick_posix.h @@ -0,0 +1,47 @@ +/* + * + * 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_INTERNAL_IOMGR_POLLSET_KICK_POSIX_H_ +#define __GRPC_INTERNAL_IOMGR_POLLSET_KICK_POSIX_H_ + +#include <grpc/support/sync.h> + +struct grpc_kick_pipe_info; + +typedef struct grpc_pollset_kick_state { + gpr_mu mu; + int kicked; + struct grpc_kick_pipe_info *pipe_info; +} grpc_pollset_kick_state; + +#endif /* __GRPC_INTERNAL_IOMGR_POLLSET_KICK_POSIX_H_ */ diff --git a/src/core/iomgr/pollset_multipoller_with_poll_posix.c b/src/core/iomgr/pollset_multipoller_with_poll_posix.c index e482da94f7c3adaff43a1cf0d5533307ac0d61c0..7c9a9491cb03bf5b7a919c0267f948d399f5a47d 100644 --- a/src/core/iomgr/pollset_multipoller_with_poll_posix.c +++ b/src/core/iomgr/pollset_multipoller_with_poll_posix.c @@ -131,7 +131,11 @@ static int multipoll_with_poll_pollset_maybe_work( } nf = 0; np = 1; - h->pfds[0].fd = grpc_kick_read_fd(pollset); + h->pfds[0].fd = grpc_pollset_kick_pre_poll(&pollset->kick_state); + if (h->pfds[0].fd < 0) { + /* Already kicked */ + return 1; + } h->pfds[0].events = POLLIN; h->pfds[0].revents = POLLOUT; for (i = 0; i < h->fd_count; i++) { @@ -173,7 +177,7 @@ static int multipoll_with_poll_pollset_maybe_work( /* do nothing */ } else { if (h->pfds[0].revents & POLLIN) { - grpc_kick_drain(pollset); + grpc_pollset_kick_consume(&pollset->kick_state); } for (i = 1; i < np; i++) { if (h->pfds[i].revents & POLLIN) { @@ -184,6 +188,7 @@ static int multipoll_with_poll_pollset_maybe_work( } } } + grpc_pollset_kick_post_poll(&pollset->kick_state); end_polling(pollset); gpr_mu_lock(&pollset->mu); diff --git a/src/core/iomgr/pollset_posix.c b/src/core/iomgr/pollset_posix.c index ff00e064291d41f37b3bedc7b7f80915b537988f..2555322532c3ba11a08d47ecdb1f8ad1f5c4e405 100644 --- a/src/core/iomgr/pollset_posix.c +++ b/src/core/iomgr/pollset_posix.c @@ -48,18 +48,6 @@ #include <grpc/support/thd.h> #include <grpc/support/useful.h> -/* kick pipes: we keep a sharded set of pipes to allow breaking from poll. - Ideally this would be 1:1 with pollsets, but we'd like to avoid associating - full kernel objects with each pollset to keep them lightweight, so instead - keep a sharded set and allow associating a pollset with one of the shards. - - TODO(ctiller): move this out from this file, and allow an eventfd - implementation on linux */ - -#define LOG2_KICK_SHARDS 6 -#define KICK_SHARDS (1 << LOG2_KICK_SHARDS) - -static int g_kick_pipes[KICK_SHARDS][2]; static grpc_pollset g_backup_pollset; static int g_shutdown_backup_poller; static gpr_event g_backup_poller_done; @@ -82,65 +70,22 @@ static void backup_poller(void *p) { gpr_event_set(&g_backup_poller_done, (void *)1); } -static size_t kick_shard(const grpc_pollset *info) { - size_t x = (size_t)info; - return ((x >> 4) ^ (x >> 9) ^ (x >> 14)) & (KICK_SHARDS - 1); -} - -int grpc_kick_read_fd(grpc_pollset *p) { - return g_kick_pipes[kick_shard(p)][0]; -} - -static int grpc_kick_write_fd(grpc_pollset *p) { - return g_kick_pipes[kick_shard(p)][1]; -} - -void grpc_pollset_force_kick(grpc_pollset *p) { - char c = 0; - while (write(grpc_kick_write_fd(p), &c, 1) != 1 && errno == EINTR) - ; -} - void grpc_pollset_kick(grpc_pollset *p) { if (!p->counter) return; - grpc_pollset_force_kick(p); + grpc_pollset_kick_kick(&p->kick_state); } -void grpc_kick_drain(grpc_pollset *p) { - int fd = grpc_kick_read_fd(p); - char buf[128]; - int r; - - for (;;) { - r = read(fd, buf, sizeof(buf)); - if (r > 0) continue; - if (r == 0) return; - switch (errno) { - case EAGAIN: - return; - case EINTR: - continue; - default: - gpr_log(GPR_ERROR, "error reading pipe: %s", strerror(errno)); - return; - } - } -} +void grpc_pollset_force_kick(grpc_pollset *p) { grpc_pollset_kick(p); } /* global state management */ -grpc_pollset *grpc_backup_pollset() { return &g_backup_pollset; } +grpc_pollset *grpc_backup_pollset(void) { return &g_backup_pollset; } -void grpc_pollset_global_init() { - int i; +void grpc_pollset_global_init(void) { gpr_thd_id id; - /* initialize the kick shards */ - for (i = 0; i < KICK_SHARDS; i++) { - GPR_ASSERT(0 == pipe(g_kick_pipes[i])); - GPR_ASSERT(grpc_set_socket_nonblocking(g_kick_pipes[i][0], 1)); - GPR_ASSERT(grpc_set_socket_nonblocking(g_kick_pipes[i][1], 1)); - } + /* Initialize kick fd state */ + grpc_pollset_kick_global_init(); /* initialize the backup pollset */ grpc_pollset_init(&g_backup_pollset); @@ -151,9 +96,7 @@ void grpc_pollset_global_init() { gpr_thd_new(&id, backup_poller, NULL, NULL); } -void grpc_pollset_global_shutdown() { - int i; - +void grpc_pollset_global_shutdown(void) { /* terminate the backup poller thread */ gpr_mu_lock(&g_backup_pollset.mu); g_shutdown_backup_poller = 1; @@ -163,11 +106,8 @@ void grpc_pollset_global_shutdown() { /* destroy the backup pollset */ grpc_pollset_destroy(&g_backup_pollset); - /* destroy the kick shards */ - for (i = 0; i < KICK_SHARDS; i++) { - close(g_kick_pipes[i][0]); - close(g_kick_pipes[i][1]); - } + /* destroy the kick pipes */ + grpc_pollset_kick_global_destroy(); } /* main interface */ @@ -178,6 +118,7 @@ static void become_unary_pollset(grpc_pollset *pollset, grpc_fd *fd); void grpc_pollset_init(grpc_pollset *pollset) { gpr_mu_init(&pollset->mu); gpr_cv_init(&pollset->cv); + grpc_pollset_kick_init(&pollset->kick_state); become_empty_pollset(pollset); } @@ -213,6 +154,7 @@ int grpc_pollset_work(grpc_pollset *pollset, gpr_timespec deadline) { void grpc_pollset_destroy(grpc_pollset *pollset) { pollset->vtable->destroy(pollset); + grpc_pollset_kick_destroy(&pollset->kick_state); gpr_mu_destroy(&pollset->mu); gpr_cv_destroy(&pollset->cv); } @@ -290,7 +232,11 @@ static int unary_poll_pollset_maybe_work(grpc_pollset *pollset, return 1; } } - pfd[0].fd = grpc_kick_read_fd(pollset); + pfd[0].fd = grpc_pollset_kick_pre_poll(&pollset->kick_state); + if (pfd[0].fd < 0) { + /* Already kicked */ + return 1; + } pfd[0].events = POLLIN; pfd[0].revents = 0; pfd[1].fd = fd->fd; @@ -308,7 +254,7 @@ static int unary_poll_pollset_maybe_work(grpc_pollset *pollset, /* do nothing */ } else { if (pfd[0].revents & POLLIN) { - grpc_kick_drain(pollset); + grpc_pollset_kick_consume(&pollset->kick_state); } if (pfd[1].revents & POLLIN) { grpc_fd_become_readable(fd, allow_synchronous_callback); @@ -318,6 +264,8 @@ static int unary_poll_pollset_maybe_work(grpc_pollset *pollset, } } + grpc_pollset_kick_post_poll(&pollset->kick_state); + gpr_mu_lock(&pollset->mu); grpc_fd_end_poll(fd, pollset); pollset->counter = 0; diff --git a/src/core/iomgr/pollset_posix.h b/src/core/iomgr/pollset_posix.h index f051079f5b550c468a4eea2c4cb7798d945f2a73..f62433707e73fd0ac24bf7fdd9b92ad0fd0d6eda 100644 --- a/src/core/iomgr/pollset_posix.h +++ b/src/core/iomgr/pollset_posix.h @@ -36,6 +36,8 @@ #include <grpc/support/sync.h> +#include "src/core/iomgr/pollset_kick.h" + typedef struct grpc_pollset_vtable grpc_pollset_vtable; /* forward declare only in this file to avoid leaking impl details via @@ -51,6 +53,7 @@ typedef struct grpc_pollset { const grpc_pollset_vtable *vtable; gpr_mu mu; gpr_cv cv; + grpc_pollset_kick_state kick_state; int counter; union { int fd; @@ -86,7 +89,7 @@ void grpc_kick_drain(grpc_pollset *p); regardless of applications listening to events. Relying on this is slow however (the backup pollset only listens every 100ms or so) - so it's not to be relied on. */ -grpc_pollset *grpc_backup_pollset(); +grpc_pollset *grpc_backup_pollset(void); /* turn a pollset into a multipoller: platform specific */ void grpc_platform_become_multipoller(grpc_pollset *pollset, diff --git a/src/core/iomgr/socket_utils_common_posix.c b/src/core/iomgr/socket_utils_common_posix.c index 7f2b43f2cad110608db3413bb6a4d42ee0ccf78f..bd29e2b5fd2f2fbe1012cfb3c05d80b098b6c9a0 100644 --- a/src/core/iomgr/socket_utils_common_posix.c +++ b/src/core/iomgr/socket_utils_common_posix.c @@ -99,7 +99,7 @@ int grpc_set_socket_reuse_addr(int fd, int reuse) { socklen_t intlen = sizeof(newval); return 0 == setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val)) && 0 == getsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &newval, &intlen) && - newval == val; + (newval != 0) == val; } /* disable nagle */ @@ -109,13 +109,13 @@ int grpc_set_socket_low_latency(int fd, int low_latency) { socklen_t intlen = sizeof(newval); return 0 == setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &val, sizeof(val)) && 0 == getsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &newval, &intlen) && - newval == val; + (newval != 0) == val; } static gpr_once g_probe_ipv6_once = GPR_ONCE_INIT; static int g_ipv6_loopback_available; -static void probe_ipv6_once() { +static void probe_ipv6_once(void) { int fd = socket(AF_INET6, SOCK_STREAM, 0); g_ipv6_loopback_available = 0; if (fd < 0) { @@ -135,7 +135,7 @@ static void probe_ipv6_once() { } } -int grpc_ipv6_loopback_available() { +int grpc_ipv6_loopback_available(void) { gpr_once_init(&g_probe_ipv6_once, probe_ipv6_once); return g_ipv6_loopback_available; } diff --git a/src/core/iomgr/socket_utils_posix.c b/src/core/iomgr/socket_utils_posix.c index e8c80710377fc33178c670aed26171d2bb25ea29..06c5033d45733e2a1d5ca2e2d5b0fcf2f341283d 100644 --- a/src/core/iomgr/socket_utils_posix.c +++ b/src/core/iomgr/socket_utils_posix.c @@ -50,12 +50,22 @@ int grpc_accept4(int sockfd, struct sockaddr *addr, socklen_t *addrlen, fd = accept(sockfd, addr, addrlen); if (fd >= 0) { - flags = fcntl(fd, F_GETFL, 0); - flags |= nonblock ? O_NONBLOCK : 0; - flags |= cloexec ? FD_CLOEXEC : 0; - GPR_ASSERT(fcntl(fd, F_SETFL, flags) == 0); + if (nonblock) { + flags = fcntl(fd, F_GETFL, 0); + if (flags < 0) goto close_and_error; + if (fcntl(fd, F_SETFL, flags | O_NONBLOCK) != 0) goto close_and_error; + } + if (cloexec) { + flags = fcntl(fd, F_GETFD, 0); + if (flags < 0) goto close_and_error; + if (fcntl(fd, F_SETFD, flags | FD_CLOEXEC) != 0) goto close_and_error; + } } return fd; + +close_and_error: + close(fd); + return -1; } #endif /* GPR_POSIX_SOCKETUTILS */ diff --git a/src/core/iomgr/socket_utils_posix.h b/src/core/iomgr/socket_utils_posix.h index 9c5d93c2b4bce303a9c6a95c35732231f759b5ec..a84457f01de9751ba40bf4c494532483342d1faf 100644 --- a/src/core/iomgr/socket_utils_posix.h +++ b/src/core/iomgr/socket_utils_posix.h @@ -61,7 +61,7 @@ int grpc_set_socket_low_latency(int fd, int low_latency); and bind IPv6 sockets, but cannot connect to a getsockname() of [::]:port without a valid loopback interface. Rather than expose this half-broken state to library users, we turn off IPv6 sockets. */ -int grpc_ipv6_loopback_available(); +int grpc_ipv6_loopback_available(void); /* An enum to keep track of IPv4/IPv6 socket modes. diff --git a/src/core/iomgr/tcp_server.h b/src/core/iomgr/tcp_server.h index d881e146b9646f3344ecbce3f86113276dd689c0..8ffd7d3569e1a2a064f5659f6e2b541b07a641a7 100644 --- a/src/core/iomgr/tcp_server.h +++ b/src/core/iomgr/tcp_server.h @@ -46,7 +46,7 @@ typedef struct grpc_tcp_server grpc_tcp_server; typedef void (*grpc_tcp_server_cb)(void *arg, grpc_endpoint *ep); /* Create a server, initially not bound to any ports */ -grpc_tcp_server *grpc_tcp_server_create(); +grpc_tcp_server *grpc_tcp_server_create(void); /* Start listening to bound ports */ void grpc_tcp_server_start(grpc_tcp_server *server, grpc_pollset *pollset, diff --git a/src/core/iomgr/tcp_server_posix.c b/src/core/iomgr/tcp_server_posix.c index 753e24c38e5a06ef623eb273aba04d14c509b094..e6c02186eea6da80f486ccaa9df1816059e41dab 100644 --- a/src/core/iomgr/tcp_server_posix.c +++ b/src/core/iomgr/tcp_server_posix.c @@ -84,7 +84,7 @@ struct grpc_tcp_server { size_t port_capacity; }; -grpc_tcp_server *grpc_tcp_server_create() { +grpc_tcp_server *grpc_tcp_server_create(void) { grpc_tcp_server *s = gpr_malloc(sizeof(grpc_tcp_server)); gpr_mu_init(&s->mu); gpr_cv_init(&s->cv); @@ -120,7 +120,7 @@ void grpc_tcp_server_destroy(grpc_tcp_server *s) { } /* get max listen queue size on linux */ -static void init_max_accept_queue_size() { +static void init_max_accept_queue_size(void) { int n = SOMAXCONN; char buf[64]; FILE *fp = fopen("/proc/sys/net/core/somaxconn", "r"); @@ -147,7 +147,7 @@ static void init_max_accept_queue_size() { } } -static int get_max_accept_queue_size() { +static int get_max_accept_queue_size(void) { gpr_once_init(&s_init_max_accept_queue_size, init_max_accept_queue_size); return s_max_accept_queue_size; } @@ -252,7 +252,7 @@ static int add_socket_to_server(grpc_tcp_server *s, int fd, if (s->nports == s->port_capacity) { s->port_capacity *= 2; s->ports = - gpr_realloc(s->ports, sizeof(server_port *) * s->port_capacity); + gpr_realloc(s->ports, sizeof(server_port) * s->port_capacity); } sp = &s->ports[s->nports++]; sp->server = s; diff --git a/src/core/security/auth.c b/src/core/security/auth.c index e36bf2382f73fb05c174bffc4f09574eb486d16a..f743b2583827e24c40c79397ea41a63b1c88594f 100644 --- a/src/core/security/auth.c +++ b/src/core/security/auth.c @@ -157,5 +157,6 @@ static void destroy_channel_elem(grpc_channel_element *elem) { } const grpc_channel_filter grpc_client_auth_filter = { - call_op, channel_op, sizeof(call_data), init_call_elem, destroy_call_elem, - sizeof(channel_data), init_channel_elem, destroy_channel_elem, "auth"}; + call_op, channel_op, sizeof(call_data), + init_call_elem, destroy_call_elem, sizeof(channel_data), + init_channel_elem, destroy_channel_elem, "auth"}; diff --git a/src/core/security/credentials.c b/src/core/security/credentials.c index d3bba0fb1f617fcdefd79dda0e03192d8e0eb3e9..628963e46cde1cdd527b45570cbaf971b2c50660 100644 --- a/src/core/security/credentials.c +++ b/src/core/security/credentials.c @@ -139,7 +139,7 @@ typedef struct { typedef struct { grpc_server_credentials base; - grpc_ssl_config config; + grpc_ssl_server_config config; } grpc_ssl_server_credentials; static void ssl_destroy(grpc_credentials *creds) { @@ -152,9 +152,24 @@ static void ssl_destroy(grpc_credentials *creds) { static void ssl_server_destroy(grpc_server_credentials *creds) { grpc_ssl_server_credentials *c = (grpc_ssl_server_credentials *)creds; + size_t i; + for (i = 0; i < c->config.num_key_cert_pairs; i++) { + if (c->config.pem_private_keys[i] != NULL) { + gpr_free(c->config.pem_private_keys[i]); + } + if (c->config.pem_cert_chains[i]!= NULL) { + gpr_free(c->config.pem_cert_chains[i]); + } + } + if (c->config.pem_private_keys != NULL) gpr_free(c->config.pem_private_keys); + if (c->config.pem_private_keys_sizes != NULL) { + gpr_free(c->config.pem_private_keys_sizes); + } + if (c->config.pem_cert_chains != NULL) gpr_free(c->config.pem_cert_chains); + if (c->config.pem_cert_chains_sizes != NULL) { + gpr_free(c->config.pem_cert_chains_sizes); + } if (c->config.pem_root_certs != NULL) gpr_free(c->config.pem_root_certs); - if (c->config.pem_private_key != NULL) gpr_free(c->config.pem_private_key); - if (c->config.pem_cert_chain != NULL) gpr_free(c->config.pem_cert_chain); gpr_free(creds); } @@ -179,7 +194,7 @@ const grpc_ssl_config *grpc_ssl_credentials_get_config( } } -const grpc_ssl_config *grpc_ssl_server_credentials_get_config( +const grpc_ssl_server_config *grpc_ssl_server_credentials_get_config( const grpc_server_credentials *creds) { if (creds == NULL || strcmp(creds->type, GRPC_CREDENTIALS_TYPE_SSL)) { return NULL; @@ -189,57 +204,89 @@ const grpc_ssl_config *grpc_ssl_server_credentials_get_config( } } -static void ssl_build_config(const unsigned char *pem_root_certs, - size_t pem_root_certs_size, - const unsigned char *pem_private_key, - size_t pem_private_key_size, - const unsigned char *pem_cert_chain, - size_t pem_cert_chain_size, +static void ssl_copy_key_material(const char *input, unsigned char **output, + size_t *output_size) { + *output_size = strlen(input); + *output = gpr_malloc(*output_size); + memcpy(*output, input, *output_size); +} + +static void ssl_build_config(const char *pem_root_certs, + grpc_ssl_pem_key_cert_pair *pem_key_cert_pair, grpc_ssl_config *config) { + if (pem_root_certs == NULL) { + /* TODO(jboeuf): Get them from the environment. */ + gpr_log(GPR_ERROR, "Default SSL roots not yet implemented."); + } else { + ssl_copy_key_material(pem_root_certs, &config->pem_root_certs, + &config->pem_root_certs_size); + } + + if (pem_key_cert_pair != NULL) { + GPR_ASSERT(pem_key_cert_pair->private_key != NULL); + GPR_ASSERT(pem_key_cert_pair->cert_chain != NULL); + ssl_copy_key_material(pem_key_cert_pair->private_key, + &config->pem_private_key, + &config->pem_private_key_size); + ssl_copy_key_material(pem_key_cert_pair->cert_chain, + &config->pem_cert_chain, + &config->pem_cert_chain_size); + } +} + +static void ssl_build_server_config( + const char *pem_root_certs, grpc_ssl_pem_key_cert_pair *pem_key_cert_pairs, + size_t num_key_cert_pairs, grpc_ssl_server_config *config) { + size_t i; if (pem_root_certs != NULL) { - config->pem_root_certs = gpr_malloc(pem_root_certs_size); - memcpy(config->pem_root_certs, pem_root_certs, pem_root_certs_size); - config->pem_root_certs_size = pem_root_certs_size; + ssl_copy_key_material(pem_root_certs, &config->pem_root_certs, + &config->pem_root_certs_size); } - if (pem_private_key != NULL) { - config->pem_private_key = gpr_malloc(pem_private_key_size); - memcpy(config->pem_private_key, pem_private_key, pem_private_key_size); - config->pem_private_key_size = pem_private_key_size; + if (num_key_cert_pairs > 0) { + GPR_ASSERT(pem_key_cert_pairs != NULL); + config->pem_private_keys = + gpr_malloc(num_key_cert_pairs * sizeof(unsigned char *)); + config->pem_cert_chains = + gpr_malloc(num_key_cert_pairs * sizeof(unsigned char *)); + config->pem_private_keys_sizes = + gpr_malloc(num_key_cert_pairs * sizeof(size_t)); + config->pem_cert_chains_sizes = + gpr_malloc(num_key_cert_pairs * sizeof(size_t)); } - if (pem_cert_chain != NULL) { - config->pem_cert_chain = gpr_malloc(pem_cert_chain_size); - memcpy(config->pem_cert_chain, pem_cert_chain, pem_cert_chain_size); - config->pem_cert_chain_size = pem_cert_chain_size; + config->num_key_cert_pairs = num_key_cert_pairs; + for (i = 0; i < num_key_cert_pairs; i++) { + GPR_ASSERT(pem_key_cert_pairs[i].private_key != NULL); + GPR_ASSERT(pem_key_cert_pairs[i].cert_chain != NULL); + ssl_copy_key_material(pem_key_cert_pairs[i].private_key, + &config->pem_private_keys[i], + &config->pem_private_keys_sizes[i]); + ssl_copy_key_material(pem_key_cert_pairs[i].cert_chain, + &config->pem_cert_chains[i], + &config->pem_cert_chains_sizes[i]); } } grpc_credentials *grpc_ssl_credentials_create( - const unsigned char *pem_root_certs, size_t pem_root_certs_size, - const unsigned char *pem_private_key, size_t pem_private_key_size, - const unsigned char *pem_cert_chain, size_t pem_cert_chain_size) { + const char *pem_root_certs, grpc_ssl_pem_key_cert_pair *pem_key_cert_pair) { grpc_ssl_credentials *c = gpr_malloc(sizeof(grpc_ssl_credentials)); memset(c, 0, sizeof(grpc_ssl_credentials)); c->base.type = GRPC_CREDENTIALS_TYPE_SSL; c->base.vtable = &ssl_vtable; gpr_ref_init(&c->base.refcount, 1); - ssl_build_config(pem_root_certs, pem_root_certs_size, pem_private_key, - pem_private_key_size, pem_cert_chain, pem_cert_chain_size, - &c->config); + ssl_build_config(pem_root_certs, pem_key_cert_pair, &c->config); return &c->base; } grpc_server_credentials *grpc_ssl_server_credentials_create( - const unsigned char *pem_root_certs, size_t pem_root_certs_size, - const unsigned char *pem_private_key, size_t pem_private_key_size, - const unsigned char *pem_cert_chain, size_t pem_cert_chain_size) { + const char *pem_root_certs, grpc_ssl_pem_key_cert_pair *pem_key_cert_pairs, + size_t num_key_cert_pairs) { grpc_ssl_server_credentials *c = gpr_malloc(sizeof(grpc_ssl_server_credentials)); memset(c, 0, sizeof(grpc_ssl_server_credentials)); c->base.type = GRPC_CREDENTIALS_TYPE_SSL; c->base.vtable = &ssl_server_vtable; - ssl_build_config(pem_root_certs, pem_root_certs_size, pem_private_key, - pem_private_key_size, pem_cert_chain, pem_cert_chain_size, - &c->config); + ssl_build_server_config(pem_root_certs, pem_key_cert_pairs, + num_key_cert_pairs, &c->config); return &c->base; } @@ -637,8 +684,8 @@ grpc_credentials *grpc_fake_transport_security_credentials_create(void) { return c; } -grpc_server_credentials * -grpc_fake_transport_security_server_credentials_create() { +grpc_server_credentials *grpc_fake_transport_security_server_credentials_create( + void) { grpc_server_credentials *c = gpr_malloc(sizeof(grpc_server_credentials)); memset(c, 0, sizeof(grpc_server_credentials)); c->type = GRPC_CREDENTIALS_TYPE_FAKE_TRANSPORT_SECURITY; diff --git a/src/core/security/credentials.h b/src/core/security/credentials.h index 4a2532d7c4158658607fbd4a54167b7298bdbdcd..8a9ff41e108e58fe2eca2546edddbb31164274b1 100644 --- a/src/core/security/credentials.h +++ b/src/core/security/credentials.h @@ -137,10 +137,17 @@ struct grpc_server_credentials { const char *type; }; -/* TODO(jboeuf): Have an ssl_server_config that can contain multiple key/cert - pairs. */ +typedef struct { + unsigned char **pem_private_keys; + size_t *pem_private_keys_sizes; + unsigned char **pem_cert_chains; + size_t *pem_cert_chains_sizes; + size_t num_key_cert_pairs; + unsigned char *pem_root_certs; + size_t pem_root_certs_size; +} grpc_ssl_server_config; -const grpc_ssl_config *grpc_ssl_server_credentials_get_config( +const grpc_ssl_server_config *grpc_ssl_server_credentials_get_config( const grpc_server_credentials *ssl_creds); #endif /* __GRPC_INTERNAL_SECURITY_CREDENTIALS_H__ */ diff --git a/src/core/security/secure_endpoint.c b/src/core/security/secure_endpoint.c index 7f0fdf73c97e19e5931b3e058cc64acefb29f65f..e73767c1aad3ca238af3d98e3ea5763ee352a1c6 100644 --- a/src/core/security/secure_endpoint.c +++ b/src/core/security/secure_endpoint.c @@ -126,8 +126,8 @@ static void on_read(void *user_data, gpr_slice *slices, size_t nslices, size_t message_size = GPR_SLICE_LENGTH(encrypted); while (message_size > 0 || keep_looping) { - gpr_uint32 unprotected_buffer_size_written = end - cur; - gpr_uint32 processed_message_size = message_size; + size_t unprotected_buffer_size_written = end - cur; + size_t processed_message_size = message_size; gpr_mu_lock(&ep->protector_mu); result = tsi_frame_protector_unprotect(ep->protector, message_bytes, &processed_message_size, cur, @@ -245,8 +245,8 @@ static grpc_endpoint_write_status endpoint_write(grpc_endpoint *secure_ep, gpr_uint8 *message_bytes = GPR_SLICE_START_PTR(plain); size_t message_size = GPR_SLICE_LENGTH(plain); while (message_size > 0) { - gpr_uint32 protected_buffer_size_to_send = end - cur; - gpr_uint32 processed_message_size = message_size; + size_t protected_buffer_size_to_send = end - cur; + size_t processed_message_size = message_size; gpr_mu_lock(&ep->protector_mu); result = tsi_frame_protector_protect(ep->protector, message_bytes, &processed_message_size, cur, @@ -268,9 +268,9 @@ static grpc_endpoint_write_status endpoint_write(grpc_endpoint *secure_ep, if (result != TSI_OK) break; } if (result == TSI_OK) { - gpr_uint32 still_pending_size; + size_t still_pending_size; do { - gpr_uint32 protected_buffer_size_to_send = end - cur; + size_t protected_buffer_size_to_send = end - cur; gpr_mu_lock(&ep->protector_mu); result = tsi_frame_protector_protect_flush(ep->protector, cur, &protected_buffer_size_to_send, diff --git a/src/core/security/secure_transport_setup.c b/src/core/security/secure_transport_setup.c index 3df91ed8e7fffb3422f8b276e339e99269a6db80..50a6987fbf7ddccaa79e8edca9ed7d888982bad5 100644 --- a/src/core/security/secure_transport_setup.c +++ b/src/core/security/secure_transport_setup.c @@ -131,7 +131,7 @@ static void send_handshake_bytes_to_peer(grpc_secure_transport_setup *s) { grpc_endpoint_write_status write_status; do { - uint32_t to_send_size = s->handshake_buffer_size - offset; + size_t to_send_size = s->handshake_buffer_size - offset; result = tsi_handshaker_get_bytes_to_send_to_peer( s->handshaker, s->handshake_buffer + offset, &to_send_size); offset += to_send_size; @@ -174,7 +174,7 @@ static void on_handshake_data_received_from_peer( void *setup, gpr_slice *slices, size_t nslices, grpc_endpoint_cb_status error) { grpc_secure_transport_setup *s = setup; - uint32_t consumed_slice_size = 0; + size_t consumed_slice_size = 0; tsi_result result = TSI_OK; size_t i; size_t num_left_overs; diff --git a/src/core/security/security_context.c b/src/core/security/security_context.c index fc722f2d829b0175bd62985da6c68fd65f1c513d..cce3c7fe04fc39aec3b86fd2d6ec8c003a361bfd 100644 --- a/src/core/security/security_context.c +++ b/src/core/security/security_context.c @@ -382,7 +382,7 @@ error: } grpc_security_status grpc_ssl_server_security_context_create( - const grpc_ssl_config *config, grpc_security_context **ctx) { + const grpc_ssl_server_config *config, grpc_security_context **ctx) { size_t num_alpn_protocols = grpc_chttp2_num_alpn_versions(); const unsigned char **alpn_protocol_strings = gpr_malloc(sizeof(const char *) * num_alpn_protocols); @@ -399,8 +399,7 @@ grpc_security_status grpc_ssl_server_security_context_create( strlen(grpc_chttp2_get_alpn_version_index(i)); } - if (config == NULL || config->pem_private_key == NULL || - config->pem_cert_chain == NULL) { + if (config == NULL || config->num_key_cert_pairs == 0) { gpr_log(GPR_ERROR, "An SSL server needs a key and a cert."); goto error; } @@ -410,10 +409,10 @@ grpc_security_status grpc_ssl_server_security_context_create( gpr_ref_init(&c->base.refcount, 1); c->base.vtable = &ssl_server_vtable; result = tsi_create_ssl_server_handshaker_factory( - (const unsigned char **)&config->pem_private_key, - (const gpr_uint32 *)&config->pem_private_key_size, - (const unsigned char **)&config->pem_cert_chain, - (const gpr_uint32 *)&config->pem_cert_chain_size, 1, + (const unsigned char **)config->pem_private_keys, + config->pem_private_keys_sizes, + (const unsigned char **)config->pem_cert_chains, + config->pem_cert_chains_sizes, config->num_key_cert_pairs, config->pem_root_certs, config->pem_root_certs_size, GRPC_SSL_CIPHER_SUITES, alpn_protocol_strings, alpn_protocol_string_lengths, num_alpn_protocols, &c->handshaker_factory); diff --git a/src/core/security/security_context.h b/src/core/security/security_context.h index 9ace7f1ccb9818c083f2a1dd2cda65b443f8ee85..2caa2d36900f194bef2a9f91b75d4aec567687f2 100644 --- a/src/core/security/security_context.h +++ b/src/core/security/security_context.h @@ -157,7 +157,7 @@ grpc_security_status grpc_ssl_channel_security_context_create( specific error code otherwise. */ grpc_security_status grpc_ssl_server_security_context_create( - const grpc_ssl_config *config, grpc_security_context **ctx); + const grpc_ssl_server_config *config, grpc_security_context **ctx); /* --- Creation of high level objects. --- */ diff --git a/src/core/security/server_secure_chttp2.c b/src/core/security/server_secure_chttp2.c index 931fa95651b9ffb7ecb7c3836723ec5836543460..9dd43278222b1f2ef49d7556b99449299bcc7b4a 100644 --- a/src/core/security/server_secure_chttp2.c +++ b/src/core/security/server_secure_chttp2.c @@ -93,6 +93,8 @@ int grpc_server_add_secure_http2_port(grpc_server *server, const char *addr) { grpc_tcp_server *tcp = NULL; size_t i; int count = 0; + int port_num = -1; + int port_temp; resolved = grpc_blocking_resolve_address(addr, "https"); if (!resolved) { @@ -105,9 +107,15 @@ int grpc_server_add_secure_http2_port(grpc_server *server, const char *addr) { } for (i = 0; i < resolved->naddrs; i++) { - if (grpc_tcp_server_add_port(tcp, - (struct sockaddr *)&resolved->addrs[i].addr, - resolved->addrs[i].len)) { + port_temp = grpc_tcp_server_add_port( + tcp, (struct sockaddr *)&resolved->addrs[i].addr, + resolved->addrs[i].len); + if (port_temp >= 0) { + if (port_num == -1) { + port_num = port_temp; + } else { + GPR_ASSERT(port_num == port_temp); + } count++; } } @@ -125,7 +133,7 @@ int grpc_server_add_secure_http2_port(grpc_server *server, const char *addr) { /* Register with the server only upon success */ grpc_server_add_listener(server, tcp, start, destroy); - return 1; + return port_num; /* Error path: cleanup and return */ error: diff --git a/src/core/statistics/census_init.c b/src/core/statistics/census_init.c index bcb9ff9ad4e2634958fce861ef84b788ea77414b..cbf2089f3fa81d404b924aab1322be55736751c0 100644 --- a/src/core/statistics/census_init.c +++ b/src/core/statistics/census_init.c @@ -37,13 +37,13 @@ #include "src/core/statistics/census_rpc_stats.h" #include "src/core/statistics/census_tracing.h" -void census_init() { +void census_init(void) { gpr_log(GPR_INFO, "Initialize census library."); census_tracing_init(); census_stats_store_init(); } -void census_shutdown() { +void census_shutdown(void) { gpr_log(GPR_INFO, "Shutdown census library."); census_stats_store_shutdown(); census_tracing_shutdown(); diff --git a/src/core/statistics/census_interface.h b/src/core/statistics/census_interface.h index af9c70c4fb7939e9a9aaf1d42503d39434558f74..8e586382f7896b8d519e3a56f7ae84942ca1cd1a 100644 --- a/src/core/statistics/census_interface.h +++ b/src/core/statistics/census_interface.h @@ -49,10 +49,10 @@ typedef struct census_op_id { typedef struct census_rpc_stats census_rpc_stats; /* Initializes Census library. No-op if Census is already initialized. */ -void census_init(); +void census_init(void); /* Shutdown Census Library. */ -void census_shutdown(); +void census_shutdown(void); /* Annotates grpc method name on a census_op_id. The method name has the format of <full quantified rpc service name>/<rpc function name>. Returns 0 iff @@ -68,7 +68,7 @@ int census_add_method_tag(census_op_id op_id, const char* method_name); void census_tracing_print(census_op_id op_id, const char* annotation); /* Starts tracing for an RPC. Returns a locally unique census_op_id */ -census_op_id census_tracing_start_op(); +census_op_id census_tracing_start_op(void); /* Ends tracing. Calling this function will invalidate the input op_id. */ void census_tracing_end_op(census_op_id op_id); diff --git a/src/core/statistics/census_log.c b/src/core/statistics/census_log.c index 56fa430bbdbc8e4b4644e702f80a1b42335305b7..404e92cc6216d23b783336c6dc0105ee68939097 100644 --- a/src/core/statistics/census_log.c +++ b/src/core/statistics/census_log.c @@ -368,7 +368,7 @@ static void cl_block_end_read(cl_block* block) { /* Allocates a new free block (or recycles an available dirty block if log is configured to discard old records). Returns NULL if out-of-space. */ -static cl_block* cl_allocate_block() { +static cl_block* cl_allocate_block(void) { cl_block* block = cl_block_list_head(&g_log.free_block_list); if (block != NULL) { cl_block_list_remove(&g_log.free_block_list, block); @@ -496,7 +496,7 @@ void census_log_initialize(size_t size_in_mb, int discard_old_records) { g_log.initialized = 1; } -void census_log_shutdown() { +void census_log_shutdown(void) { GPR_ASSERT(g_log.initialized); gpr_mu_destroy(&g_log.lock); gpr_free_aligned(g_log.core_local_blocks); @@ -551,7 +551,7 @@ void census_log_end_write(void* record, size_t bytes_written) { cl_block_end_write(cl_get_block(record), bytes_written); } -void census_log_init_reader() { +void census_log_init_reader(void) { GPR_ASSERT(g_log.initialized); gpr_mu_lock(&g_log.lock); /* If a block is locked for reading unlock it. */ @@ -584,7 +584,7 @@ const void* census_log_read_next(size_t* bytes_available) { return NULL; } -size_t census_log_remaining_space() { +size_t census_log_remaining_space(void) { size_t space; GPR_ASSERT(g_log.initialized); gpr_mu_lock(&g_log.lock); @@ -598,7 +598,7 @@ size_t census_log_remaining_space() { return space; } -int census_log_out_of_space_count() { +int census_log_out_of_space_count(void) { GPR_ASSERT(g_log.initialized); return gpr_atm_acq_load(&g_log.out_of_space_count); } diff --git a/src/core/statistics/census_log.h b/src/core/statistics/census_log.h index fa9229b1221d3b62cb64537a39167c724eaae60c..0d89df79929d6402d99241c9a9a6876580ce1aac 100644 --- a/src/core/statistics/census_log.h +++ b/src/core/statistics/census_log.h @@ -53,7 +53,7 @@ void census_log_initialize(size_t size_in_mb, int discard_old_records); - no in progress or future call to any census_log functions - no incomplete records */ -void census_log_shutdown(); +void census_log_shutdown(void); /* Allocates and returns a 'size' bytes record and marks it in use. A subsequent census_log_end_write() marks the record complete. The @@ -74,7 +74,7 @@ void census_log_end_write(void* record, size_t bytes_written); is read. census_log_init_reader() starts the iteration or aborts the current iteration. */ -void census_log_init_reader(); +void census_log_init_reader(void); const void* census_log_read_next(size_t* bytes_available); /* Returns estimated remaining space across all blocks, in bytes. If log is @@ -82,10 +82,10 @@ const void* census_log_read_next(size_t* bytes_available); returns space available in empty blocks (partially filled blocks are treated as full). */ -size_t census_log_remaining_space(); +size_t census_log_remaining_space(void); /* Returns the number of times gprc_stats_log_start_write() failed due to out-of-space. */ -int census_log_out_of_space_count(); +int census_log_out_of_space_count(void); #endif /* __GRPC_INTERNAL_STATISTICS_LOG_H__ */ diff --git a/src/core/statistics/census_rpc_stats.c b/src/core/statistics/census_rpc_stats.c index a1ac2abff3b89d8ec18ffd1526a6455562678fdb..39094b5f65a2b323abba0141f840e5bcb7bb13aa 100644 --- a/src/core/statistics/census_rpc_stats.c +++ b/src/core/statistics/census_rpc_stats.c @@ -59,9 +59,9 @@ static gpr_mu g_mu; static census_ht* g_client_stats_store = NULL; static census_ht* g_server_stats_store = NULL; -static void init_mutex() { gpr_mu_init(&g_mu); } +static void init_mutex(void) { gpr_mu_init(&g_mu); } -static void init_mutex_once() { +static void init_mutex_once(void) { gpr_once_init(&g_stats_store_mu_init, init_mutex); } @@ -85,8 +85,9 @@ static void delete_key(void* key) { gpr_free(key); } static const census_ht_option ht_opt = { CENSUS_HT_POINTER /* key type */, 1999 /* n_of_buckets */, - simple_hash /* hash function */, cmp_str_keys /* key comparator */, - delete_stats /* data deleter */, delete_key /* key deleter */}; + simple_hash /* hash function */, cmp_str_keys /* key comparator */, + delete_stats /* data deleter */, delete_key /* key deleter */ +}; static void init_rpc_stats(void* stats) { memset(stats, 0, sizeof(census_rpc_stats)); @@ -115,7 +116,7 @@ static gpr_timespec min_hour_total_intervals[3] = { static const census_window_stats_stat_info window_stats_settings = { sizeof(census_rpc_stats), init_rpc_stats, stat_add, stat_add_proportion}; -census_rpc_stats* census_rpc_stats_create_empty() { +census_rpc_stats* census_rpc_stats_create_empty(void) { census_rpc_stats* ret = (census_rpc_stats*)gpr_malloc(sizeof(census_rpc_stats)); memset(ret, 0, sizeof(census_rpc_stats)); @@ -220,7 +221,7 @@ void census_get_server_stats(census_aggregated_rpc_stats* data) { get_stats(g_server_stats_store, data); } -void census_stats_store_init() { +void census_stats_store_init(void) { gpr_log(GPR_INFO, "Initialize census stats store."); init_mutex_once(); gpr_mu_lock(&g_mu); @@ -233,7 +234,7 @@ void census_stats_store_init() { gpr_mu_unlock(&g_mu); } -void census_stats_store_shutdown() { +void census_stats_store_shutdown(void) { gpr_log(GPR_INFO, "Shutdown census stats store."); init_mutex_once(); gpr_mu_lock(&g_mu); diff --git a/src/core/statistics/census_rpc_stats.h b/src/core/statistics/census_rpc_stats.h index a9c999aa5ce26702ad32aa1b0462d7de5df95886..81466907fdcf825c86307dd300f44065fe0accd8 100644 --- a/src/core/statistics/census_rpc_stats.h +++ b/src/core/statistics/census_rpc_stats.h @@ -53,7 +53,7 @@ struct census_rpc_stats { }; /* Creates an empty rpc stats object on heap. */ -census_rpc_stats* census_rpc_stats_create_empty(); +census_rpc_stats* census_rpc_stats_create_empty(void); typedef struct census_per_method_rpc_stats { const char* method; @@ -91,8 +91,8 @@ void census_get_server_stats(census_aggregated_rpc_stats* data_map); DO NOT CALL from outside of grpc code. */ void census_get_client_stats(census_aggregated_rpc_stats* data_map); -void census_stats_store_init(); -void census_stats_store_shutdown(); +void census_stats_store_init(void); +void census_stats_store_shutdown(void); #ifdef __cplusplus } diff --git a/src/core/statistics/census_tracing.c b/src/core/statistics/census_tracing.c index 45302cd6abedf4ab44624664b105a1b011a9465b..1e616020715176622c384c675effae1083b99055 100644 --- a/src/core/statistics/census_tracing.c +++ b/src/core/statistics/census_tracing.c @@ -76,7 +76,8 @@ static void delete_trace_obj(void* obj) { trace_obj_destroy((trace_obj*)obj); } static const census_ht_option ht_opt = { CENSUS_HT_UINT64 /* key type*/, 571 /* n_of_buckets */, NULL /* hash */, NULL /* compare_keys */, delete_trace_obj /* delete data */, - NULL /* delete key */}; + NULL /* delete key */ +}; static gpr_once g_init_mutex_once = GPR_ONCE_INIT; static gpr_mu g_mu; /* Guards following two static variables. */ @@ -93,11 +94,13 @@ static gpr_uint64 op_id_2_uint64(census_op_id* id) { return ret; } -static void init_mutex() { gpr_mu_init(&g_mu); } +static void init_mutex(void) { gpr_mu_init(&g_mu); } -static void init_mutex_once() { gpr_once_init(&g_init_mutex_once, init_mutex); } +static void init_mutex_once(void) { + gpr_once_init(&g_init_mutex_once, init_mutex); +} -census_op_id census_tracing_start_op() { +census_op_id census_tracing_start_op(void) { gpr_mu_lock(&g_mu); { trace_obj* ret = (trace_obj*)gpr_malloc(sizeof(trace_obj)); @@ -164,7 +167,7 @@ void census_tracing_end_op(census_op_id op_id) { gpr_mu_unlock(&g_mu); } -void census_tracing_init() { +void census_tracing_init(void) { gpr_log(GPR_INFO, "Initialize census trace store."); init_mutex_once(); gpr_mu_lock(&g_mu); @@ -177,7 +180,7 @@ void census_tracing_init() { gpr_mu_unlock(&g_mu); } -void census_tracing_shutdown() { +void census_tracing_shutdown(void) { gpr_log(GPR_INFO, "Shutdown census trace store."); gpr_mu_lock(&g_mu); if (g_trace_store != NULL) { @@ -189,9 +192,9 @@ void census_tracing_shutdown() { gpr_mu_unlock(&g_mu); } -void census_internal_lock_trace_store() { gpr_mu_lock(&g_mu); } +void census_internal_lock_trace_store(void) { gpr_mu_lock(&g_mu); } -void census_internal_unlock_trace_store() { gpr_mu_unlock(&g_mu); } +void census_internal_unlock_trace_store(void) { gpr_mu_unlock(&g_mu); } trace_obj* census_get_trace_obj_locked(census_op_id op_id) { if (g_trace_store == NULL) { diff --git a/src/core/statistics/census_tracing.h b/src/core/statistics/census_tracing.h index 2285a5cd6bd8e797e6991bb1464911f3daf4eb5f..604096ba543a69bd1155b4d45f7474c5d4384666 100644 --- a/src/core/statistics/census_tracing.h +++ b/src/core/statistics/census_tracing.h @@ -38,10 +38,10 @@ typedef struct trace_obj trace_obj; /* Initializes trace store. This function is thread safe. */ -void census_tracing_init(); +void census_tracing_init(void); /* Shutsdown trace store. This function is thread safe. */ -void census_tracing_shutdown(); +void census_tracing_shutdown(void); /* Gets trace obj corresponding to the input op_id. Returns NULL if trace store is not initialized or trace obj is not found. Requires trace store being @@ -50,8 +50,8 @@ trace_obj* census_get_trace_obj_locked(census_op_id op_id); /* The following two functions acquire and release the trace store global lock. They are for census internal use only. */ -void census_internal_lock_trace_store(); -void census_internal_unlock_trace_store(); +void census_internal_lock_trace_store(void); +void census_internal_unlock_trace_store(void); /* Gets method tag name associated with the input trace object. */ const char* census_get_trace_method_name(const trace_obj* trace); diff --git a/src/core/support/cpu.h b/src/core/support/cpu.h index 2435ec03530beef13e16638841b47d5bea7a8e74..1c2dde74ee1a4c272e203efd2531dfc826348aac 100644 --- a/src/core/support/cpu.h +++ b/src/core/support/cpu.h @@ -38,12 +38,12 @@ /* Return the number of CPU cores on the current system. Will return 0 if if information is not available. */ -int gpr_cpu_num_cores(); +int gpr_cpu_num_cores(void); /* Return the CPU on which the current thread is executing; N.B. This should be considered advisory only - it is possible that the thread is switched to a different CPU at any time. Returns a value in range [0, gpr_cpu_num_cores() - 1] */ -int gpr_cpu_current_cpu(); +int gpr_cpu_current_cpu(void); #endif /* __GRPC_INTERNAL_SUPPORT_CPU_H__ */ diff --git a/src/core/support/cpu_linux.c b/src/core/support/cpu_linux.c index 922b61c3c5861c8aa04f402fe6be7471c9febb9b..d8006288066f802815a3978c36750212fe702951 100644 --- a/src/core/support/cpu_linux.c +++ b/src/core/support/cpu_linux.c @@ -75,7 +75,7 @@ #include <grpc/support/log.h> -int gpr_cpu_num_cores() { +int gpr_cpu_num_cores(void) { static int ncpus = 0; if (ncpus == 0) { ncpus = sysconf(_SC_NPROCESSORS_ONLN); @@ -87,7 +87,7 @@ int gpr_cpu_num_cores() { return ncpus; } -int gpr_cpu_current_cpu() { +int gpr_cpu_current_cpu(void) { int cpu = sched_getcpu(); if (cpu < 0) { gpr_log(GPR_ERROR, "Error determining current CPU: %s\n", strerror(errno)); diff --git a/src/core/support/cpu_posix.c b/src/core/support/cpu_posix.c index 3dd1c548b0e2859fbb3d2c90080c43333de81334..2ea80807fc2997fd63d99452d5492babbce90030 100644 --- a/src/core/support/cpu_posix.c +++ b/src/core/support/cpu_posix.c @@ -45,7 +45,7 @@ static __thread char magic_thread_local; -int gpr_cpu_num_cores() { +int gpr_cpu_num_cores(void) { static int ncpus = 0; if (ncpus == 0) { ncpus = sysconf(_SC_NPROCESSORS_ONLN); @@ -63,7 +63,7 @@ static size_t shard_ptr(const void *info) { return ((x >> 4) ^ (x >> 9) ^ (x >> 14)) % gpr_cpu_num_cores(); } -int gpr_cpu_current_cpu() { +int gpr_cpu_current_cpu(void) { /* NOTE: there's no way I know to return the actual cpu index portably... most code that's using this is using it to shard across work queues though, so here we use thread identity instead to achieve a similar though not diff --git a/src/core/support/log_linux.c b/src/core/support/log_linux.c index 36fb4b5051f3cf46b0afd3e62b25cebe2b4abb49..a0307e1a9a480a4498fe65e4dccfd529c96def4d 100644 --- a/src/core/support/log_linux.c +++ b/src/core/support/log_linux.c @@ -47,7 +47,7 @@ #include <sys/syscall.h> #include <unistd.h> -static long gettid() { return syscall(__NR_gettid); } +static long gettid(void) { return syscall(__NR_gettid); } void gpr_log(const char *file, int line, gpr_log_severity severity, const char *format, ...) { diff --git a/src/core/support/log_posix.c b/src/core/support/log_posix.c index ee2705a2c200189ddda33e2022344f51f206899b..1292c9e8c35839cfa0f3a9d27802e53f4d2d0168 100644 --- a/src/core/support/log_posix.c +++ b/src/core/support/log_posix.c @@ -50,7 +50,7 @@ #include <time.h> #include <pthread.h> -static gpr_intptr gettid() { return (gpr_intptr)pthread_self(); } +static gpr_intptr gettid(void) { return (gpr_intptr)pthread_self(); } void gpr_log(const char *file, int line, gpr_log_severity severity, const char *format, ...) { diff --git a/src/core/support/murmur_hash.c b/src/core/support/murmur_hash.c index 5d30263e52160f00011bf5eb340a9f65862844c2..08b1eb80d8f637555f09b6e1d5f250c86ef21353 100644 --- a/src/core/support/murmur_hash.c +++ b/src/core/support/murmur_hash.c @@ -46,8 +46,8 @@ handle aligned reads, do the conversion here */ #define GETBLOCK32(p, i) (p)[(i)] -gpr_uint32 gpr_murmur_hash3(const void* key, size_t len, gpr_uint32 seed) { - const gpr_uint8* data = (const gpr_uint8*)key; +gpr_uint32 gpr_murmur_hash3(const void *key, size_t len, gpr_uint32 seed) { + const gpr_uint8 *data = (const gpr_uint8 *)key; const int nblocks = len / 4; int i; @@ -57,8 +57,8 @@ gpr_uint32 gpr_murmur_hash3(const void* key, size_t len, gpr_uint32 seed) { const gpr_uint32 c1 = 0xcc9e2d51; const gpr_uint32 c2 = 0x1b873593; - const gpr_uint32* blocks = (const uint32_t*)(data + nblocks * 4); - const uint8_t* tail = (const uint8_t*)(data + nblocks * 4); + const gpr_uint32 *blocks = (const uint32_t *)(data + nblocks * 4); + const uint8_t *tail = (const uint8_t *)(data + nblocks * 4); /* body */ for (i = -nblocks; i; i++) { diff --git a/src/core/support/slice.c b/src/core/support/slice.c index fcdeb478fb69ad982fc1cd43e6cfaf30ac74f0c5..836a5a6c2a7c8a9285f639e4bfed98b72795fe88 100644 --- a/src/core/support/slice.c +++ b/src/core/support/slice.c @@ -37,7 +37,7 @@ #include <string.h> -gpr_slice gpr_empty_slice() { +gpr_slice gpr_empty_slice(void) { gpr_slice out; out.refcount = 0; out.data.inlined.length = 0; diff --git a/src/core/support/string.c b/src/core/support/string.c index b1f07958466f1336dd17a6d09f944160e398016b..7960547735bb4858441fd74b40bb0e23029a2dc3 100644 --- a/src/core/support/string.c +++ b/src/core/support/string.c @@ -63,7 +63,7 @@ typedef struct { char *data; } hexout; -static hexout hexout_create() { +static hexout hexout_create(void) { hexout r = {0, 0, NULL}; return r; } diff --git a/src/core/support/time_posix.c b/src/core/support/time_posix.c index 78d4c3b44682fad1783134d24470d41243d71568..9e11f8a865dc5a94de736969950e19137bc50ce3 100644 --- a/src/core/support/time_posix.c +++ b/src/core/support/time_posix.c @@ -61,7 +61,7 @@ gpr_timespec gpr_now(void) { struct timeval now_tv; gettimeofday(&now_tv, NULL); now.tv_sec = now_tv.tv_sec; - now.tv_nsec = now_tv.tv_usec / 1000; + now.tv_nsec = now_tv.tv_usec * 1000; return now; } #endif diff --git a/src/core/surface/call.c b/src/core/surface/call.c index 0d72bf42fb84fe7fe23cf411a8cd4f196d0229bc..46502fb6b1423fcdeb4f38251e52dca062c4b8db 100644 --- a/src/core/surface/call.c +++ b/src/core/surface/call.c @@ -198,7 +198,7 @@ struct grpc_call { gpr_refcount internal_refcount; }; -#define CALL_STACK_FROM_CALL(call) ((grpc_call_stack *)((call) + 1)) +#define CALL_STACK_FROM_CALL(call) ((grpc_call_stack *)((call)+1)) #define CALL_FROM_CALL_STACK(call_stack) (((grpc_call *)(call_stack)) - 1) #define CALL_ELEM_FROM_CALL(call, idx) \ grpc_call_stack_element(CALL_STACK_FROM_CALL(call), idx) @@ -535,17 +535,6 @@ grpc_call_error grpc_call_server_end_initial_metadata(grpc_call *call, return GRPC_CALL_OK; } -grpc_call_error grpc_call_accept(grpc_call *call, grpc_completion_queue *cq, - void *finished_tag, gpr_uint32 flags) { - grpc_call_error err; - - err = grpc_call_server_accept(call, cq, finished_tag); - if (err != GRPC_CALL_OK) return err; - err = grpc_call_server_end_initial_metadata(call, flags); - if (err != GRPC_CALL_OK) return err; - return GRPC_CALL_OK; -} - static void done_writes_done(void *user_data, grpc_op_error error) { grpc_call *call = user_data; void *tag = call->write_tag; @@ -812,7 +801,7 @@ static gpr_uint32 decode_status(grpc_mdelem *md) { gpr_uint32 status; void *user_data = grpc_mdelem_get_user_data(md, destroy_status); if (user_data) { - status = ((gpr_uint32)(gpr_intptr)user_data) - STATUS_OFFSET; + status = ((gpr_uint32)(gpr_intptr) user_data) - STATUS_OFFSET; } else { if (!gpr_parse_bytes_to_uint32(grpc_mdstr_as_c_string(md->value), GPR_SLICE_LENGTH(md->value->slice), @@ -908,7 +897,12 @@ grpc_metadata_buffer *grpc_call_get_metadata_buffer(grpc_call *call) { static void call_alarm(void *arg, int success) { grpc_call *call = arg; if (success) { - grpc_call_cancel(call); + if (call->is_client) { + grpc_call_cancel_with_status(call, GRPC_STATUS_DEADLINE_EXCEEDED, + "Deadline Exceeded"); + } else { + grpc_call_cancel(call); + } } grpc_call_internal_unref(call); } diff --git a/src/core/surface/channel.c b/src/core/surface/channel.c index a1bcea58ddb99ccb37456830614ce5654276497e..8ef13675fe37064caac6bf8d756d7d94ce5c8a1c 100644 --- a/src/core/surface/channel.c +++ b/src/core/surface/channel.c @@ -51,7 +51,7 @@ struct grpc_channel { grpc_mdstr *authority_string; }; -#define CHANNEL_STACK_FROM_CHANNEL(c) ((grpc_channel_stack *)((c) + 1)) +#define CHANNEL_STACK_FROM_CHANNEL(c) ((grpc_channel_stack *)((c)+1)) grpc_channel *grpc_channel_create_from_filters( const grpc_channel_filter **filters, size_t num_filters, diff --git a/src/core/surface/client.c b/src/core/surface/client.c index 524b0718a94642df8c955d8580a18c455a6578e8..74c79bdf9b128a70410a43ca77484dfe5739b408 100644 --- a/src/core/surface/client.c +++ b/src/core/surface/client.c @@ -109,9 +109,9 @@ static void init_channel_elem(grpc_channel_element *elem, static void destroy_channel_elem(grpc_channel_element *elem) {} const grpc_channel_filter grpc_client_surface_filter = { - call_op, channel_op, + call_op, channel_op, - sizeof(call_data), init_call_elem, destroy_call_elem, + sizeof(call_data), init_call_elem, destroy_call_elem, sizeof(channel_data), init_channel_elem, destroy_channel_elem, diff --git a/src/core/surface/completion_queue.c b/src/core/surface/completion_queue.c index b59c36e03a75468f44963c03de5be5dbafaae31a..652f23e888959c76ab3d8dd7d176c1aea6d3e439 100644 --- a/src/core/surface/completion_queue.c +++ b/src/core/surface/completion_queue.c @@ -85,7 +85,7 @@ struct grpc_completion_queue { /* Default do-nothing on_finish function */ static void null_on_finish(void *user_data, grpc_op_error error) {} -grpc_completion_queue *grpc_completion_queue_create() { +grpc_completion_queue *grpc_completion_queue_create(void) { grpc_completion_queue *cc = gpr_malloc(sizeof(grpc_completion_queue)); memset(cc, 0, sizeof(*cc)); /* Initial ref is dropped by grpc_completion_queue_shutdown */ @@ -155,6 +155,13 @@ static void end_op_locked(grpc_completion_queue *cc, } } +void grpc_cq_end_server_shutdown(grpc_completion_queue *cc, void *tag) { + gpr_mu_lock(GRPC_POLLSET_MU(&cc->pollset)); + add_locked(cc, GRPC_SERVER_SHUTDOWN, tag, NULL, NULL, NULL); + end_op_locked(cc, GRPC_SERVER_SHUTDOWN); + gpr_mu_unlock(GRPC_POLLSET_MU(&cc->pollset)); +} + void grpc_cq_end_read(grpc_completion_queue *cc, void *tag, grpc_call *call, grpc_event_finish_func on_finish, void *user_data, grpc_byte_buffer *read) { @@ -251,7 +258,7 @@ void grpc_cq_end_new_rpc(grpc_completion_queue *cc, void *tag, grpc_call *call, } /* Create a GRPC_QUEUE_SHUTDOWN event without queuing it anywhere */ -static event *create_shutdown_event() { +static event *create_shutdown_event(void) { event *ev = gpr_malloc(sizeof(event)); ev->base.type = GRPC_QUEUE_SHUTDOWN; ev->base.call = NULL; diff --git a/src/core/surface/completion_queue.h b/src/core/surface/completion_queue.h index 5e4574939661cb7e8acf6ec8477345713b203430..85984075f7867b28e2adaf27dd23bb117afeba75 100644 --- a/src/core/surface/completion_queue.h +++ b/src/core/surface/completion_queue.h @@ -97,6 +97,8 @@ void grpc_cq_end_new_rpc(grpc_completion_queue *cc, void *tag, grpc_call *call, gpr_timespec deadline, size_t metadata_count, grpc_metadata *metadata_elements); +void grpc_cq_end_server_shutdown(grpc_completion_queue *cc, void *tag); + /* disable polling for some tests */ void grpc_completion_queue_dont_poll_test_only(grpc_completion_queue *cc); diff --git a/src/core/surface/event_string.c b/src/core/surface/event_string.c index 8bd804952054e4460714b0227cfc6e949debe8f4..8ae2af74726ad963bf4993d37f5bcf8b147b2f4c 100644 --- a/src/core/surface/event_string.c +++ b/src/core/surface/event_string.c @@ -63,6 +63,9 @@ char *grpc_event_string(grpc_event *ev) { if (ev == NULL) return gpr_strdup("null"); switch (ev->type) { + case GRPC_SERVER_SHUTDOWN: + p += sprintf(p, "SERVER_SHUTDOWN"); + break; case GRPC_QUEUE_SHUTDOWN: p += sprintf(p, "QUEUE_SHUTDOWN"); break; diff --git a/src/core/surface/init.c b/src/core/surface/init.c index 832ec085c7969108cf2d2b0b508fc10476ad24c8..b5019eb03f045617be1d91a8fae8b8d53c9c09ae 100644 --- a/src/core/surface/init.c +++ b/src/core/surface/init.c @@ -35,12 +35,12 @@ #include "src/core/statistics/census_interface.h" #include "src/core/iomgr/iomgr.h" -void grpc_init() { +void grpc_init(void) { grpc_iomgr_init(); census_init(); } -void grpc_shutdown() { +void grpc_shutdown(void) { grpc_iomgr_shutdown(); census_shutdown(); } diff --git a/src/core/surface/lame_client.c b/src/core/surface/lame_client.c index 5fa3e42362c1af766b585b47917c43f4c29aa438..a5244dbe61f10a52f26a948e12152382da543222 100644 --- a/src/core/surface/lame_client.c +++ b/src/core/surface/lame_client.c @@ -111,9 +111,9 @@ static void destroy_channel_elem(grpc_channel_element *elem) { } static const grpc_channel_filter lame_filter = { - call_op, channel_op, + call_op, channel_op, - sizeof(call_data), init_call_elem, destroy_call_elem, + sizeof(call_data), init_call_elem, destroy_call_elem, sizeof(channel_data), init_channel_elem, destroy_channel_elem, diff --git a/src/core/surface/server.c b/src/core/surface/server.c index 167bfe97d12b68db1dc8a707839d4e091b504b2f..cbdd3bfa30871f8a37ef171868f7ad30ffbefa86 100644 --- a/src/core/surface/server.c +++ b/src/core/surface/server.c @@ -81,6 +81,8 @@ struct grpc_server { size_t tag_cap; gpr_uint8 shutdown; + gpr_uint8 have_shutdown_tag; + void *shutdown_tag; call_data *lists[CALL_LIST_COUNT]; channel_data root_channel_data; @@ -375,6 +377,10 @@ static void destroy_call_elem(grpc_call_element *elem) { for (i = 0; i < CALL_LIST_COUNT; i++) { call_list_remove(chand->server, elem->call_data, i); } + if (chand->server->shutdown && chand->server->have_shutdown_tag && + chand->server->lists[ALL_CALLS] == NULL) { + grpc_cq_end_server_shutdown(chand->server->cq, chand->server->shutdown_tag); + } gpr_mu_unlock(&chand->server->mu); server_unref(chand->server); @@ -405,9 +411,9 @@ static void destroy_channel_elem(grpc_channel_element *elem) { } static const grpc_channel_filter server_surface_filter = { - call_op, channel_op, + call_op, channel_op, - sizeof(call_data), init_call_elem, destroy_call_elem, + sizeof(call_data), init_call_elem, destroy_call_elem, sizeof(channel_data), init_channel_elem, destroy_channel_elem, @@ -513,7 +519,8 @@ grpc_transport_setup_result grpc_server_setup_transport( grpc_channel_get_channel_stack(channel), transport); } -void grpc_server_shutdown(grpc_server *server) { +void shutdown_internal(grpc_server *server, gpr_uint8 have_shutdown_tag, + void *shutdown_tag) { listener *l; void **tags; size_t ntags; @@ -551,6 +558,14 @@ void grpc_server_shutdown(grpc_server *server) { server->ntags = 0; server->shutdown = 1; + server->have_shutdown_tag = have_shutdown_tag; + server->shutdown_tag = shutdown_tag; + if (have_shutdown_tag) { + grpc_cq_begin_op(server->cq, NULL, GRPC_SERVER_SHUTDOWN); + if (server->lists[ALL_CALLS] == NULL) { + grpc_cq_end_server_shutdown(server->cq, shutdown_tag); + } + } gpr_mu_unlock(&server->mu); for (i = 0; i < nchannels; i++) { @@ -583,6 +598,14 @@ void grpc_server_shutdown(grpc_server *server) { } } +void grpc_server_shutdown(grpc_server *server) { + shutdown_internal(server, 0, NULL); +} + +void grpc_server_shutdown_and_notify(grpc_server *server, void *tag) { + shutdown_internal(server, 1, tag); +} + void grpc_server_destroy(grpc_server *server) { channel_data *c; gpr_mu_lock(&server->mu); diff --git a/src/core/transport/chttp2/alpn.c b/src/core/transport/chttp2/alpn.c index 8107406f8b503db12a98c86133dcaa60c8eb9c4a..bc4e789f60cf632c2592b519d2447019e61fde32 100644 --- a/src/core/transport/chttp2/alpn.c +++ b/src/core/transport/chttp2/alpn.c @@ -46,7 +46,7 @@ int grpc_chttp2_is_alpn_version_supported(const char *version, size_t size) { return 0; } -size_t grpc_chttp2_num_alpn_versions() { +size_t grpc_chttp2_num_alpn_versions(void) { return GPR_ARRAY_SIZE(supported_versions); } diff --git a/src/core/transport/chttp2/alpn.h b/src/core/transport/chttp2/alpn.h index de4da8fedb09de9bce4e8bf7d9568295fc5594d3..cb96f17831f713a96ef11b441bb0c038233ef643 100644 --- a/src/core/transport/chttp2/alpn.h +++ b/src/core/transport/chttp2/alpn.h @@ -40,7 +40,7 @@ int grpc_chttp2_is_alpn_version_supported(const char *version, size_t size); /* Returns the number of protocol versions to advertise */ -size_t grpc_chttp2_num_alpn_versions(); +size_t grpc_chttp2_num_alpn_versions(void); /* Returns the protocol version at index i (0 <= i < * grpc_chttp2_num_alpn_versions()) */ diff --git a/src/core/transport/chttp2/frame_settings.c b/src/core/transport/chttp2/frame_settings.c index d8bc4928708254b39e33588bba46c2e55963c450..3ca973c07bf4f23b9aa913960e182a3db4c19dab 100644 --- a/src/core/transport/chttp2/frame_settings.c +++ b/src/core/transport/chttp2/frame_settings.c @@ -102,7 +102,7 @@ gpr_slice grpc_chttp2_settings_create(gpr_uint32 *old, const gpr_uint32 *new, return output; } -gpr_slice grpc_chttp2_settings_ack_create() { +gpr_slice grpc_chttp2_settings_ack_create(void) { gpr_slice output = gpr_slice_malloc(9); fill_header(GPR_SLICE_START_PTR(output), 0, GRPC_CHTTP2_FLAG_ACK); return output; diff --git a/src/core/transport/chttp2/frame_settings.h b/src/core/transport/chttp2/frame_settings.h index 855f9636bba3b4c8f9d50b3509b0415eb7acd7ec..fc513913d90b2aa3b58758a29a05c3a3ee86c87e 100644 --- a/src/core/transport/chttp2/frame_settings.h +++ b/src/core/transport/chttp2/frame_settings.h @@ -88,7 +88,7 @@ extern const grpc_chttp2_setting_parameters gpr_slice grpc_chttp2_settings_create(gpr_uint32 *old, const gpr_uint32 *new, gpr_uint32 force_mask, size_t count); /* Create an ack settings frame */ -gpr_slice grpc_chttp2_settings_ack_create(); +gpr_slice grpc_chttp2_settings_ack_create(void); grpc_chttp2_parse_error grpc_chttp2_settings_parser_begin_frame( grpc_chttp2_settings_parser *parser, gpr_uint32 length, gpr_uint8 flags, diff --git a/src/core/transport/chttp2/gen_hpack_tables.c b/src/core/transport/chttp2/gen_hpack_tables.c index 3b9e8ed4dc1173a50f6b01c19dd342ffcf4bdc16..cd78fcc39aa9edffc6c12b091b0b92e22e2bf702 100644 --- a/src/core/transport/chttp2/gen_hpack_tables.c +++ b/src/core/transport/chttp2/gen_hpack_tables.c @@ -86,7 +86,7 @@ static unsigned char suffix_mask(unsigned char prefix_len) { return ~prefix_mask(prefix_len); } -static void generate_first_byte_lut() { +static void generate_first_byte_lut(void) { int i, j, n; const spec *chrspec; unsigned char suffix; @@ -136,21 +136,21 @@ typedef struct { char included[GRPC_CHTTP2_NUM_HUFFSYMS]; } symset; typedef struct { int values[16]; } nibblelut; /* returns a symset that includes all possible symbols */ -static symset symset_all() { +static symset symset_all(void) { symset x; memset(x.included, 1, sizeof(x.included)); return x; } /* returns a symset that includes no symbols */ -static symset symset_none() { +static symset symset_none(void) { symset x; memset(x.included, 0, sizeof(x.included)); return x; } /* returns an empty nibblelut */ -static nibblelut nibblelut_empty() { +static nibblelut nibblelut_empty(void) { nibblelut x; int i; for (i = 0; i < 16; i++) { @@ -296,7 +296,7 @@ static void dump_ctbl(const char *name) { printf("};\n"); } -static void generate_huff_tables() { +static void generate_huff_tables(void) { int i; build_dec_tbl(state_index(0, symset_all(), &i), 0, 0, 0, -1, symset_all()); @@ -317,7 +317,7 @@ static void generate_huff_tables() { dump_ctbl("emit_sub_tbl"); } -static void generate_base64_huff_encoder_table() { +static void generate_base64_huff_encoder_table(void) { static const char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; int i; @@ -332,7 +332,7 @@ static void generate_base64_huff_encoder_table() { printf("};\n"); } -static void generate_base64_inverse_table() { +static void generate_base64_inverse_table(void) { static const char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; unsigned char inverse[256]; diff --git a/src/core/transport/chttp2/hpack_table.c b/src/core/transport/chttp2/hpack_table.c index ae8bfa8009b373ab8196524ebf9e2e8ef4e8f255..8f2ebecfeb1a030ee9e3ed51b0f93ddb1861aaf3 100644 --- a/src/core/transport/chttp2/hpack_table.c +++ b/src/core/transport/chttp2/hpack_table.c @@ -43,68 +43,68 @@ static struct { const char *key; const char *value; } static_table[] = { - /* 0: */ {NULL, NULL}, - /* 1: */ {":authority", ""}, - /* 2: */ {":method", "GET"}, - /* 3: */ {":method", "POST"}, - /* 4: */ {":path", "/"}, - /* 5: */ {":path", "/index.html"}, - /* 6: */ {":scheme", "http"}, - /* 7: */ {":scheme", "https"}, - /* 8: */ {":status", "200"}, - /* 9: */ {":status", "204"}, - /* 10: */ {":status", "206"}, - /* 11: */ {":status", "304"}, - /* 12: */ {":status", "400"}, - /* 13: */ {":status", "404"}, - /* 14: */ {":status", "500"}, - /* 15: */ {"accept-charset", ""}, - /* 16: */ {"accept-encoding", "gzip, deflate"}, - /* 17: */ {"accept-language", ""}, - /* 18: */ {"accept-ranges", ""}, - /* 19: */ {"accept", ""}, - /* 20: */ {"access-control-allow-origin", ""}, - /* 21: */ {"age", ""}, - /* 22: */ {"allow", ""}, - /* 23: */ {"authorization", ""}, - /* 24: */ {"cache-control", ""}, - /* 25: */ {"content-disposition", ""}, - /* 26: */ {"content-encoding", ""}, - /* 27: */ {"content-language", ""}, - /* 28: */ {"content-length", ""}, - /* 29: */ {"content-location", ""}, - /* 30: */ {"content-range", ""}, - /* 31: */ {"content-type", ""}, - /* 32: */ {"cookie", ""}, - /* 33: */ {"date", ""}, - /* 34: */ {"etag", ""}, - /* 35: */ {"expect", ""}, - /* 36: */ {"expires", ""}, - /* 37: */ {"from", ""}, - /* 38: */ {"host", ""}, - /* 39: */ {"if-match", ""}, - /* 40: */ {"if-modified-since", ""}, - /* 41: */ {"if-none-match", ""}, - /* 42: */ {"if-range", ""}, - /* 43: */ {"if-unmodified-since", ""}, - /* 44: */ {"last-modified", ""}, - /* 45: */ {"link", ""}, - /* 46: */ {"location", ""}, - /* 47: */ {"max-forwards", ""}, - /* 48: */ {"proxy-authenticate", ""}, - /* 49: */ {"proxy-authorization", ""}, - /* 50: */ {"range", ""}, - /* 51: */ {"referer", ""}, - /* 52: */ {"refresh", ""}, - /* 53: */ {"retry-after", ""}, - /* 54: */ {"server", ""}, - /* 55: */ {"set-cookie", ""}, - /* 56: */ {"strict-transport-security", ""}, - /* 57: */ {"transfer-encoding", ""}, - /* 58: */ {"user-agent", ""}, - /* 59: */ {"vary", ""}, - /* 60: */ {"via", ""}, - /* 61: */ {"www-authenticate", ""}, + /* 0: */ {NULL, NULL}, + /* 1: */ {":authority", ""}, + /* 2: */ {":method", "GET"}, + /* 3: */ {":method", "POST"}, + /* 4: */ {":path", "/"}, + /* 5: */ {":path", "/index.html"}, + /* 6: */ {":scheme", "http"}, + /* 7: */ {":scheme", "https"}, + /* 8: */ {":status", "200"}, + /* 9: */ {":status", "204"}, + /* 10: */ {":status", "206"}, + /* 11: */ {":status", "304"}, + /* 12: */ {":status", "400"}, + /* 13: */ {":status", "404"}, + /* 14: */ {":status", "500"}, + /* 15: */ {"accept-charset", ""}, + /* 16: */ {"accept-encoding", "gzip, deflate"}, + /* 17: */ {"accept-language", ""}, + /* 18: */ {"accept-ranges", ""}, + /* 19: */ {"accept", ""}, + /* 20: */ {"access-control-allow-origin", ""}, + /* 21: */ {"age", ""}, + /* 22: */ {"allow", ""}, + /* 23: */ {"authorization", ""}, + /* 24: */ {"cache-control", ""}, + /* 25: */ {"content-disposition", ""}, + /* 26: */ {"content-encoding", ""}, + /* 27: */ {"content-language", ""}, + /* 28: */ {"content-length", ""}, + /* 29: */ {"content-location", ""}, + /* 30: */ {"content-range", ""}, + /* 31: */ {"content-type", ""}, + /* 32: */ {"cookie", ""}, + /* 33: */ {"date", ""}, + /* 34: */ {"etag", ""}, + /* 35: */ {"expect", ""}, + /* 36: */ {"expires", ""}, + /* 37: */ {"from", ""}, + /* 38: */ {"host", ""}, + /* 39: */ {"if-match", ""}, + /* 40: */ {"if-modified-since", ""}, + /* 41: */ {"if-none-match", ""}, + /* 42: */ {"if-range", ""}, + /* 43: */ {"if-unmodified-since", ""}, + /* 44: */ {"last-modified", ""}, + /* 45: */ {"link", ""}, + /* 46: */ {"location", ""}, + /* 47: */ {"max-forwards", ""}, + /* 48: */ {"proxy-authenticate", ""}, + /* 49: */ {"proxy-authorization", ""}, + /* 50: */ {"range", ""}, + /* 51: */ {"referer", ""}, + /* 52: */ {"refresh", ""}, + /* 53: */ {"retry-after", ""}, + /* 54: */ {"server", ""}, + /* 55: */ {"set-cookie", ""}, + /* 56: */ {"strict-transport-security", ""}, + /* 57: */ {"transfer-encoding", ""}, + /* 58: */ {"user-agent", ""}, + /* 59: */ {"vary", ""}, + /* 60: */ {"via", ""}, + /* 61: */ {"www-authenticate", ""}, }; void grpc_chttp2_hptbl_init(grpc_chttp2_hptbl *tbl, grpc_mdctx *mdctx) { diff --git a/src/core/transport/chttp2/varint.h b/src/core/transport/chttp2/varint.h index 940df00a993c083c4ada2262daa2e8655ac3cdff..55f92af3d6eb6e3381cfebe6cb3fa0f713f4e27b 100644 --- a/src/core/transport/chttp2/varint.h +++ b/src/core/transport/chttp2/varint.h @@ -58,16 +58,16 @@ void grpc_chttp2_hpack_write_varint_tail(gpr_uint32 tail_value, : grpc_chttp2_hpack_varint_length( \ (n)-GRPC_CHTTP2_MAX_IN_PREFIX(prefix_bits))) -#define GRPC_CHTTP2_WRITE_VARINT(n, prefix_bits, prefix_or, target, length) \ - do { \ - gpr_uint8* tgt = target; \ - if ((length) == 1) { \ - (tgt)[0] = (prefix_or) | (n); \ - } else { \ - (tgt)[0] = (prefix_or) | GRPC_CHTTP2_MAX_IN_PREFIX(prefix_bits); \ - grpc_chttp2_hpack_write_varint_tail( \ - (n)-GRPC_CHTTP2_MAX_IN_PREFIX(prefix_bits), (tgt) + 1, (length)-1); \ - } \ +#define GRPC_CHTTP2_WRITE_VARINT(n, prefix_bits, prefix_or, target, length) \ + do { \ + gpr_uint8* tgt = target; \ + if ((length) == 1) { \ + (tgt)[0] = (prefix_or) | (n); \ + } else { \ + (tgt)[0] = (prefix_or) | GRPC_CHTTP2_MAX_IN_PREFIX(prefix_bits); \ + grpc_chttp2_hpack_write_varint_tail( \ + (n)-GRPC_CHTTP2_MAX_IN_PREFIX(prefix_bits), (tgt)+1, (length)-1); \ + } \ } while (0) #endif /* __GRPC_INTERNAL_TRANSPORT_CHTTP2_VARINT_H__ */ diff --git a/src/core/transport/chttp2_transport.c b/src/core/transport/chttp2_transport.c index 1b90d4715b3c1520410c6e6c6a2cf0fd35e607d4..e61afb71ae8d20d908ee4918b2e5bca48d073047 100644 --- a/src/core/transport/chttp2_transport.c +++ b/src/core/transport/chttp2_transport.c @@ -525,7 +525,7 @@ static int init_stream(grpc_transport *gt, grpc_stream *gs, lock(t); s->id = 0; } else { - s->id = (gpr_uint32)(gpr_uintptr)server_data; + s->id = (gpr_uint32)(gpr_uintptr) server_data; t->incoming_stream = s; grpc_chttp2_stream_map_add(&t->stream_map, s->id, s); } @@ -1238,7 +1238,7 @@ static int init_header_frame_parser(transport *t, int is_continuation) { t->incoming_stream = NULL; /* if stream is accepted, we set incoming_stream in init_stream */ t->cb->accept_stream(t->cb_user_data, &t->base, - (void *)(gpr_uintptr)t->incoming_stream_id); + (void *)(gpr_uintptr) t->incoming_stream_id); s = t->incoming_stream; if (!s) { gpr_log(GPR_ERROR, "stream not accepted"); @@ -1503,8 +1503,9 @@ static int process_read(transport *t, gpr_slice slice) { "Connect string mismatch: expected '%c' (%d) got '%c' (%d) " "at byte %d", CLIENT_CONNECT_STRING[t->deframe_state], - (int)(gpr_uint8)CLIENT_CONNECT_STRING[t->deframe_state], *cur, - (int)*cur, t->deframe_state); + (int)(gpr_uint8) CLIENT_CONNECT_STRING[t->deframe_state], + *cur, (int)*cur, t->deframe_state); + drop_connection(t); return 0; } ++cur; @@ -1737,9 +1738,9 @@ static void add_to_pollset(grpc_transport *gt, grpc_pollset *pollset) { */ static const grpc_transport_vtable vtable = { - sizeof(stream), init_stream, send_batch, set_allow_window_updates, - add_to_pollset, destroy_stream, abort_stream, goaway, close_transport, - send_ping, destroy_transport}; + sizeof(stream), init_stream, send_batch, set_allow_window_updates, + add_to_pollset, destroy_stream, abort_stream, goaway, + close_transport, send_ping, destroy_transport}; void grpc_create_chttp2_transport(grpc_transport_setup_callback setup, void *arg, diff --git a/src/core/transport/metadata.c b/src/core/transport/metadata.c index e8ab21667144ee1c4d1ce0b5c773a911ace04760..6881b871ecb773f655d53c9d2473f4c5c78b779a 100644 --- a/src/core/transport/metadata.c +++ b/src/core/transport/metadata.c @@ -154,7 +154,7 @@ grpc_mdctx *grpc_mdctx_create_with_seed(gpr_uint32 seed) { return ctx; } -grpc_mdctx *grpc_mdctx_create() { +grpc_mdctx *grpc_mdctx_create(void) { /* This seed is used to prevent remote connections from controlling hash table * collisions. It needs to be somewhat unpredictable to a remote connection. */ diff --git a/src/core/transport/metadata.h b/src/core/transport/metadata.h index 943e65a981e9902672e27a968b09b445f701550e..ac845def379c3b2d6df7df9157930c80ee15c153 100644 --- a/src/core/transport/metadata.h +++ b/src/core/transport/metadata.h @@ -82,7 +82,7 @@ struct grpc_mdelem { }; /* Create/orphan a metadata context */ -grpc_mdctx *grpc_mdctx_create(); +grpc_mdctx *grpc_mdctx_create(void); grpc_mdctx *grpc_mdctx_create_with_seed(gpr_uint32 seed); void grpc_mdctx_orphan(grpc_mdctx *mdctx); diff --git a/src/core/tsi/fake_transport_security.c b/src/core/tsi/fake_transport_security.c index 63d0e1f78816fee54afc1eeb0747c616c35788db..756b2173ecf3bef218a2ba8375eb352a77eec08c 100644 --- a/src/core/tsi/fake_transport_security.c +++ b/src/core/tsi/fake_transport_security.c @@ -37,6 +37,7 @@ #include <string.h> #include <grpc/support/log.h> +#include <grpc/support/port_platform.h> #include "src/core/tsi/transport_security.h" /* --- Constants. ---*/ @@ -52,9 +53,9 @@ the data encoded in little endian on 4 bytes. */ typedef struct { unsigned char* data; - uint32_t size; - uint32_t allocated_size; - uint32_t offset; + size_t size; + size_t allocated_size; + size_t offset; int needs_draining; } tsi_fake_frame; @@ -80,7 +81,7 @@ typedef struct { tsi_frame_protector base; tsi_fake_frame protect_frame; tsi_fake_frame unprotect_frame; - uint32_t max_frame_size; + size_t max_frame_size; } tsi_fake_frame_protector; /* --- Utils. ---*/ @@ -110,16 +111,16 @@ static tsi_result tsi_fake_handshake_message_from_string( return TSI_DATA_CORRUPTED; } -static uint32_t load32_little_endian(const unsigned char* buf) { - return ((uint32_t)(buf[0]) | (uint32_t)(buf[1] << 8) | - (uint32_t)(buf[2] << 16) | (uint32_t)(buf[3] << 24)); +static gpr_uint32 load32_little_endian(const unsigned char* buf) { + return ((gpr_uint32)(buf[0]) | (gpr_uint32)(buf[1] << 8) | + (gpr_uint32)(buf[2] << 16) | (gpr_uint32)(buf[3] << 24)); } -static void store32_little_endian(uint32_t value, unsigned char* buf) { +static void store32_little_endian(gpr_uint32 value, unsigned char* buf) { buf[3] = (unsigned char)(value >> 24) & 0xFF; buf[2] = (unsigned char)(value >> 16) & 0xFF; buf[1] = (unsigned char)(value >> 8) & 0xFF; - buf[0] = (unsigned char)(value)&0xFF; + buf[0] = (unsigned char)(value) & 0xFF; } static void tsi_fake_frame_reset(tsi_fake_frame* frame, int needs_draining) { @@ -149,10 +150,10 @@ static int tsi_fake_frame_ensure_size(tsi_fake_frame* frame) { /* This method should not be called if frame->needs_framing is not 0. */ static tsi_result fill_frame_from_bytes(const unsigned char* incoming_bytes, - uint32_t* incoming_bytes_size, + size_t* incoming_bytes_size, tsi_fake_frame* frame) { - uint32_t available_size = *incoming_bytes_size; - uint32_t to_read_size = 0; + size_t available_size = *incoming_bytes_size; + size_t to_read_size = 0; const unsigned char* bytes_cursor = incoming_bytes; if (frame->needs_draining) return TSI_INTERNAL_ERROR; @@ -197,9 +198,9 @@ static tsi_result fill_frame_from_bytes(const unsigned char* incoming_bytes, /* This method should not be called if frame->needs_framing is 0. */ static tsi_result drain_frame_to_bytes(unsigned char* outgoing_bytes, - uint32_t* outgoing_bytes_size, + size_t* outgoing_bytes_size, tsi_fake_frame* frame) { - uint32_t to_write_size = frame->size - frame->offset; + size_t to_write_size = frame->size - frame->offset; if (!frame->needs_draining) return TSI_INTERNAL_ERROR; if (*outgoing_bytes_size < to_write_size) { memcpy(outgoing_bytes, frame->data + frame->offset, *outgoing_bytes_size); @@ -212,7 +213,7 @@ static tsi_result drain_frame_to_bytes(unsigned char* outgoing_bytes, return TSI_OK; } -static tsi_result bytes_to_frame(unsigned char* bytes, uint32_t bytes_size, +static tsi_result bytes_to_frame(unsigned char* bytes, size_t bytes_size, tsi_fake_frame* frame) { frame->offset = 0; frame->size = bytes_size + TSI_FAKE_FRAME_HEADER_SIZE; @@ -229,17 +230,18 @@ static void tsi_fake_frame_destruct(tsi_fake_frame* frame) { /* --- tsi_frame_protector methods implementation. ---*/ -static tsi_result fake_protector_protect( - tsi_frame_protector* self, const unsigned char* unprotected_bytes, - uint32_t* unprotected_bytes_size, unsigned char* protected_output_frames, - uint32_t* protected_output_frames_size) { +static tsi_result fake_protector_protect(tsi_frame_protector* self, + const unsigned char* unprotected_bytes, + size_t* unprotected_bytes_size, + unsigned char* protected_output_frames, + size_t* protected_output_frames_size) { tsi_result result = TSI_OK; tsi_fake_frame_protector* impl = (tsi_fake_frame_protector*)self; unsigned char frame_header[TSI_FAKE_FRAME_HEADER_SIZE]; tsi_fake_frame* frame = &impl->protect_frame; - uint32_t saved_output_size = *protected_output_frames_size; - uint32_t drained_size = 0; - uint32_t* num_bytes_written = protected_output_frames_size; + size_t saved_output_size = *protected_output_frames_size; + size_t drained_size = 0; + size_t* num_bytes_written = protected_output_frames_size; *num_bytes_written = 0; /* Try to drain first. */ @@ -262,7 +264,7 @@ static tsi_result fake_protector_protect( if (frame->needs_draining) return TSI_INTERNAL_ERROR; if (frame->size == 0) { /* New frame, create a header. */ - uint32_t written_in_frame_size = 0; + size_t written_in_frame_size = 0; store32_little_endian(impl->max_frame_size, frame_header); written_in_frame_size = TSI_FAKE_FRAME_HEADER_SIZE; result = fill_frame_from_bytes(frame_header, &written_in_frame_size, frame); @@ -291,7 +293,7 @@ static tsi_result fake_protector_protect( static tsi_result fake_protector_protect_flush( tsi_frame_protector* self, unsigned char* protected_output_frames, - uint32_t* protected_output_frames_size, uint32_t* still_pending_size) { + size_t* protected_output_frames_size, size_t* still_pending_size) { tsi_result result = TSI_OK; tsi_fake_frame_protector* impl = (tsi_fake_frame_protector*)self; tsi_fake_frame* frame = &impl->protect_frame; @@ -311,14 +313,14 @@ static tsi_result fake_protector_protect_flush( static tsi_result fake_protector_unprotect( tsi_frame_protector* self, const unsigned char* protected_frames_bytes, - uint32_t* protected_frames_bytes_size, unsigned char* unprotected_bytes, - uint32_t* unprotected_bytes_size) { + size_t* protected_frames_bytes_size, unsigned char* unprotected_bytes, + size_t* unprotected_bytes_size) { tsi_result result = TSI_OK; tsi_fake_frame_protector* impl = (tsi_fake_frame_protector*)self; tsi_fake_frame* frame = &impl->unprotect_frame; - uint32_t saved_output_size = *unprotected_bytes_size; - uint32_t drained_size = 0; - uint32_t* num_bytes_written = unprotected_bytes_size; + size_t saved_output_size = *unprotected_bytes_size; + size_t drained_size = 0; + size_t* num_bytes_written = unprotected_bytes_size; *num_bytes_written = 0; /* Try to drain first. */ @@ -373,7 +375,7 @@ static const tsi_frame_protector_vtable frame_protector_vtable = { /* --- tsi_handshaker methods implementation. ---*/ static tsi_result fake_handshaker_get_bytes_to_send_to_peer( - tsi_handshaker* self, unsigned char* bytes, uint32_t* bytes_size) { + tsi_handshaker* self, unsigned char* bytes, size_t* bytes_size) { tsi_fake_handshaker* impl = (tsi_fake_handshaker*)self; tsi_result result = TSI_OK; if (impl->needs_incoming_message || impl->result == TSI_OK) { @@ -408,7 +410,7 @@ static tsi_result fake_handshaker_get_bytes_to_send_to_peer( } static tsi_result fake_handshaker_process_bytes_from_peer( - tsi_handshaker* self, const unsigned char* bytes, uint32_t* bytes_size) { + tsi_handshaker* self, const unsigned char* bytes, size_t* bytes_size) { tsi_result result = TSI_OK; tsi_fake_handshaker* impl = (tsi_fake_handshaker*)self; int expected_msg = impl->next_message_to_send - 1; @@ -463,7 +465,7 @@ static tsi_result fake_handshaker_extract_peer(tsi_handshaker* self, } static tsi_result fake_handshaker_create_frame_protector( - tsi_handshaker* self, uint32_t* max_protected_frame_size, + tsi_handshaker* self, size_t* max_protected_frame_size, tsi_frame_protector** protector) { *protector = tsi_create_fake_protector(max_protected_frame_size); if (*protector == NULL) return TSI_OUT_OF_RESOURCES; @@ -479,8 +481,10 @@ static void fake_handshaker_destroy(tsi_handshaker* self) { static const tsi_handshaker_vtable handshaker_vtable = { fake_handshaker_get_bytes_to_send_to_peer, - fake_handshaker_process_bytes_from_peer, fake_handshaker_get_result, - fake_handshaker_extract_peer, fake_handshaker_create_frame_protector, + fake_handshaker_process_bytes_from_peer, + fake_handshaker_get_result, + fake_handshaker_extract_peer, + fake_handshaker_create_frame_protector, fake_handshaker_destroy, }; @@ -500,7 +504,7 @@ tsi_handshaker* tsi_create_fake_handshaker(int is_client) { } tsi_frame_protector* tsi_create_fake_protector( - uint32_t* max_protected_frame_size) { + size_t* max_protected_frame_size) { tsi_fake_frame_protector* impl = calloc(1, sizeof(tsi_fake_frame_protector)); if (impl == NULL) return NULL; impl->max_frame_size = (max_protected_frame_size == NULL) diff --git a/src/core/tsi/fake_transport_security.h b/src/core/tsi/fake_transport_security.h index a62fe81c095e4946b4a63f806c09e9cac11c6046..9e3480adfaa9c8c729615995a04f949091d2bec6 100644 --- a/src/core/tsi/fake_transport_security.h +++ b/src/core/tsi/fake_transport_security.h @@ -52,7 +52,7 @@ tsi_handshaker* tsi_create_fake_handshaker(int is_client); /* Creates a protector directly without going through the handshake phase. */ tsi_frame_protector* tsi_create_fake_protector( - uint32_t* max_protected_frame_size); + size_t* max_protected_frame_size); #ifdef __cplusplus } diff --git a/src/core/tsi/ssl_transport_security.c b/src/core/tsi/ssl_transport_security.c index c98071a9376203fa96b6a678f377cdc27da7d626..1159254a8c7659240be499522a42771c50cb31e5 100644 --- a/src/core/tsi/ssl_transport_security.c +++ b/src/core/tsi/ssl_transport_security.c @@ -76,9 +76,9 @@ typedef struct { associated with the contexts at the same index. */ SSL_CTX** ssl_contexts; tsi_peer* ssl_context_x509_subject_names; - uint32_t ssl_context_count; + size_t ssl_context_count; unsigned char* alpn_protocol_list; - uint32_t alpn_protocol_list_length; + size_t alpn_protocol_list_length; } tsi_ssl_server_handshaker_factory; typedef struct { @@ -95,8 +95,8 @@ typedef struct { BIO* into_ssl; BIO* from_ssl; unsigned char* buffer; - uint32_t buffer_size; - uint32_t buffer_offset; + size_t buffer_size; + size_t buffer_offset; } tsi_ssl_frame_protector; /* --- Library Initialization. ---*/ @@ -159,7 +159,7 @@ static void ssl_info_callback(const SSL* ssl, int where, int ret) { /* Gets the subject CN from an X509 cert. */ static tsi_result ssl_get_x509_common_name(X509* cert, unsigned char** utf8, - uint32_t* utf8_size) { + size_t* utf8_size) { int common_name_index = -1; X509_NAME_ENTRY* common_name_entry = NULL; ASN1_STRING* common_name_asn1 = NULL; @@ -200,7 +200,7 @@ static tsi_result ssl_get_x509_common_name(X509* cert, unsigned char** utf8, static tsi_result peer_property_from_x509_common_name( X509* cert, tsi_peer_property* property) { unsigned char* common_name; - uint32_t common_name_size; + size_t common_name_size; tsi_result result = ssl_get_x509_common_name(cert, &common_name, &common_name_size); if (result != TSI_OK) return result; @@ -266,7 +266,7 @@ static tsi_result peer_property_from_x509_subject_alt_names( static tsi_result peer_from_x509(X509* cert, int include_certificate_type, tsi_peer* peer) { /* TODO(jboeuf): Maybe add more properties. */ - uint32_t property_count = include_certificate_type ? 3 : 2; + size_t property_count = include_certificate_type ? 3 : 2; tsi_result result = tsi_construct_peer(property_count, peer); if (result != TSI_OK) return result; do { @@ -299,7 +299,7 @@ static void log_ssl_error_stack(void) { /* Performs an SSL_read and handle errors. */ static tsi_result do_ssl_read(SSL* ssl, unsigned char* unprotected_bytes, - uint32_t* unprotected_bytes_size) { + size_t* unprotected_bytes_size) { int read_from_ssl = SSL_read(ssl, unprotected_bytes, *unprotected_bytes_size); if (read_from_ssl == 0) { gpr_log(GPR_ERROR, "SSL_read returned 0 unexpectedly."); @@ -333,7 +333,7 @@ static tsi_result do_ssl_read(SSL* ssl, unsigned char* unprotected_bytes, /* Performs an SSL_write and handle errors. */ static tsi_result do_ssl_write(SSL* ssl, unsigned char* unprotected_bytes, - uint32_t unprotected_bytes_size) { + size_t unprotected_bytes_size) { int ssl_write_result = SSL_write(ssl, unprotected_bytes, unprotected_bytes_size); if (ssl_write_result < 0) { @@ -354,7 +354,7 @@ static tsi_result do_ssl_write(SSL* ssl, unsigned char* unprotected_bytes, /* Loads an in-memory PEM certificate chain into the SSL context. */ static tsi_result ssl_ctx_use_certificate_chain( SSL_CTX* context, const unsigned char* pem_cert_chain, - uint32_t pem_cert_chain_size) { + size_t pem_cert_chain_size) { tsi_result result = TSI_OK; X509* certificate = NULL; BIO* pem = BIO_new_mem_buf((void*)pem_cert_chain, pem_cert_chain_size); @@ -395,7 +395,7 @@ static tsi_result ssl_ctx_use_certificate_chain( /* Loads an in-memory PEM private key into the SSL context. */ static tsi_result ssl_ctx_use_private_key(SSL_CTX* context, const unsigned char* pem_key, - uint32_t pem_key_size) { + size_t pem_key_size) { tsi_result result = TSI_OK; EVP_PKEY* private_key = NULL; BIO* pem = BIO_new_mem_buf((void*)pem_key, pem_key_size); @@ -419,10 +419,10 @@ static tsi_result ssl_ctx_use_private_key(SSL_CTX* context, /* Loads in-memory PEM verification certs into the SSL context and optionally returns the verification cert names (root_names can be NULL). */ static tsi_result ssl_ctx_load_verification_certs( - SSL_CTX* context, const unsigned char* pem_roots, uint32_t pem_roots_size, + SSL_CTX* context, const unsigned char* pem_roots, size_t pem_roots_size, STACK_OF(X509_NAME) * *root_names) { tsi_result result = TSI_OK; - uint32_t num_roots = 0; + size_t num_roots = 0; X509* root = NULL; X509_NAME* root_name = NULL; BIO* pem = BIO_new_mem_buf((void*)pem_roots, pem_roots_size); @@ -485,8 +485,8 @@ static tsi_result ssl_ctx_load_verification_certs( cipher list and the ephemeral ECDH key. */ static tsi_result populate_ssl_context( SSL_CTX* context, const unsigned char* pem_private_key, - uint32_t pem_private_key_size, const unsigned char* pem_certificate_chain, - uint32_t pem_certificate_chain_size, const char* cipher_list) { + size_t pem_private_key_size, const unsigned char* pem_certificate_chain, + size_t pem_certificate_chain_size, const char* cipher_list) { tsi_result result = TSI_OK; if (pem_certificate_chain != NULL) { result = ssl_ctx_use_certificate_chain(context, pem_certificate_chain, @@ -522,7 +522,7 @@ static tsi_result populate_ssl_context( /* Extracts the CN and the SANs from an X509 cert as a peer object. */ static tsi_result extract_x509_subject_names_from_pem_cert( - const unsigned char* pem_cert, uint32_t pem_cert_size, tsi_peer* peer) { + const unsigned char* pem_cert, size_t pem_cert_size, tsi_peer* peer) { tsi_result result = TSI_OK; X509* cert = NULL; BIO* pem = BIO_new_mem_buf((void*)pem_cert, pem_cert_size); @@ -544,7 +544,7 @@ static tsi_result extract_x509_subject_names_from_pem_cert( static tsi_result build_alpn_protocol_name_list( const unsigned char** alpn_protocols, const unsigned char* alpn_protocols_lengths, uint16_t num_alpn_protocols, - unsigned char** protocol_name_list, uint32_t* protocol_name_list_length) { + unsigned char** protocol_name_list, size_t* protocol_name_list_length) { uint16_t i; unsigned char* current; *protocol_name_list = NULL; @@ -573,17 +573,18 @@ static tsi_result build_alpn_protocol_name_list( /* --- tsi_frame_protector methods implementation. ---*/ -static tsi_result ssl_protector_protect( - tsi_frame_protector* self, const unsigned char* unprotected_bytes, - uint32_t* unprotected_bytes_size, unsigned char* protected_output_frames, - uint32_t* protected_output_frames_size) { +static tsi_result ssl_protector_protect(tsi_frame_protector* self, + const unsigned char* unprotected_bytes, + size_t* unprotected_bytes_size, + unsigned char* protected_output_frames, + size_t* protected_output_frames_size) { tsi_ssl_frame_protector* impl = (tsi_ssl_frame_protector*)self; int read_from_ssl; - uint32_t available; + size_t available; tsi_result result = TSI_OK; /* First see if we have some pending data in the SSL BIO. */ - uint32_t pending_in_ssl = BIO_ctrl_pending(impl->from_ssl); + size_t pending_in_ssl = BIO_ctrl_pending(impl->from_ssl); if (pending_in_ssl > 0) { *unprotected_bytes_size = 0; read_from_ssl = BIO_read(impl->from_ssl, protected_output_frames, @@ -627,7 +628,7 @@ static tsi_result ssl_protector_protect( static tsi_result ssl_protector_protect_flush( tsi_frame_protector* self, unsigned char* protected_output_frames, - uint32_t* protected_output_frames_size, uint32_t* still_pending_size) { + size_t* protected_output_frames_size, size_t* still_pending_size) { tsi_result result = TSI_OK; tsi_ssl_frame_protector* impl = (tsi_ssl_frame_protector*)self; int read_from_ssl = 0; @@ -654,12 +655,12 @@ static tsi_result ssl_protector_protect_flush( static tsi_result ssl_protector_unprotect( tsi_frame_protector* self, const unsigned char* protected_frames_bytes, - uint32_t* protected_frames_bytes_size, unsigned char* unprotected_bytes, - uint32_t* unprotected_bytes_size) { + size_t* protected_frames_bytes_size, unsigned char* unprotected_bytes, + size_t* unprotected_bytes_size) { tsi_result result = TSI_OK; int written_into_ssl = 0; - uint32_t output_bytes_size = *unprotected_bytes_size; - uint32_t output_bytes_offset = 0; + size_t output_bytes_size = *unprotected_bytes_size; + size_t output_bytes_offset = 0; tsi_ssl_frame_protector* impl = (tsi_ssl_frame_protector*)self; /* First, try to read remaining data from ssl. */ @@ -707,8 +708,9 @@ static const tsi_frame_protector_vtable frame_protector_vtable = { /* --- tsi_handshaker methods implementation. ---*/ -static tsi_result ssl_handshaker_get_bytes_to_send_to_peer( - tsi_handshaker* self, unsigned char* bytes, uint32_t* bytes_size) { +static tsi_result ssl_handshaker_get_bytes_to_send_to_peer(tsi_handshaker* self, + unsigned char* bytes, + size_t* bytes_size) { tsi_ssl_handshaker* impl = (tsi_ssl_handshaker*)self; int bytes_read_from_ssl = 0; if (bytes == NULL || bytes_size == NULL || *bytes_size == 0 || @@ -725,7 +727,7 @@ static tsi_result ssl_handshaker_get_bytes_to_send_to_peer( return TSI_OK; } } - *bytes_size = (uint32_t)bytes_read_from_ssl; + *bytes_size = (size_t)bytes_read_from_ssl; return BIO_ctrl_pending(impl->from_ssl) == 0 ? TSI_OK : TSI_INCOMPLETE_DATA; } @@ -739,7 +741,7 @@ static tsi_result ssl_handshaker_get_result(tsi_handshaker* self) { } static tsi_result ssl_handshaker_process_bytes_from_peer( - tsi_handshaker* self, const unsigned char* bytes, uint32_t* bytes_size) { + tsi_handshaker* self, const unsigned char* bytes, size_t* bytes_size) { tsi_ssl_handshaker* impl = (tsi_ssl_handshaker*)self; int bytes_written_into_ssl_size = 0; if (bytes == NULL || bytes_size == 0 || *bytes_size > INT_MAX) { @@ -796,7 +798,7 @@ static tsi_result ssl_handshaker_extract_peer(tsi_handshaker* self, } SSL_get0_alpn_selected(impl->ssl, &alpn_selected, &alpn_selected_len); if (alpn_selected != NULL) { - uint32_t i; + size_t i; tsi_peer_property* new_properties = calloc(1, sizeof(tsi_peer_property) * (peer->property_count + 1)); if (new_properties == NULL) return TSI_OUT_OF_RESOURCES; @@ -818,9 +820,9 @@ static tsi_result ssl_handshaker_extract_peer(tsi_handshaker* self, } static tsi_result ssl_handshaker_create_frame_protector( - tsi_handshaker* self, uint32_t* max_output_protected_frame_size, + tsi_handshaker* self, size_t* max_output_protected_frame_size, tsi_frame_protector** protector) { - uint32_t actual_max_output_protected_frame_size = + size_t actual_max_output_protected_frame_size = TSI_SSL_MAX_PROTECTED_FRAME_SIZE_UPPER_BOUND; tsi_ssl_handshaker* impl = (tsi_ssl_handshaker*)self; tsi_ssl_frame_protector* protector_impl = @@ -871,8 +873,10 @@ static void ssl_handshaker_destroy(tsi_handshaker* self) { static const tsi_handshaker_vtable handshaker_vtable = { ssl_handshaker_get_bytes_to_send_to_peer, - ssl_handshaker_process_bytes_from_peer, ssl_handshaker_get_result, - ssl_handshaker_extract_peer, ssl_handshaker_create_frame_protector, + ssl_handshaker_process_bytes_from_peer, + ssl_handshaker_get_result, + ssl_handshaker_extract_peer, + ssl_handshaker_create_frame_protector, ssl_handshaker_destroy, }; @@ -993,7 +997,7 @@ static void ssl_server_handshaker_factory_destroy( tsi_ssl_handshaker_factory* self) { tsi_ssl_server_handshaker_factory* impl = (tsi_ssl_server_handshaker_factory*)self; - uint32_t i; + size_t i; for (i = 0; i < impl->ssl_context_count; i++) { if (impl->ssl_contexts[i] != NULL) { SSL_CTX_free(impl->ssl_contexts[i]); @@ -1008,7 +1012,7 @@ static void ssl_server_handshaker_factory_destroy( free(impl); } -static int does_entry_match_name(const char* entry, uint32_t entry_length, +static int does_entry_match_name(const char* entry, size_t entry_length, const char* name) { const char* name_subdomain = NULL; if (entry_length == 0) return 0; @@ -1035,7 +1039,7 @@ static int ssl_server_handshaker_factory_servername_callback(SSL* ssl, int* ap, void* arg) { tsi_ssl_server_handshaker_factory* impl = (tsi_ssl_server_handshaker_factory*)arg; - uint32_t i = 0; + size_t i = 0; const char* servername = SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name); if (servername == NULL || strlen(servername) == 0) { return SSL_TLSEXT_ERR_NOACK; @@ -1080,9 +1084,9 @@ static int server_handshaker_factory_alpn_callback( /* --- tsi_ssl_handshaker_factory constructors. --- */ tsi_result tsi_create_ssl_client_handshaker_factory( - const unsigned char* pem_private_key, uint32_t pem_private_key_size, - const unsigned char* pem_cert_chain, uint32_t pem_cert_chain_size, - const unsigned char* pem_root_certs, uint32_t pem_root_certs_size, + const unsigned char* pem_private_key, size_t pem_private_key_size, + const unsigned char* pem_cert_chain, size_t pem_cert_chain_size, + const unsigned char* pem_root_certs, size_t pem_root_certs_size, const char* cipher_list, const unsigned char** alpn_protocols, const unsigned char* alpn_protocols_lengths, uint16_t num_alpn_protocols, tsi_ssl_handshaker_factory** factory) { @@ -1115,7 +1119,7 @@ tsi_result tsi_create_ssl_client_handshaker_factory( if (num_alpn_protocols != 0) { unsigned char* alpn_protocol_list = NULL; - uint32_t alpn_protocol_list_length = 0; + size_t alpn_protocol_list_length = 0; int ssl_failed; result = build_alpn_protocol_name_list( alpn_protocols, alpn_protocols_lengths, num_alpn_protocols, @@ -1157,17 +1161,16 @@ tsi_result tsi_create_ssl_client_handshaker_factory( tsi_result tsi_create_ssl_server_handshaker_factory( const unsigned char** pem_private_keys, - const uint32_t* pem_private_keys_sizes, - const unsigned char** pem_cert_chains, - const uint32_t* pem_cert_chains_sizes, uint32_t key_cert_pair_count, + const size_t* pem_private_keys_sizes, const unsigned char** pem_cert_chains, + const size_t* pem_cert_chains_sizes, size_t key_cert_pair_count, const unsigned char* pem_client_root_certs, - uint32_t pem_client_root_certs_size, const char* cipher_list, + size_t pem_client_root_certs_size, const char* cipher_list, const unsigned char** alpn_protocols, const unsigned char* alpn_protocols_lengths, uint16_t num_alpn_protocols, tsi_ssl_handshaker_factory** factory) { tsi_ssl_server_handshaker_factory* impl = NULL; tsi_result result = TSI_OK; - uint32_t i = 0; + size_t i = 0; gpr_once_init(&init_openssl_once, init_openssl); @@ -1255,7 +1258,7 @@ tsi_result tsi_create_ssl_server_handshaker_factory( /* --- tsi_ssl utils. --- */ int tsi_ssl_peer_matches_name(const tsi_peer* peer, const char* name) { - uint32_t i = 0; + size_t i = 0; const tsi_peer_property* property = tsi_peer_get_property_by_name( peer, TSI_X509_SUBJECT_COMMON_NAME_PEER_PROPERTY); if (property == NULL || property->type != TSI_PEER_PROPERTY_TYPE_STRING) { diff --git a/src/core/tsi/ssl_transport_security.h b/src/core/tsi/ssl_transport_security.h index de2b1df7bf6b460cb43c3b6c8662d2ccecac9fb3..3a33deacac55871ce9f46001095df5c20a99e357 100644 --- a/src/core/tsi/ssl_transport_security.h +++ b/src/core/tsi/ssl_transport_security.h @@ -89,9 +89,9 @@ typedef struct tsi_ssl_handshaker_factory tsi_ssl_handshaker_factory; - This method returns TSI_OK on success or TSI_INVALID_PARAMETER in the case where a parameter is invalid. */ tsi_result tsi_create_ssl_client_handshaker_factory( - const unsigned char* pem_private_key, uint32_t pem_private_key_size, - const unsigned char* pem_cert_chain, uint32_t pem_cert_chain_size, - const unsigned char* pem_root_certs, uint32_t pem_root_certs_size, + const unsigned char* pem_private_key, size_t pem_private_key_size, + const unsigned char* pem_cert_chain, size_t pem_cert_chain_size, + const unsigned char* pem_root_certs, size_t pem_root_certs_size, const char* cipher_suites, const unsigned char** alpn_protocols, const unsigned char* alpn_protocols_lengths, uint16_t num_alpn_protocols, tsi_ssl_handshaker_factory** factory); @@ -132,11 +132,10 @@ tsi_result tsi_create_ssl_client_handshaker_factory( where a parameter is invalid. */ tsi_result tsi_create_ssl_server_handshaker_factory( const unsigned char** pem_private_keys, - const uint32_t* pem_private_keys_sizes, - const unsigned char** pem_cert_chains, - const uint32_t* pem_cert_chains_sizes, uint32_t key_cert_pair_count, + const size_t* pem_private_keys_sizes, const unsigned char** pem_cert_chains, + const size_t* pem_cert_chains_sizes, size_t key_cert_pair_count, const unsigned char* pem_client_root_certs, - uint32_t pem_client_root_certs_size, const char* cipher_suites, + size_t pem_client_root_certs_size, const char* cipher_suites, const unsigned char** alpn_protocols, const unsigned char* alpn_protocols_lengths, uint16_t num_alpn_protocols, tsi_ssl_handshaker_factory** factory); diff --git a/src/core/tsi/transport_security.c b/src/core/tsi/transport_security.c index 5a42f03f5f88450fb2d05a4bce2d25b8577b242e..fcf03eeb952caa4f5f4f69253d4e1eea649f633a 100644 --- a/src/core/tsi/transport_security.c +++ b/src/core/tsi/transport_security.c @@ -40,7 +40,7 @@ char* tsi_strdup(const char* src) { char* dst; - uint32_t len; + size_t len; if (!src) return NULL; len = strlen(src) + 1; dst = malloc(len); @@ -90,9 +90,9 @@ const char* tsi_result_to_string(tsi_result result) { tsi_result tsi_frame_protector_protect(tsi_frame_protector* self, const unsigned char* unprotected_bytes, - uint32_t* unprotected_bytes_size, + size_t* unprotected_bytes_size, unsigned char* protected_output_frames, - uint32_t* protected_output_frames_size) { + size_t* protected_output_frames_size) { if (self == NULL || unprotected_bytes == NULL || unprotected_bytes_size == NULL || protected_output_frames == NULL || protected_output_frames_size == NULL) { @@ -105,7 +105,7 @@ tsi_result tsi_frame_protector_protect(tsi_frame_protector* self, tsi_result tsi_frame_protector_protect_flush( tsi_frame_protector* self, unsigned char* protected_output_frames, - uint32_t* protected_output_frames_size, uint32_t* still_pending_size) { + size_t* protected_output_frames_size, size_t* still_pending_size) { if (self == NULL || protected_output_frames == NULL || protected_output_frames == NULL || still_pending_size == NULL) { return TSI_INVALID_ARGUMENT; @@ -117,8 +117,8 @@ tsi_result tsi_frame_protector_protect_flush( tsi_result tsi_frame_protector_unprotect( tsi_frame_protector* self, const unsigned char* protected_frames_bytes, - uint32_t* protected_frames_bytes_size, unsigned char* unprotected_bytes, - uint32_t* unprotected_bytes_size) { + size_t* protected_frames_bytes_size, unsigned char* unprotected_bytes, + size_t* unprotected_bytes_size) { if (self == NULL || protected_frames_bytes == NULL || protected_frames_bytes_size == NULL || unprotected_bytes == NULL || unprotected_bytes_size == NULL) { @@ -140,7 +140,7 @@ void tsi_frame_protector_destroy(tsi_frame_protector* self) { tsi_result tsi_handshaker_get_bytes_to_send_to_peer(tsi_handshaker* self, unsigned char* bytes, - uint32_t* bytes_size) { + size_t* bytes_size) { if (self == NULL) return TSI_INVALID_ARGUMENT; if (self->frame_protector_created) return TSI_FAILED_PRECONDITION; return self->vtable->get_bytes_to_send_to_peer(self, bytes, bytes_size); @@ -148,7 +148,7 @@ tsi_result tsi_handshaker_get_bytes_to_send_to_peer(tsi_handshaker* self, tsi_result tsi_handshaker_process_bytes_from_peer(tsi_handshaker* self, const unsigned char* bytes, - uint32_t* bytes_size) { + size_t* bytes_size) { if (self == NULL) return TSI_INVALID_ARGUMENT; if (self->frame_protector_created) return TSI_FAILED_PRECONDITION; return self->vtable->process_bytes_from_peer(self, bytes, bytes_size); @@ -171,7 +171,7 @@ tsi_result tsi_handshaker_extract_peer(tsi_handshaker* self, tsi_peer* peer) { } tsi_result tsi_handshaker_create_frame_protector( - tsi_handshaker* self, uint32_t* max_protected_frame_size, + tsi_handshaker* self, size_t* max_protected_frame_size, tsi_frame_protector** protector) { tsi_result result; if (self == NULL || protector == NULL) return TSI_INVALID_ARGUMENT; @@ -196,7 +196,7 @@ void tsi_handshaker_destroy(tsi_handshaker* self) { const tsi_peer_property* tsi_peer_get_property_by_name(const tsi_peer* self, const char* name) { - uint32_t i; + size_t i; if (self == NULL) return NULL; for (i = 0; i < self->property_count; i++) { const tsi_peer_property* property = &self->properties[i]; @@ -218,8 +218,8 @@ tsi_peer_property tsi_init_peer_property(void) { } static void tsi_peer_destroy_list_property(tsi_peer_property* children, - uint32_t child_count) { - uint32_t i; + size_t child_count) { + size_t i; for (i = 0; i < child_count; i++) { tsi_peer_property_destruct(&children[i]); } @@ -292,7 +292,7 @@ tsi_result tsi_construct_real_peer_property(const char* name, double value, } tsi_result tsi_construct_allocated_string_peer_property( - const char* name, uint32_t value_length, tsi_peer_property* property) { + const char* name, size_t value_length, tsi_peer_property* property) { *property = tsi_init_peer_property(); property->type = TSI_PEER_PROPERTY_TYPE_STRING; if (name != NULL) { @@ -318,7 +318,7 @@ tsi_result tsi_construct_string_peer_property_from_cstring( tsi_result tsi_construct_string_peer_property(const char* name, const char* value, - uint32_t value_length, + size_t value_length, tsi_peer_property* property) { tsi_result result = tsi_construct_allocated_string_peer_property( name, value_length, property); @@ -330,7 +330,7 @@ tsi_result tsi_construct_string_peer_property(const char* name, } tsi_result tsi_construct_list_peer_property(const char* name, - uint32_t child_count, + size_t child_count, tsi_peer_property* property) { *property = tsi_init_peer_property(); property->type = TSI_PEER_PROPERTY_TYPE_LIST; @@ -350,7 +350,7 @@ tsi_result tsi_construct_list_peer_property(const char* name, return TSI_OK; } -tsi_result tsi_construct_peer(uint32_t property_count, tsi_peer* peer) { +tsi_result tsi_construct_peer(size_t property_count, tsi_peer* peer) { memset(peer, 0, sizeof(tsi_peer)); if (property_count > 0) { peer->properties = calloc(property_count, sizeof(tsi_peer_property)); diff --git a/src/core/tsi/transport_security.h b/src/core/tsi/transport_security.h index 9a20fa83a5ff2555053a2a7b9163b266e1977c68..3a6ed5290b35dcd183c62484a3dc80860746387e 100644 --- a/src/core/tsi/transport_security.h +++ b/src/core/tsi/transport_security.h @@ -45,18 +45,18 @@ extern "C" { typedef struct { tsi_result (*protect)(tsi_frame_protector* self, const unsigned char* unprotected_bytes, - uint32_t* unprotected_bytes_size, + size_t* unprotected_bytes_size, unsigned char* protected_output_frames, - uint32_t* protected_output_frames_size); + size_t* protected_output_frames_size); tsi_result (*protect_flush)(tsi_frame_protector* self, unsigned char* protected_output_frames, - uint32_t* protected_output_frames_size, - uint32_t* still_pending_size); + size_t* protected_output_frames_size, + size_t* still_pending_size); tsi_result (*unprotect)(tsi_frame_protector* self, const unsigned char* protected_frames_bytes, - uint32_t* protected_frames_bytes_size, + size_t* protected_frames_bytes_size, unsigned char* unprotected_bytes, - uint32_t* unprotected_bytes_size); + size_t* unprotected_bytes_size); void (*destroy)(tsi_frame_protector* self); } tsi_frame_protector_vtable; @@ -69,14 +69,14 @@ struct tsi_frame_protector { typedef struct { tsi_result (*get_bytes_to_send_to_peer)(tsi_handshaker* self, unsigned char* bytes, - uint32_t* bytes_size); + size_t* bytes_size); tsi_result (*process_bytes_from_peer)(tsi_handshaker* self, const unsigned char* bytes, - uint32_t* bytes_size); + size_t* bytes_size); tsi_result (*get_result)(tsi_handshaker* self); tsi_result (*extract_peer)(tsi_handshaker* self, tsi_peer* peer); tsi_result (*create_frame_protector)(tsi_handshaker* self, - uint32_t* max_protected_frame_size, + size_t* max_protected_frame_size, tsi_frame_protector** protector); void (*destroy)(tsi_handshaker* self); } tsi_handshaker_vtable; @@ -87,7 +87,7 @@ struct tsi_handshaker { }; /* Peer and property construction/destruction functions. */ -tsi_result tsi_construct_peer(uint32_t property_count, tsi_peer* peer); +tsi_result tsi_construct_peer(size_t property_count, tsi_peer* peer); tsi_peer_property tsi_init_peer_property(void); void tsi_peer_property_destruct(tsi_peer_property* property); tsi_result tsi_construct_signed_integer_peer_property( @@ -98,14 +98,14 @@ tsi_result tsi_construct_real_peer_property(const char* name, double value, tsi_peer_property* property); tsi_result tsi_construct_string_peer_property(const char* name, const char* value, - uint32_t value_length, + size_t value_length, tsi_peer_property* property); tsi_result tsi_construct_allocated_string_peer_property( - const char* name, uint32_t value_length, tsi_peer_property* property); + const char* name, size_t value_length, tsi_peer_property* property); tsi_result tsi_construct_string_peer_property_from_cstring( const char* name, const char* value, tsi_peer_property* property); tsi_result tsi_construct_list_peer_property(const char* name, - uint32_t child_count, + size_t child_count, tsi_peer_property* property); /* Utils. */ diff --git a/src/core/tsi/transport_security_interface.h b/src/core/tsi/transport_security_interface.h index 76746a4b207e306f0daa84ea4b16d39e36633968..d180e90799a997b084e168d397c883d8260717ec 100644 --- a/src/core/tsi/transport_security_interface.h +++ b/src/core/tsi/transport_security_interface.h @@ -35,6 +35,7 @@ #define __TRANSPORT_SECURITY_INTERFACE_H_ #include <stdint.h> +#include <stdlib.h> #ifdef __cplusplus extern "C" { @@ -89,11 +90,11 @@ typedef struct tsi_frame_protector tsi_frame_protector; ------------------------------------------------------------------------ unsigned char protected_buffer[4096]; - uint32_t protected_buffer_size = sizeof(protected_buffer); + size_t protected_buffer_size = sizeof(protected_buffer); tsi_result result = TSI_OK; while (message_size > 0) { - uint32_t protected_buffer_size_to_send = protected_buffer_size; - uint32_t processed_message_size = message_size; + size_t protected_buffer_size_to_send = protected_buffer_size; + size_t processed_message_size = message_size; result = tsi_frame_protector_protect(protector, message_bytes, &processed_message_size, @@ -106,7 +107,7 @@ typedef struct tsi_frame_protector tsi_frame_protector; // Don't forget to flush. if (message_size == 0) { - uint32_t still_pending_size; + size_t still_pending_size; do { protected_buffer_size_to_send = protected_buffer_size; result = tsi_frame_protector_protect_flush( @@ -122,9 +123,9 @@ typedef struct tsi_frame_protector tsi_frame_protector; ------------------------------------------------------------------------ */ tsi_result tsi_frame_protector_protect(tsi_frame_protector* self, const unsigned char* unprotected_bytes, - uint32_t* unprotected_bytes_size, + size_t* unprotected_bytes_size, unsigned char* protected_output_frames, - uint32_t* protected_output_frames_size); + size_t* protected_output_frames_size); /* Indicates that we need to flush the bytes buffered in the protector and get the resulting frame. @@ -136,7 +137,7 @@ tsi_result tsi_frame_protector_protect(tsi_frame_protector* self, that still need to be flushed from the protector.*/ tsi_result tsi_frame_protector_protect_flush( tsi_frame_protector* self, unsigned char* protected_output_frames, - uint32_t* protected_output_frames_size, uint32_t* still_pending_size); + size_t* protected_output_frames_size, size_t* still_pending_size); /* Outputs unprotected bytes. - protected_frames_bytes is an input only parameter and points to the @@ -160,8 +161,8 @@ tsi_result tsi_frame_protector_protect_flush( protected_frames_size will be set to 0. */ tsi_result tsi_frame_protector_unprotect( tsi_frame_protector* self, const unsigned char* protected_frames_bytes, - uint32_t* protected_frames_bytes_size, unsigned char* unprotected_bytes, - uint32_t* unprotected_bytes_size); + size_t* protected_frames_bytes_size, unsigned char* unprotected_bytes, + size_t* unprotected_bytes_size); /* Destroys the tsi_frame_protector object. */ void tsi_frame_protector_destroy(tsi_frame_protector* self); @@ -194,18 +195,18 @@ typedef struct tsi_peer_property { double real; struct { char* data; - uint32_t length; + size_t length; } string; struct { struct tsi_peer_property* children; - uint32_t child_count; + size_t child_count; } list; } value; } tsi_peer_property; typedef struct { tsi_peer_property* properties; - uint32_t property_count; + size_t property_count; } tsi_peer; /* Gets the first property with the specified name. Iteration over the @@ -227,12 +228,12 @@ void tsi_peer_destruct(tsi_peer* self); ------------------------------------------------------------------------ tsi_result result = TSI_OK; unsigned char buf[4096]; - uint32_t buf_offset; - uint32_t buf_size; + size_t buf_offset; + size_t buf_size; while (1) { // See if we need to send some bytes to the peer. do { - uint32_t buf_size_to_send = sizeof(buf); + size_t buf_size_to_send = sizeof(buf); result = tsi_handshaker_get_bytes_to_send_to_peer(handshaker, buf, &buf_size_to_send); if (buf_size_to_send > 0) send_bytes_to_peer(buf, buf_size_to_send); @@ -250,7 +251,7 @@ void tsi_peer_destruct(tsi_peer* self); // Process the bytes from the peer. We have to be careful as these bytes // may contain non-handshake data (protected data). If this is the case, // we will exit from the loop with buf_size > 0. - uint32_t consumed_by_handshaker = buf_size; + size_t consumed_by_handshaker = buf_size; result = tsi_handshaker_process_bytes_from_peer( handshaker, buf, &consumed_by_handshaker); buf_size -= consumed_by_handshaker; @@ -300,7 +301,7 @@ typedef struct tsi_handshaker tsi_handshaker; error in the handshake, another specific error code is returned. */ tsi_result tsi_handshaker_get_bytes_to_send_to_peer(tsi_handshaker* self, unsigned char* bytes, - uint32_t* bytes_size); + size_t* bytes_size); /* Processes bytes received from the peer. - bytes is the buffer containing the data. @@ -313,7 +314,7 @@ tsi_result tsi_handshaker_get_bytes_to_send_to_peer(tsi_handshaker* self, returned. */ tsi_result tsi_handshaker_process_bytes_from_peer(tsi_handshaker* self, const unsigned char* bytes, - uint32_t* bytes_size); + size_t* bytes_size); /* Gets the result of the handshaker. Returns TSI_OK if the hanshake completed successfully and there has been no @@ -349,7 +350,7 @@ tsi_result tsi_handshaker_extract_peer(tsi_handshaker* self, tsi_peer* peer); the handshaker is not in a fatal error state. The caller is responsible for destroying the protector. */ tsi_result tsi_handshaker_create_frame_protector( - tsi_handshaker* self, uint32_t* max_output_protected_frame_size, + tsi_handshaker* self, size_t* max_output_protected_frame_size, tsi_frame_protector** protector); /* This method releases the tsi_handshaker object. After this method is called, diff --git a/src/cpp/client/channel.cc b/src/cpp/client/channel.cc index ddda8c22d6d5777275cc5d758b663de43394f601..a8919a10d9d0d4d899c7fd6dfec490ec0a5feae6 100644 --- a/src/cpp/client/channel.cc +++ b/src/cpp/client/channel.cc @@ -53,7 +53,7 @@ namespace grpc { -Channel::Channel(const grpc::string& target, const ChannelArguments& args) +Channel::Channel(const grpc::string &target, const ChannelArguments &args) : target_(target) { grpc_channel_args channel_args; args.SetChannelArgs(&channel_args); @@ -61,15 +61,15 @@ Channel::Channel(const grpc::string& target, const ChannelArguments& args) target_.c_str(), channel_args.num_args > 0 ? &channel_args : nullptr); } -Channel::Channel(const grpc::string& target, - const std::unique_ptr<Credentials>& creds, - const ChannelArguments& args) +Channel::Channel(const grpc::string &target, + const std::unique_ptr<Credentials> &creds, + const ChannelArguments &args) : target_(args.GetSslTargetNameOverride().empty() ? target : args.GetSslTargetNameOverride()) { grpc_channel_args channel_args; args.SetChannelArgs(&channel_args); - grpc_credentials* c_creds = creds ? creds->GetRawCreds() : nullptr; + grpc_credentials *c_creds = creds ? creds->GetRawCreds() : nullptr; c_channel_ = grpc_secure_channel_create( c_creds, target.c_str(), channel_args.num_args > 0 ? &channel_args : nullptr); @@ -79,9 +79,9 @@ Channel::~Channel() { grpc_channel_destroy(c_channel_); } namespace { // Pluck the finished event and set to status when it is not nullptr. -void GetFinalStatus(grpc_completion_queue* cq, void* finished_tag, - Status* status) { - grpc_event* ev = +void GetFinalStatus(grpc_completion_queue *cq, void *finished_tag, + Status *status) { + grpc_event *ev = grpc_completion_queue_pluck(cq, finished_tag, gpr_inf_future); if (status) { StatusCode error_code = static_cast<StatusCode>(ev->data.finished.status); @@ -94,23 +94,23 @@ void GetFinalStatus(grpc_completion_queue* cq, void* finished_tag, } // namespace // TODO(yangg) more error handling -Status Channel::StartBlockingRpc(const RpcMethod& method, - ClientContext* context, - const google::protobuf::Message& request, - google::protobuf::Message* result) { +Status Channel::StartBlockingRpc(const RpcMethod &method, + ClientContext *context, + const google::protobuf::Message &request, + google::protobuf::Message *result) { Status status; - grpc_call* call = grpc_channel_create_call( + grpc_call *call = grpc_channel_create_call( c_channel_, method.name(), target_.c_str(), context->RawDeadline()); context->set_call(call); - grpc_event* ev; - void* finished_tag = reinterpret_cast<char*>(call); - void* invoke_tag = reinterpret_cast<char*>(call) + 1; - void* metadata_read_tag = reinterpret_cast<char*>(call) + 2; - void* write_tag = reinterpret_cast<char*>(call) + 3; - void* halfclose_tag = reinterpret_cast<char*>(call) + 4; - void* read_tag = reinterpret_cast<char*>(call) + 5; + grpc_event *ev; + void *finished_tag = reinterpret_cast<char *>(call); + void *invoke_tag = reinterpret_cast<char *>(call) + 1; + void *metadata_read_tag = reinterpret_cast<char *>(call) + 2; + void *write_tag = reinterpret_cast<char *>(call) + 3; + void *halfclose_tag = reinterpret_cast<char *>(call) + 4; + void *read_tag = reinterpret_cast<char *>(call) + 5; - grpc_completion_queue* cq = grpc_completion_queue_create(); + grpc_completion_queue *cq = grpc_completion_queue_create(); context->set_cq(cq); // add_metadata from context // @@ -126,7 +126,7 @@ Status Channel::StartBlockingRpc(const RpcMethod& method, return status; } // write request - grpc_byte_buffer* write_buffer = nullptr; + grpc_byte_buffer *write_buffer = nullptr; success = SerializeProto(request, &write_buffer); if (!success) { grpc_call_cancel(call); @@ -172,14 +172,14 @@ Status Channel::StartBlockingRpc(const RpcMethod& method, return status; } -StreamContextInterface* Channel::CreateStream( - const RpcMethod& method, ClientContext* context, - const google::protobuf::Message* request, - google::protobuf::Message* result) { - grpc_call* call = grpc_channel_create_call( +StreamContextInterface *Channel::CreateStream( + const RpcMethod &method, ClientContext *context, + const google::protobuf::Message *request, + google::protobuf::Message *result) { + grpc_call *call = grpc_channel_create_call( c_channel_, method.name(), target_.c_str(), context->RawDeadline()); context->set_call(call); - grpc_completion_queue* cq = grpc_completion_queue_create(); + grpc_completion_queue *cq = grpc_completion_queue_create(); context->set_cq(cq); return new StreamContext(method, context, request, result); } diff --git a/src/cpp/client/channel.h b/src/cpp/client/channel.h index 8de1180ac29ae5103586d24fac99fbda288391bd..67d18bf4c890fbac886d2ae58b25963e53f8cd6f 100644 --- a/src/cpp/client/channel.h +++ b/src/cpp/client/channel.h @@ -48,24 +48,24 @@ class StreamContextInterface; class Channel : public ChannelInterface { public: - Channel(const grpc::string& target, const ChannelArguments& args); - Channel(const grpc::string& target, const std::unique_ptr<Credentials>& creds, - const ChannelArguments& args); + Channel(const grpc::string &target, const ChannelArguments &args); + Channel(const grpc::string &target, const std::unique_ptr<Credentials> &creds, + const ChannelArguments &args); ~Channel() override; - Status StartBlockingRpc(const RpcMethod& method, ClientContext* context, - const google::protobuf::Message& request, - google::protobuf::Message* result) override; + Status StartBlockingRpc(const RpcMethod &method, ClientContext *context, + const google::protobuf::Message &request, + google::protobuf::Message *result) override; - StreamContextInterface* CreateStream( - const RpcMethod& method, ClientContext* context, - const google::protobuf::Message* request, - google::protobuf::Message* result) override; + StreamContextInterface *CreateStream( + const RpcMethod &method, ClientContext *context, + const google::protobuf::Message *request, + google::protobuf::Message *result) override; private: const grpc::string target_; - grpc_channel* c_channel_; // owned + grpc_channel *c_channel_; // owned }; } // namespace grpc diff --git a/src/cpp/client/channel_arguments.cc b/src/cpp/client/channel_arguments.cc index eba9c1e76a74c798a68189ffb8018361b2f87876..70713f015f1a75e43e8de6478f08b0e712a5f0d1 100644 --- a/src/cpp/client/channel_arguments.cc +++ b/src/cpp/client/channel_arguments.cc @@ -37,7 +37,7 @@ namespace grpc { -void ChannelArguments::SetSslTargetNameOverride(const grpc::string& name) { +void ChannelArguments::SetSslTargetNameOverride(const grpc::string &name) { SetString(GRPC_SSL_TARGET_NAME_OVERRIDE_ARG, name); } @@ -50,32 +50,32 @@ grpc::string ChannelArguments::GetSslTargetNameOverride() const { return ""; } -void ChannelArguments::SetInt(const grpc::string& key, int value) { +void ChannelArguments::SetInt(const grpc::string &key, int value) { grpc_arg arg; arg.type = GRPC_ARG_INTEGER; strings_.push_back(key); - arg.key = const_cast<char*>(strings_.back().c_str()); + arg.key = const_cast<char *>(strings_.back().c_str()); arg.value.integer = value; args_.push_back(arg); } -void ChannelArguments::SetString(const grpc::string& key, - const grpc::string& value) { +void ChannelArguments::SetString(const grpc::string &key, + const grpc::string &value) { grpc_arg arg; arg.type = GRPC_ARG_STRING; strings_.push_back(key); - arg.key = const_cast<char*>(strings_.back().c_str()); + arg.key = const_cast<char *>(strings_.back().c_str()); strings_.push_back(value); - arg.value.string = const_cast<char*>(strings_.back().c_str()); + arg.value.string = const_cast<char *>(strings_.back().c_str()); args_.push_back(arg); } -void ChannelArguments::SetChannelArgs(grpc_channel_args* channel_args) const { +void ChannelArguments::SetChannelArgs(grpc_channel_args *channel_args) const { channel_args->num_args = args_.size(); if (channel_args->num_args > 0) { - channel_args->args = const_cast<grpc_arg*>(&args_[0]); + channel_args->args = const_cast<grpc_arg *>(&args_[0]); } } diff --git a/src/cpp/client/client_context.cc b/src/cpp/client/client_context.cc index 505b7d89b46a9925a5b01429d0bbe1f312f72f84..7bda2d07c317a03595d20eb309667a6d48fb21c4 100644 --- a/src/cpp/client/client_context.cc +++ b/src/cpp/client/client_context.cc @@ -50,7 +50,7 @@ ClientContext::~ClientContext() { if (cq_) { grpc_completion_queue_shutdown(cq_); // Drain cq_. - grpc_event* ev; + grpc_event *ev; grpc_completion_type t; do { ev = grpc_completion_queue_next(cq_, gpr_inf_future); @@ -62,7 +62,7 @@ ClientContext::~ClientContext() { } void ClientContext::set_absolute_deadline( - const system_clock::time_point& deadline) { + const system_clock::time_point &deadline) { Timepoint2Timespec(deadline, &absolute_deadline_); } @@ -70,8 +70,8 @@ system_clock::time_point ClientContext::absolute_deadline() { return Timespec2Timepoint(absolute_deadline_); } -void ClientContext::AddMetadata(const grpc::string& meta_key, - const grpc::string& meta_value) { +void ClientContext::AddMetadata(const grpc::string &meta_key, + const grpc::string &meta_value) { return; } diff --git a/src/cpp/client/create_channel.cc b/src/cpp/client/create_channel.cc index 1a88d7f2f19d3cfdb903e521def7f2f4363b859d..9cc5cff21485285c7766be5ed3a082a5ba3e5f24 100644 --- a/src/cpp/client/create_channel.cc +++ b/src/cpp/client/create_channel.cc @@ -40,14 +40,14 @@ namespace grpc { class ChannelArguments; -std::shared_ptr<ChannelInterface> CreateChannel(const grpc::string& target, - const ChannelArguments& args) { +std::shared_ptr<ChannelInterface> CreateChannel(const grpc::string &target, + const ChannelArguments &args) { return std::shared_ptr<ChannelInterface>(new Channel(target, args)); } std::shared_ptr<ChannelInterface> CreateChannel( - const grpc::string& target, const std::unique_ptr<Credentials>& creds, - const ChannelArguments& args) { + const grpc::string &target, const std::unique_ptr<Credentials> &creds, + const ChannelArguments &args) { return std::shared_ptr<ChannelInterface>(new Channel(target, creds, args)); } } // namespace grpc diff --git a/src/cpp/client/credentials.cc b/src/cpp/client/credentials.cc index d81cf9f4d0750d8a9534f945a342f1664f16d4f8..8e3a9884770cbf8cface579e13d57e5c2be1157c 100644 --- a/src/cpp/client/credentials.cc +++ b/src/cpp/client/credentials.cc @@ -40,40 +40,26 @@ namespace grpc { -Credentials::Credentials(grpc_credentials* c_creds) : creds_(c_creds) {} +Credentials::Credentials(grpc_credentials *c_creds) : creds_(c_creds) {} Credentials::~Credentials() { grpc_credentials_release(creds_); } -grpc_credentials* Credentials::GetRawCreds() { return creds_; } +grpc_credentials *Credentials::GetRawCreds() { return creds_; } std::unique_ptr<Credentials> CredentialsFactory::DefaultCredentials() { - grpc_credentials* c_creds = grpc_default_credentials_create(); + grpc_credentials *c_creds = grpc_default_credentials_create(); std::unique_ptr<Credentials> cpp_creds(new Credentials(c_creds)); return cpp_creds; } // Builds SSL Credentials given SSL specific options std::unique_ptr<Credentials> CredentialsFactory::SslCredentials( - const SslCredentialsOptions& options) { - const unsigned char* pem_root_certs = - options.pem_root_certs.empty() ? nullptr - : reinterpret_cast<const unsigned char*>( - options.pem_root_certs.c_str()); - if (pem_root_certs == nullptr) { - return std::unique_ptr<Credentials>(); - } - const unsigned char* pem_private_key = - options.pem_private_key.empty() ? nullptr - : reinterpret_cast<const unsigned char*>( - options.pem_private_key.c_str()); - const unsigned char* pem_cert_chain = - options.pem_cert_chain.empty() ? nullptr - : reinterpret_cast<const unsigned char*>( - options.pem_cert_chain.c_str()); + const SslCredentialsOptions &options) { + grpc_ssl_pem_key_cert_pair pem_key_cert_pair = { + options.pem_private_key.c_str(), options.pem_cert_chain.c_str()}; - grpc_credentials* c_creds = grpc_ssl_credentials_create( - pem_root_certs, options.pem_root_certs.size(), pem_private_key, - options.pem_private_key.size(), pem_cert_chain, - options.pem_cert_chain.size()); + grpc_credentials *c_creds = grpc_ssl_credentials_create( + options.pem_root_certs.empty() ? nullptr : options.pem_root_certs.c_str(), + options.pem_private_key.empty() ? nullptr : &pem_key_cert_pair); std::unique_ptr<Credentials> cpp_creds( c_creds == nullptr ? nullptr : new Credentials(c_creds)); return cpp_creds; @@ -81,7 +67,7 @@ std::unique_ptr<Credentials> CredentialsFactory::SslCredentials( // Builds credentials for use when running in GCE std::unique_ptr<Credentials> CredentialsFactory::ComputeEngineCredentials() { - grpc_credentials* c_creds = grpc_compute_engine_credentials_create(); + grpc_credentials *c_creds = grpc_compute_engine_credentials_create(); std::unique_ptr<Credentials> cpp_creds( c_creds == nullptr ? nullptr : new Credentials(c_creds)); return cpp_creds; @@ -89,11 +75,11 @@ std::unique_ptr<Credentials> CredentialsFactory::ComputeEngineCredentials() { // Builds service account credentials. std::unique_ptr<Credentials> CredentialsFactory::ServiceAccountCredentials( - const grpc::string& json_key, const grpc::string& scope, + const grpc::string &json_key, const grpc::string &scope, std::chrono::seconds token_lifetime) { gpr_timespec lifetime = gpr_time_from_seconds( token_lifetime.count() > 0 ? token_lifetime.count() : 0); - grpc_credentials* c_creds = grpc_service_account_credentials_create( + grpc_credentials *c_creds = grpc_service_account_credentials_create( json_key.c_str(), scope.c_str(), lifetime); std::unique_ptr<Credentials> cpp_creds( c_creds == nullptr ? nullptr : new Credentials(c_creds)); @@ -102,9 +88,9 @@ std::unique_ptr<Credentials> CredentialsFactory::ServiceAccountCredentials( // Builds IAM credentials. std::unique_ptr<Credentials> CredentialsFactory::IAMCredentials( - const grpc::string& authorization_token, - const grpc::string& authority_selector) { - grpc_credentials* c_creds = grpc_iam_credentials_create( + const grpc::string &authorization_token, + const grpc::string &authority_selector) { + grpc_credentials *c_creds = grpc_iam_credentials_create( authorization_token.c_str(), authority_selector.c_str()); std::unique_ptr<Credentials> cpp_creds( c_creds == nullptr ? nullptr : new Credentials(c_creds)); @@ -113,13 +99,13 @@ std::unique_ptr<Credentials> CredentialsFactory::IAMCredentials( // Combines two credentials objects into a composite credentials. std::unique_ptr<Credentials> CredentialsFactory::ComposeCredentials( - const std::unique_ptr<Credentials>& creds1, - const std::unique_ptr<Credentials>& creds2) { + const std::unique_ptr<Credentials> &creds1, + const std::unique_ptr<Credentials> &creds2) { // Note that we are not saving unique_ptrs to the two credentials // passed in here. This is OK because the underlying C objects (i.e., // creds1 and creds2) into grpc_composite_credentials_create will see their // refcounts incremented. - grpc_credentials* c_creds = grpc_composite_credentials_create( + grpc_credentials *c_creds = grpc_composite_credentials_create( creds1->GetRawCreds(), creds2->GetRawCreds()); std::unique_ptr<Credentials> cpp_creds( c_creds == nullptr ? nullptr : new Credentials(c_creds)); diff --git a/src/cpp/proto/proto_utils.cc b/src/cpp/proto/proto_utils.cc index 3b94dc3c07f4ac06c02a900c5b7f15e234f0fa72..85f859b9eb54bdc1708729a82b4299afac14c8fc 100644 --- a/src/cpp/proto/proto_utils.cc +++ b/src/cpp/proto/proto_utils.cc @@ -40,8 +40,8 @@ namespace grpc { -bool SerializeProto(const google::protobuf::Message& msg, - grpc_byte_buffer** bp) { +bool SerializeProto(const google::protobuf::Message &msg, + grpc_byte_buffer **bp) { grpc::string msg_str; bool success = msg.SerializeToString(&msg_str); if (success) { @@ -53,13 +53,13 @@ bool SerializeProto(const google::protobuf::Message& msg, return success; } -bool DeserializeProto(grpc_byte_buffer* buffer, - google::protobuf::Message* msg) { +bool DeserializeProto(grpc_byte_buffer *buffer, + google::protobuf::Message *msg) { grpc::string msg_string; - grpc_byte_buffer_reader* reader = grpc_byte_buffer_reader_create(buffer); + grpc_byte_buffer_reader *reader = grpc_byte_buffer_reader_create(buffer); gpr_slice slice; while (grpc_byte_buffer_reader_next(reader, &slice)) { - const char* data = reinterpret_cast<const char*>( + const char *data = reinterpret_cast<const char *>( slice.refcount ? slice.data.refcounted.bytes : slice.data.inlined.bytes); msg_string.append(data, slice.refcount ? slice.data.refcounted.length diff --git a/src/cpp/proto/proto_utils.h b/src/cpp/proto/proto_utils.h index ea472f9c518659e6a4ff40c59018e08593e44fac..a611a227fa7468b1a6c72f016d622b67ce096941 100644 --- a/src/cpp/proto/proto_utils.h +++ b/src/cpp/proto/proto_utils.h @@ -46,11 +46,11 @@ namespace grpc { // Serialize the msg into a buffer created inside the function. The caller // should destroy the returned buffer when done with it. If serialization fails, // false is returned and buffer is left unchanged. -bool SerializeProto(const google::protobuf::Message& msg, - grpc_byte_buffer** buffer); +bool SerializeProto(const google::protobuf::Message &msg, + grpc_byte_buffer **buffer); // The caller keeps ownership of buffer and msg. -bool DeserializeProto(grpc_byte_buffer* buffer, google::protobuf::Message* msg); +bool DeserializeProto(grpc_byte_buffer *buffer, google::protobuf::Message *msg); } // namespace grpc diff --git a/src/cpp/server/async_server.cc b/src/cpp/server/async_server.cc index aae2c8205040a9f5c96dd05aca128e3ff8364779..d576201b11fedd20f85cdad76748fdfe0a05b6ea 100644 --- a/src/cpp/server/async_server.cc +++ b/src/cpp/server/async_server.cc @@ -39,7 +39,7 @@ namespace grpc { -AsyncServer::AsyncServer(CompletionQueue* cc) +AsyncServer::AsyncServer(CompletionQueue *cc) : started_(false), shutdown_(false) { server_ = grpc_server_create(cc->cq(), nullptr); } @@ -53,7 +53,7 @@ AsyncServer::~AsyncServer() { grpc_server_destroy(server_); } -void AsyncServer::AddPort(const grpc::string& addr) { +void AsyncServer::AddPort(const grpc::string &addr) { GPR_ASSERT(!started_); int success = grpc_server_add_http2_port(server_, addr.c_str()); GPR_ASSERT(success); diff --git a/src/cpp/server/async_server_context.cc b/src/cpp/server/async_server_context.cc index 298936dec9c4d54159bcf4238a7dc2b2aad164bf..92958111c0c7e26d02a3be3d3e3ce85b67ff5ddf 100644 --- a/src/cpp/server/async_server_context.cc +++ b/src/cpp/server/async_server_context.cc @@ -42,7 +42,7 @@ namespace grpc { AsyncServerContext::AsyncServerContext( - grpc_call* call, const grpc::string& method, const grpc::string& host, + grpc_call *call, const grpc::string &method, const grpc::string &host, system_clock::time_point absolute_deadline) : method_(method), host_(host), @@ -52,21 +52,21 @@ AsyncServerContext::AsyncServerContext( AsyncServerContext::~AsyncServerContext() { grpc_call_destroy(call_); } -void AsyncServerContext::Accept(grpc_completion_queue* cq) { +void AsyncServerContext::Accept(grpc_completion_queue *cq) { GPR_ASSERT(grpc_call_server_accept(call_, cq, this) == GRPC_CALL_OK); GPR_ASSERT(grpc_call_server_end_initial_metadata(call_, 0) == GRPC_CALL_OK); } -bool AsyncServerContext::StartRead(google::protobuf::Message* request) { +bool AsyncServerContext::StartRead(google::protobuf::Message *request) { GPR_ASSERT(request); request_ = request; grpc_call_error err = grpc_call_start_read(call_, this); return err == GRPC_CALL_OK; } -bool AsyncServerContext::StartWrite(const google::protobuf::Message& response, +bool AsyncServerContext::StartWrite(const google::protobuf::Message &response, int flags) { - grpc_byte_buffer* buffer = nullptr; + grpc_byte_buffer *buffer = nullptr; if (!SerializeProto(response, &buffer)) { return false; } @@ -75,16 +75,16 @@ bool AsyncServerContext::StartWrite(const google::protobuf::Message& response, return err == GRPC_CALL_OK; } -bool AsyncServerContext::StartWriteStatus(const Status& status) { +bool AsyncServerContext::StartWriteStatus(const Status &status) { grpc_call_error err = grpc_call_start_write_status( call_, static_cast<grpc_status_code>(status.code()), status.details().empty() ? nullptr - : const_cast<char*>(status.details().c_str()), + : const_cast<char *>(status.details().c_str()), this); return err == GRPC_CALL_OK; } -bool AsyncServerContext::ParseRead(grpc_byte_buffer* read_buffer) { +bool AsyncServerContext::ParseRead(grpc_byte_buffer *read_buffer) { GPR_ASSERT(request_); bool success = DeserializeProto(read_buffer, request_); request_ = nullptr; diff --git a/src/cpp/server/completion_queue.cc b/src/cpp/server/completion_queue.cc index 56d165c9a6855a9903d7637c6a11679cdfe0bfa2..102a81bf0ebcfdd0a1d4c2acdd4f7e0163e3b583 100644 --- a/src/cpp/server/completion_queue.cc +++ b/src/cpp/server/completion_queue.cc @@ -48,8 +48,8 @@ CompletionQueue::~CompletionQueue() { grpc_completion_queue_destroy(cq_); } void CompletionQueue::Shutdown() { grpc_completion_queue_shutdown(cq_); } -CompletionQueue::CompletionType CompletionQueue::Next(void** tag) { - grpc_event* ev; +CompletionQueue::CompletionType CompletionQueue::Next(void **tag) { + grpc_event *ev; CompletionType return_type; bool success; @@ -65,8 +65,8 @@ CompletionQueue::CompletionType CompletionQueue::Next(void** tag) { case GRPC_READ: *tag = ev->tag; if (ev->data.read) { - success = - static_cast<AsyncServerContext*>(ev->tag)->ParseRead(ev->data.read); + success = static_cast<AsyncServerContext *>(ev->tag) + ->ParseRead(ev->data.read); return_type = success ? SERVER_READ_OK : SERVER_READ_ERROR; } else { return_type = SERVER_READ_ERROR; diff --git a/src/cpp/server/server.cc b/src/cpp/server/server.cc index d85748eea44b251300151e5e6f1d704ee34d07f2..193688e743ecde14b1b21d49f3fcd7149a41340b 100644 --- a/src/cpp/server/server.cc +++ b/src/cpp/server/server.cc @@ -49,7 +49,7 @@ namespace grpc { // TODO(rocking): consider a better default value like num of cores. static const int kNumThreads = 4; -Server::Server(ThreadPoolInterface* thread_pool, ServerCredentials* creds) +Server::Server(ThreadPoolInterface *thread_pool, ServerCredentials *creds) : started_(false), shutdown_(false), num_running_cb_(0), @@ -82,14 +82,14 @@ Server::~Server() { } } -void Server::RegisterService(RpcService* service) { +void Server::RegisterService(RpcService *service) { for (int i = 0; i < service->GetMethodCount(); ++i) { - RpcServiceMethod* method = service->GetMethod(i); + RpcServiceMethod *method = service->GetMethod(i); method_map_.insert(std::make_pair(method->name(), method)); } } -void Server::AddPort(const grpc::string& addr) { +void Server::AddPort(const grpc::string &addr) { GPR_ASSERT(!started_); int success; if (secure_) { @@ -131,7 +131,7 @@ void Server::Shutdown() { // Shutdown the completion queue. cq_.Shutdown(); - void* tag = nullptr; + void *tag = nullptr; CompletionQueue::CompletionType t = cq_.Next(&tag); GPR_ASSERT(t == CompletionQueue::QUEUE_CLOSED); } @@ -147,18 +147,18 @@ void Server::ScheduleCallback() { void Server::RunRpc() { // Wait for one more incoming rpc. - void* tag = nullptr; + void *tag = nullptr; AllowOneRpc(); CompletionQueue::CompletionType t = cq_.Next(&tag); GPR_ASSERT(t == CompletionQueue::SERVER_RPC_NEW); - AsyncServerContext* server_context = static_cast<AsyncServerContext*>(tag); + AsyncServerContext *server_context = static_cast<AsyncServerContext *>(tag); // server_context could be nullptr during server shutdown. if (server_context != nullptr) { // Schedule a new callback to handle more rpcs. ScheduleCallback(); - RpcServiceMethod* method = nullptr; + RpcServiceMethod *method = nullptr; auto iter = method_map_.find(server_context->method()); if (iter != method_map_.end()) { method = iter->second; diff --git a/src/cpp/server/server_builder.cc b/src/cpp/server/server_builder.cc index d74d8cb65f2feedb839c87faf10dfe3ac149a419..add22cc3d868530036670ae0a2ebf0166a2e668c 100644 --- a/src/cpp/server/server_builder.cc +++ b/src/cpp/server/server_builder.cc @@ -40,30 +40,30 @@ namespace grpc { ServerBuilder::ServerBuilder() : thread_pool_(nullptr) {} -void ServerBuilder::RegisterService(RpcService* service) { +void ServerBuilder::RegisterService(RpcService *service) { services_.push_back(service); } -void ServerBuilder::AddPort(const grpc::string& addr) { +void ServerBuilder::AddPort(const grpc::string &addr) { ports_.push_back(addr); } void ServerBuilder::SetCredentials( - const std::shared_ptr<ServerCredentials>& creds) { + const std::shared_ptr<ServerCredentials> &creds) { GPR_ASSERT(!creds_); creds_ = creds; } -void ServerBuilder::SetThreadPool(ThreadPoolInterface* thread_pool) { +void ServerBuilder::SetThreadPool(ThreadPoolInterface *thread_pool) { thread_pool_ = thread_pool; } std::unique_ptr<Server> ServerBuilder::BuildAndStart() { std::unique_ptr<Server> server(new Server(thread_pool_, creds_.get())); - for (auto* service : services_) { + for (auto *service : services_) { server->RegisterService(service); } - for (auto& port : ports_) { + for (auto &port : ports_) { server->AddPort(port); } server->Start(); diff --git a/src/cpp/server/server_credentials.cc b/src/cpp/server/server_credentials.cc index 5d899b1cd947ebc1f54596746998eef6964fe6a2..ce0271b6a0aa6c48a94aae25e6e95cf239f6d89a 100644 --- a/src/cpp/server/server_credentials.cc +++ b/src/cpp/server/server_credentials.cc @@ -37,34 +37,25 @@ namespace grpc { -ServerCredentials::ServerCredentials(grpc_server_credentials* c_creds) +ServerCredentials::ServerCredentials(grpc_server_credentials *c_creds) : creds_(c_creds) {} ServerCredentials::~ServerCredentials() { grpc_server_credentials_release(creds_); } -grpc_server_credentials* ServerCredentials::GetRawCreds() { return creds_; } +grpc_server_credentials *ServerCredentials::GetRawCreds() { return creds_; } std::shared_ptr<ServerCredentials> ServerCredentialsFactory::SslCredentials( - const SslServerCredentialsOptions& options) { - const unsigned char* pem_root_certs = - options.pem_root_certs.empty() ? nullptr - : reinterpret_cast<const unsigned char*>( - options.pem_root_certs.c_str()); - const unsigned char* pem_private_key = - options.pem_private_key.empty() ? nullptr - : reinterpret_cast<const unsigned char*>( - options.pem_private_key.c_str()); - const unsigned char* pem_cert_chain = - options.pem_cert_chain.empty() ? nullptr - : reinterpret_cast<const unsigned char*>( - options.pem_cert_chain.c_str()); - - grpc_server_credentials* c_creds = grpc_ssl_server_credentials_create( - pem_root_certs, options.pem_root_certs.size(), pem_private_key, - options.pem_private_key.size(), pem_cert_chain, - options.pem_cert_chain.size()); + const SslServerCredentialsOptions &options) { + std::vector<grpc_ssl_pem_key_cert_pair> pem_key_cert_pairs; + for (const auto &key_cert_pair : options.pem_key_cert_pairs) { + pem_key_cert_pairs.push_back( + {key_cert_pair.private_key.c_str(), key_cert_pair.cert_chain.c_str()}); + } + grpc_server_credentials *c_creds = grpc_ssl_server_credentials_create( + options.pem_root_certs.empty() ? nullptr : options.pem_root_certs.c_str(), + &pem_key_cert_pairs[0], pem_key_cert_pairs.size()); return std::shared_ptr<ServerCredentials>(new ServerCredentials(c_creds)); } diff --git a/src/cpp/server/server_rpc_handler.cc b/src/cpp/server/server_rpc_handler.cc index 42f8b755b66e70b03f7e9f44268d38ded69ce1fc..061ac1c2f397e93f98e1dd120a16c89d41f8f828 100644 --- a/src/cpp/server/server_rpc_handler.cc +++ b/src/cpp/server/server_rpc_handler.cc @@ -41,8 +41,8 @@ namespace grpc { -ServerRpcHandler::ServerRpcHandler(AsyncServerContext* async_server_context, - RpcServiceMethod* method) +ServerRpcHandler::ServerRpcHandler(AsyncServerContext *async_server_context, + RpcServiceMethod *method) : async_server_context_(async_server_context), method_(method) {} void ServerRpcHandler::StartRpc() { @@ -71,7 +71,7 @@ void ServerRpcHandler::StartRpc() { GPR_ASSERT(type == CompletionQueue::SERVER_READ_OK); // Run the application's rpc handler - MethodHandler* handler = method_->handler(); + MethodHandler *handler = method_->handler(); Status status = handler->RunHandler(MethodHandler::HandlerParameter( &user_context, request.get(), response.get())); @@ -97,7 +97,7 @@ void ServerRpcHandler::StartRpc() { cq_.cq(), request.get(), response.get()); // Run the application's rpc handler - MethodHandler* handler = method_->handler(); + MethodHandler *handler = method_->handler(); Status status = handler->RunHandler(MethodHandler::HandlerParameter( &user_context, request.get(), response.get(), &stream_context)); if (status.IsOk() && @@ -110,17 +110,17 @@ void ServerRpcHandler::StartRpc() { } CompletionQueue::CompletionType ServerRpcHandler::WaitForNextEvent() { - void* tag = nullptr; + void *tag = nullptr; CompletionQueue::CompletionType type = cq_.Next(&tag); if (type != CompletionQueue::QUEUE_CLOSED && type != CompletionQueue::RPC_END) { - GPR_ASSERT(static_cast<AsyncServerContext*>(tag) == + GPR_ASSERT(static_cast<AsyncServerContext *>(tag) == async_server_context_.get()); } return type; } -void ServerRpcHandler::FinishRpc(const Status& status) { +void ServerRpcHandler::FinishRpc(const Status &status) { async_server_context_->StartWriteStatus(status); CompletionQueue::CompletionType type; diff --git a/src/cpp/server/server_rpc_handler.h b/src/cpp/server/server_rpc_handler.h index 249576d504a35c9e9ba66e6e8453e5699c221cbc..a43e07dc5f9bfdbf1b93285703b34fc7b1fa26f2 100644 --- a/src/cpp/server/server_rpc_handler.h +++ b/src/cpp/server/server_rpc_handler.h @@ -47,17 +47,17 @@ class RpcServiceMethod; class ServerRpcHandler { public: // Takes ownership of async_server_context. - ServerRpcHandler(AsyncServerContext* async_server_context, - RpcServiceMethod* method); + ServerRpcHandler(AsyncServerContext *async_server_context, + RpcServiceMethod *method); void StartRpc(); private: CompletionQueue::CompletionType WaitForNextEvent(); - void FinishRpc(const Status& status); + void FinishRpc(const Status &status); std::unique_ptr<AsyncServerContext> async_server_context_; - RpcServiceMethod* method_; + RpcServiceMethod *method_; CompletionQueue cq_; }; diff --git a/src/cpp/server/thread_pool.cc b/src/cpp/server/thread_pool.cc index ce364c4795515489b57c59f7809022bd5ae61986..a46d4c64d255bee302260e694297cbd258739961 100644 --- a/src/cpp/server/thread_pool.cc +++ b/src/cpp/server/thread_pool.cc @@ -63,12 +63,12 @@ ThreadPool::~ThreadPool() { shutdown_ = true; cv_.notify_all(); } - for (auto& t : threads_) { + for (auto &t : threads_) { t.join(); } } -void ThreadPool::ScheduleCallback(const std::function<void()>& callback) { +void ThreadPool::ScheduleCallback(const std::function<void()> &callback) { std::lock_guard<std::mutex> lock(mu_); callbacks_.push(callback); cv_.notify_all(); diff --git a/src/cpp/server/thread_pool.h b/src/cpp/server/thread_pool.h index 6fc71d6695b3bdf8857bd48475b5982c5af16c2e..c53f7a7517a3fe79202baf030d39057a90cf5df0 100644 --- a/src/cpp/server/thread_pool.h +++ b/src/cpp/server/thread_pool.h @@ -49,7 +49,7 @@ class ThreadPool : public ThreadPoolInterface { explicit ThreadPool(int num_threads); ~ThreadPool(); - void ScheduleCallback(const std::function<void()>& callback) final; + void ScheduleCallback(const std::function<void()> &callback) final; private: std::mutex mu_; diff --git a/src/cpp/stream/stream_context.cc b/src/cpp/stream/stream_context.cc index 5ccf8c9682880d7c4c22eb831084507f1122a976..e64010be64f087fe8670cc68cf9636738800cd0d 100644 --- a/src/cpp/stream/stream_context.cc +++ b/src/cpp/stream/stream_context.cc @@ -44,14 +44,14 @@ namespace grpc { // Client only ctor -StreamContext::StreamContext(const RpcMethod& method, ClientContext* context, - const google::protobuf::Message* request, - google::protobuf::Message* result) +StreamContext::StreamContext(const RpcMethod &method, ClientContext *context, + const google::protobuf::Message *request, + google::protobuf::Message *result) : is_client_(true), method_(&method), call_(context->call()), cq_(context->cq()), - request_(const_cast<google::protobuf::Message*>(request)), + request_(const_cast<google::protobuf::Message *>(request)), result_(result), peer_halfclosed_(false), self_halfclosed_(false) { @@ -59,10 +59,10 @@ StreamContext::StreamContext(const RpcMethod& method, ClientContext* context, } // Server only ctor -StreamContext::StreamContext(const RpcMethod& method, grpc_call* call, - grpc_completion_queue* cq, - google::protobuf::Message* request, - google::protobuf::Message* result) +StreamContext::StreamContext(const RpcMethod &method, grpc_call *call, + grpc_completion_queue *cq, + google::protobuf::Message *request, + google::protobuf::Message *result) : is_client_(false), method_(&method), call_(call), @@ -84,7 +84,7 @@ void StreamContext::Start(bool buffered) { client_metadata_read_tag(), finished_tag(), flag); GPR_ASSERT(GRPC_CALL_OK == error); - grpc_event* invoke_ev = + grpc_event *invoke_ev = grpc_completion_queue_pluck(cq(), invoke_tag(), gpr_inf_future); if (invoke_ev->data.invoke_accepted != GRPC_OP_OK) { peer_halfclosed_ = true; @@ -101,11 +101,11 @@ void StreamContext::Start(bool buffered) { } } -bool StreamContext::Read(google::protobuf::Message* msg) { +bool StreamContext::Read(google::protobuf::Message *msg) { // TODO(yangg) check peer_halfclosed_ here for possible early return. grpc_call_error err = grpc_call_start_read(call(), read_tag()); GPR_ASSERT(err == GRPC_CALL_OK); - grpc_event* read_ev = + grpc_event *read_ev = grpc_completion_queue_pluck(cq(), read_tag(), gpr_inf_future); GPR_ASSERT(read_ev->type == GRPC_READ); bool ret = true; @@ -123,13 +123,13 @@ bool StreamContext::Read(google::protobuf::Message* msg) { return ret; } -bool StreamContext::Write(const google::protobuf::Message* msg, bool is_last) { +bool StreamContext::Write(const google::protobuf::Message *msg, bool is_last) { // TODO(yangg) check self_halfclosed_ for possible early return. bool ret = true; - grpc_event* ev = nullptr; + grpc_event *ev = nullptr; if (msg) { - grpc_byte_buffer* out_buf = nullptr; + grpc_byte_buffer *out_buf = nullptr; if (!SerializeProto(*msg, &out_buf)) { grpc_call_cancel_with_status(call(), GRPC_STATUS_INVALID_ARGUMENT, "Failed to serialize outgoing proto"); @@ -163,16 +163,16 @@ bool StreamContext::Write(const google::protobuf::Message* msg, bool is_last) { return ret; } -const Status& StreamContext::Wait() { +const Status &StreamContext::Wait() { // TODO(yangg) properly support metadata - grpc_event* metadata_ev = grpc_completion_queue_pluck( + grpc_event *metadata_ev = grpc_completion_queue_pluck( cq(), client_metadata_read_tag(), gpr_inf_future); grpc_event_finish(metadata_ev); // TODO(yangg) protect states by a mutex, including other places. if (!self_halfclosed_ || !peer_halfclosed_) { Cancel(); } - grpc_event* finish_ev = + grpc_event *finish_ev = grpc_completion_queue_pluck(cq(), finished_tag(), gpr_inf_future); GPR_ASSERT(finish_ev->type == GRPC_FINISHED); final_status_ = Status( diff --git a/src/cpp/stream/stream_context.h b/src/cpp/stream/stream_context.h index 4781f27a77f35c08701f40b3102afdc607d41e22..8697d86e83053825a7d53c05e66721f810f8ef98 100644 --- a/src/cpp/stream/stream_context.h +++ b/src/cpp/stream/stream_context.h @@ -50,43 +50,45 @@ class RpcMethod; class StreamContext final : public StreamContextInterface { public: - StreamContext(const RpcMethod& method, ClientContext* context, - const google::protobuf::Message* request, - google::protobuf::Message* result); - StreamContext(const RpcMethod& method, grpc_call* call, - grpc_completion_queue* cq, google::protobuf::Message* request, - google::protobuf::Message* result); + StreamContext(const RpcMethod &method, ClientContext *context, + const google::protobuf::Message *request, + google::protobuf::Message *result); + StreamContext(const RpcMethod &method, grpc_call *call, + grpc_completion_queue *cq, google::protobuf::Message *request, + google::protobuf::Message *result); ~StreamContext(); // Start the stream, if there is a final write following immediately, set // buffered so that the messages can be sent in batch. void Start(bool buffered) override; - bool Read(google::protobuf::Message* msg) override; - bool Write(const google::protobuf::Message* msg, bool is_last) override; - const Status& Wait() override; + bool Read(google::protobuf::Message *msg) override; + bool Write(const google::protobuf::Message *msg, bool is_last) override; + const Status &Wait() override; void Cancel() override; - google::protobuf::Message* request() override { return request_; } - google::protobuf::Message* response() override { return result_; } + google::protobuf::Message *request() override { return request_; } + google::protobuf::Message *response() override { return result_; } private: // Unique tags for plucking events from the c layer. this pointer is casted // to char* to create single byte step between tags. It implicitly relies on // that StreamContext is large enough to contain all the pointers. - void* finished_tag() { return reinterpret_cast<char*>(this); } - void* read_tag() { return reinterpret_cast<char*>(this) + 1; } - void* write_tag() { return reinterpret_cast<char*>(this) + 2; } - void* halfclose_tag() { return reinterpret_cast<char*>(this) + 3; } - void* invoke_tag() { return reinterpret_cast<char*>(this) + 4; } - void* client_metadata_read_tag() { return reinterpret_cast<char*>(this) + 5; } - grpc_call* call() { return call_; } - grpc_completion_queue* cq() { return cq_; } + void *finished_tag() { return reinterpret_cast<char *>(this); } + void *read_tag() { return reinterpret_cast<char *>(this) + 1; } + void *write_tag() { return reinterpret_cast<char *>(this) + 2; } + void *halfclose_tag() { return reinterpret_cast<char *>(this) + 3; } + void *invoke_tag() { return reinterpret_cast<char *>(this) + 4; } + void *client_metadata_read_tag() { + return reinterpret_cast<char *>(this) + 5; + } + grpc_call *call() { return call_; } + grpc_completion_queue *cq() { return cq_; } bool is_client_; - const RpcMethod* method_; // not owned - grpc_call* call_; // not owned - grpc_completion_queue* cq_; // not owned - google::protobuf::Message* request_; // first request, not owned - google::protobuf::Message* result_; // last response, not owned + const RpcMethod *method_; // not owned + grpc_call *call_; // not owned + grpc_completion_queue *cq_; // not owned + google::protobuf::Message *request_; // first request, not owned + google::protobuf::Message *result_; // last response, not owned bool peer_halfclosed_; bool self_halfclosed_; diff --git a/src/cpp/util/status.cc b/src/cpp/util/status.cc index e7ca41b752354be860bd81d10ac1b46cedd4caf6..1ca12d0ae900fe9a0bfc71cdca9cc464939f0a12 100644 --- a/src/cpp/util/status.cc +++ b/src/cpp/util/status.cc @@ -35,7 +35,7 @@ namespace grpc { -const Status& Status::OK = Status(); -const Status& Status::Cancelled = Status(StatusCode::CANCELLED); +const Status &Status::OK = Status(); +const Status &Status::Cancelled = Status(StatusCode::CANCELLED); } // namespace grpc diff --git a/src/cpp/util/time.cc b/src/cpp/util/time.cc index e58dde82a3ea775ac909d331bac51d6dd34a774c..7ce7a371f5618ecf85b2c0c2810b162be17e8c63 100644 --- a/src/cpp/util/time.cc +++ b/src/cpp/util/time.cc @@ -43,8 +43,8 @@ using std::chrono::system_clock; namespace grpc { // TODO(yangg) prevent potential overflow. -void Timepoint2Timespec(const system_clock::time_point& from, - gpr_timespec* to) { +void Timepoint2Timespec(const system_clock::time_point &from, + gpr_timespec *to) { system_clock::duration deadline = from.time_since_epoch(); seconds secs = duration_cast<seconds>(deadline); nanoseconds nsecs = duration_cast<nanoseconds>(deadline - secs); diff --git a/src/cpp/util/time.h b/src/cpp/util/time.h index 338c4f5119b08a968dbae2f9b395803731b07d77..908395c92b9a02dd07bea9affaef51136b31a88d 100644 --- a/src/cpp/util/time.h +++ b/src/cpp/util/time.h @@ -41,8 +41,8 @@ namespace grpc { // from and to should be absolute time. -void Timepoint2Timespec(const std::chrono::system_clock::time_point& from, - gpr_timespec* to); +void Timepoint2Timespec(const std::chrono::system_clock::time_point &from, + gpr_timespec *to); std::chrono::system_clock::time_point Timespec2Timepoint(gpr_timespec t); diff --git a/src/node/binding.gyp b/src/node/binding.gyp index 4a1fd7aaf081bb94ecc861c7cf45b3793b762bc4..da4a9434910b60072e1905358f9cdf901e946888 100644 --- a/src/node/binding.gyp +++ b/src/node/binding.gyp @@ -19,9 +19,6 @@ 'link_settings': { 'libraries': [ '-lgrpc', - '-levent', - '-levent_pthreads', - '-levent_core', '-lrt', '-lgpr', '-lpthread' diff --git a/src/node/client.js b/src/node/client.js index edaa115d0fc30b183c7899dfc6ff820c151c3f7c..f913b06f298ce5e45c2e332afeaeffb079d2b5ff 100644 --- a/src/node/client.js +++ b/src/node/client.js @@ -45,10 +45,22 @@ util.inherits(GrpcClientStream, Duplex); * from stream.Duplex. * @constructor * @param {grpc.Call} call Call object to proxy - * @param {object} options Stream options + * @param {function(*):Buffer=} serialize Serialization function for requests + * @param {function(Buffer):*=} deserialize Deserialization function for + * responses */ -function GrpcClientStream(call, options) { - Duplex.call(this, options); +function GrpcClientStream(call, serialize, deserialize) { + Duplex.call(this, {objectMode: true}); + if (!serialize) { + serialize = function(value) { + return value; + }; + } + if (!deserialize) { + deserialize = function(value) { + return value; + }; + } var self = this; // Indicates that we can start reading and have not received a null read var can_read = false; @@ -59,6 +71,32 @@ function GrpcClientStream(call, options) { // Indicates that a write is currently pending var writing = false; this._call = call; + + /** + * Serialize a request value to a buffer. Always maps null to null. Otherwise + * uses the provided serialize function + * @param {*} value The value to serialize + * @return {Buffer} The serialized value + */ + this.serialize = function(value) { + if (value === null || value === undefined) { + return null; + } + return serialize(value); + }; + + /** + * Deserialize a response buffer to a value. Always maps null to null. + * Otherwise uses the provided deserialize function. + * @param {Buffer} buffer The buffer to deserialize + * @return {*} The deserialized value + */ + this.deserialize = function(buffer) { + if (buffer === null) { + return null; + } + return deserialize(buffer); + }; /** * Callback to handle receiving a READ event. Pushes the data from that event * onto the read queue and starts reading again if applicable. @@ -66,7 +104,7 @@ function GrpcClientStream(call, options) { */ function readCallback(event) { var data = event.data; - if (self.push(data)) { + if (self.push(self.deserialize(data))) { if (data == null) { // Disable starting to read after null read was received can_read = false; @@ -102,7 +140,7 @@ function GrpcClientStream(call, options) { next.callback(); writeNext(); }; - call.startWrite(next.chunk, writeCallback, 0); + call.startWrite(self.serialize(next.chunk), writeCallback, 0); } else { writing = false; } @@ -171,6 +209,9 @@ GrpcClientStream.prototype._write = function(chunk, encoding, callback) { * Make a request on the channel to the given method with the given arguments * @param {grpc.Channel} channel The channel on which to make the request * @param {string} method The method to request + * @param {function(*):Buffer} serialize Serialization function for requests + * @param {function(Buffer):*} deserialize Deserialization function for + * responses * @param {array=} metadata Array of metadata key/value pairs to add to the call * @param {(number|Date)=} deadline The deadline for processing this request. * Defaults to infinite future. @@ -178,6 +219,8 @@ GrpcClientStream.prototype._write = function(chunk, encoding, callback) { */ function makeRequest(channel, method, + serialize, + deserialize, metadata, deadline) { if (deadline === undefined) { diff --git a/src/node/common.js b/src/node/common.js index c2dc276608b12d1534c9bc6a524a7ab895fe60e7..54247e3fa119280a14a7f7b6557ab631de4bed72 100644 --- a/src/node/common.js +++ b/src/node/common.js @@ -31,32 +31,73 @@ * */ -var _ = require('highland'); +var capitalize = require('underscore.string/capitalize'); /** - * When the given stream finishes without error, call the callback once. This - * will not be called until something begins to consume the stream. - * @param {function} callback The callback to call at stream end - * @param {stream} source The stream to watch - * @return {stream} The stream with the callback attached + * Get a function that deserializes a specific type of protobuf. + * @param {function()} cls The constructor of the message type to deserialize + * @return {function(Buffer):cls} The deserialization function */ -function onSuccessfulStreamEnd(callback, source) { - var error = false; - return source.consume(function(err, x, push, next) { - if (x === _.nil) { - if (!error) { - callback(); - } - push(null, x); - } else if (err) { - error = true; - push(err); - next(); - } else { - push(err, x); - next(); +function deserializeCls(cls) { + /** + * Deserialize a buffer to a message object + * @param {Buffer} arg_buf The buffer to deserialize + * @return {cls} The resulting object + */ + return function deserialize(arg_buf) { + return cls.decode(arg_buf); + }; +} + +/** + * Get a function that serializes objects to a buffer by protobuf class. + * @param {function()} Cls The constructor of the message type to serialize + * @return {function(Cls):Buffer} The serialization function + */ +function serializeCls(Cls) { + /** + * Serialize an object to a Buffer + * @param {Object} arg The object to serialize + * @return {Buffer} The serialized object + */ + return function serialize(arg) { + return new Buffer(new Cls(arg).encode().toBuffer()); + }; +} + +/** + * Get the fully qualified (dotted) name of a ProtoBuf.Reflect value. + * @param {ProtoBuf.Reflect.Namespace} value The value to get the name of + * @return {string} The fully qualified name of the value + */ +function fullyQualifiedName(value) { + if (value === null || value === undefined) { + return ''; + } + var name = value.name; + if (value.className === 'Service.RPCMethod') { + name = capitalize(name); + } + if (value.hasOwnProperty('parent')) { + var parent_name = fullyQualifiedName(value.parent); + if (parent_name !== '') { + name = parent_name + '.' + name; } - }); + } + return name; } -exports.onSuccessfulStreamEnd = onSuccessfulStreamEnd; +/** + * See docs for deserializeCls + */ +exports.deserializeCls = deserializeCls; + +/** + * See docs for serializeCls + */ +exports.serializeCls = serializeCls; + +/** + * See docs for fullyQualifiedName + */ +exports.fullyQualifiedName = fullyQualifiedName; diff --git a/src/node/credentials.cc b/src/node/credentials.cc index d58b7eda8931b27883693f53bb60b9093e929f5e..f9cd2fcfe0d8f14248ccbd9e805a3104299cad37 100644 --- a/src/node/credentials.cc +++ b/src/node/credentials.cc @@ -136,33 +136,29 @@ NAN_METHOD(Credentials::CreateDefault) { NAN_METHOD(Credentials::CreateSsl) { NanScope(); - char *root_certs; - char *private_key = NULL; - char *cert_chain = NULL; - int root_certs_length, private_key_length = 0, cert_chain_length = 0; - if (!Buffer::HasInstance(args[0])) { + char *root_certs = NULL; + grpc_ssl_pem_key_cert_pair key_cert_pair = {NULL, NULL}; + if (Buffer::HasInstance(args[0])) { + root_certs = Buffer::Data(args[0]); + } else if (!(args[0]->IsNull() || args[0]->IsUndefined())) { return NanThrowTypeError("createSsl's first argument must be a Buffer"); } - root_certs = Buffer::Data(args[0]); - root_certs_length = Buffer::Length(args[0]); if (Buffer::HasInstance(args[1])) { - private_key = Buffer::Data(args[1]); - private_key_length = Buffer::Length(args[1]); + key_cert_pair.private_key = Buffer::Data(args[1]); } else if (!(args[1]->IsNull() || args[1]->IsUndefined())) { return NanThrowTypeError( "createSSl's second argument must be a Buffer if provided"); } if (Buffer::HasInstance(args[2])) { - cert_chain = Buffer::Data(args[2]); - cert_chain_length = Buffer::Length(args[2]); + key_cert_pair.cert_chain = Buffer::Data(args[2]); } else if (!(args[2]->IsNull() || args[2]->IsUndefined())) { return NanThrowTypeError( "createSSl's third argument must be a Buffer if provided"); } + NanReturnValue(WrapStruct(grpc_ssl_credentials_create( - reinterpret_cast<unsigned char *>(root_certs), root_certs_length, - reinterpret_cast<unsigned char *>(private_key), private_key_length, - reinterpret_cast<unsigned char *>(cert_chain), cert_chain_length))); + root_certs, + key_cert_pair.private_key == NULL ? NULL : &key_cert_pair))); } NAN_METHOD(Credentials::CreateComposite) { diff --git a/src/node/examples/math.proto b/src/node/examples/math.proto index 14eff5daaf6e835609dce9a80c7fb222bf9d5ae2..c49787ad54d046b6fcaf600a6072039f601ad723 100644 --- a/src/node/examples/math.proto +++ b/src/node/examples/math.proto @@ -1,15 +1,15 @@ -syntax = "proto2"; +syntax = "proto3"; package math; message DivArgs { - required int64 dividend = 1; - required int64 divisor = 2; + optional int64 dividend = 1; + optional int64 divisor = 2; } message DivReply { - required int64 quotient = 1; - required int64 remainder = 2; + optional int64 quotient = 1; + optional int64 remainder = 2; } message FibArgs { @@ -17,9 +17,34 @@ message FibArgs { } message Num { - required int64 num = 1; + optional int64 num = 1; } message FibReply { - required int64 count = 1; -} \ No newline at end of file + optional int64 count = 1; +} + +service Math { + // Div divides args.dividend by args.divisor and returns the quotient and + // remainder. + rpc Div (DivArgs) returns (DivReply) { + } + + // DivMany accepts an arbitrary number of division args from the client stream + // and sends back the results in the reply stream. The stream continues until + // the client closes its end; the server does the same after sending all the + // replies. The stream ends immediately if either end aborts. + rpc DivMany (stream DivArgs) returns (stream DivReply) { + } + + // Fib generates numbers in the Fibonacci sequence. If args.limit > 0, Fib + // generates up to limit numbers; otherwise it continues until the call is + // canceled. Unlike Fib above, Fib has no final FibReply. + rpc Fib (FibArgs) returns (stream Num) { + } + + // Sum sums a stream of numbers, returning the final result once the stream + // is closed. + rpc Sum (stream Num) returns (Num) { + } +} diff --git a/src/node/examples/math_server.js b/src/node/examples/math_server.js index 87336b61e5f3add9559abd1e20e53eef97c9cbac..d649b4fd6d0749ad74c2ce319c9bcf0941843f17 100644 --- a/src/node/examples/math_server.js +++ b/src/node/examples/math_server.js @@ -38,77 +38,10 @@ var util = require('util'); var Transform = require('stream').Transform; -var builder = ProtoBuf.loadProtoFile(__dirname + '/math.proto'); -var math = builder.build('math'); +var grpc = require('..'); +var math = grpc.load(__dirname + '/math.proto').math; -var makeConstructor = require('../surface_server.js').makeServerConstructor; - -/** - * Get a function that deserializes a specific type of protobuf. - * @param {function()} cls The constructor of the message type to deserialize - * @return {function(Buffer):cls} The deserialization function - */ -function deserializeCls(cls) { - /** - * Deserialize a buffer to a message object - * @param {Buffer} arg_buf The buffer to deserialize - * @return {cls} The resulting object - */ - return function deserialize(arg_buf) { - return cls.decode(arg_buf); - }; -} - -/** - * Get a function that serializes objects to a buffer by protobuf class. - * @param {function()} Cls The constructor of the message type to serialize - * @return {function(Cls):Buffer} The serialization function - */ -function serializeCls(Cls) { - /** - * Serialize an object to a Buffer - * @param {Object} arg The object to serialize - * @return {Buffer} The serialized object - */ - return function serialize(arg) { - return new Buffer(new Cls(arg).encode().toBuffer()); - }; -} - -/* This function call creates a server constructor for servers that that expose - * the four specified methods. This specifies how to serialize messages that the - * server sends and deserialize messages that the client sends, and whether the - * client or the server will send a stream of messages, for each method. This - * also specifies a prefix that will be added to method names when sending them - * on the wire. This function call and all of the preceding code in this file - * are intended to approximate what the generated code will look like for the - * math service */ -var Server = makeConstructor({ - Div: { - serialize: serializeCls(math.DivReply), - deserialize: deserializeCls(math.DivArgs), - client_stream: false, - server_stream: false - }, - Fib: { - serialize: serializeCls(math.Num), - deserialize: deserializeCls(math.FibArgs), - client_stream: false, - server_stream: true - }, - Sum: { - serialize: serializeCls(math.Num), - deserialize: deserializeCls(math.Num), - client_stream: true, - server_stream: false - }, - DivMany: { - serialize: serializeCls(math.DivReply), - deserialize: deserializeCls(math.DivArgs), - client_stream: true, - server_stream: true - } -}, '/Math/'); +var Server = grpc.buildServer([math.Math.service]); /** * Server function for division. Provides the /Math/DivMany and /Math/Div @@ -185,10 +118,12 @@ function mathDivMany(stream) { } var server = new Server({ - Div: mathDiv, - Fib: mathFib, - Sum: mathSum, - DivMany: mathDivMany + 'math.Math' : { + div: mathDiv, + fib: mathFib, + sum: mathSum, + divMany: mathDivMany + } }); if (require.main === module) { diff --git a/src/node/interop/empty.proto b/src/node/interop/empty.proto new file mode 100644 index 0000000000000000000000000000000000000000..c9920a22eec0801bc1d8ce4e3c027253358936eb --- /dev/null +++ b/src/node/interop/empty.proto @@ -0,0 +1,19 @@ +syntax = "proto2"; + +package grpc.testing; + +// An empty message that you can re-use to avoid defining duplicated empty +// messages in your project. A typical example is to use it as argument or the +// return value of a service API. For instance: +// +// service Foo { +// rpc Bar (grpc.testing.Empty) returns (grpc.testing.Empty) { }; +// }; +// +// MOE:begin_strip +// The difference between this one and net/rpc/empty-message.proto is that +// 1) The generated message here is in proto2 C++ API. +// 2) The proto2.Empty has minimum dependencies +// (no message_set or net/rpc dependencies) +// MOE:end_strip +message Empty {} diff --git a/src/node/interop/interop_client.js b/src/node/interop/interop_client.js new file mode 100644 index 0000000000000000000000000000000000000000..cf75b9a77ac91e419d835652af1cdbe8b6e7cecb --- /dev/null +++ b/src/node/interop/interop_client.js @@ -0,0 +1,274 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +var fs = require('fs'); +var path = require('path'); +var grpc = require('..'); +var testProto = grpc.load(__dirname + '/test.proto').grpc.testing; + +var assert = require('assert'); + +/** + * Create a buffer filled with size zeroes + * @param {number} size The length of the buffer + * @return {Buffer} The new buffer + */ +function zeroBuffer(size) { + var zeros = new Buffer(size); + zeros.fill(0); + return zeros; +} + +/** + * Run the empty_unary test + * @param {Client} client The client to test against + * @param {function} done Callback to call when the test is completed. Included + * primarily for use with mocha + */ +function emptyUnary(client, done) { + var call = client.emptyCall({}, function(err, resp) { + assert.ifError(err); + }); + call.on('status', function(status) { + assert.strictEqual(status.code, grpc.status.OK); + if (done) { + done(); + } + }); +} + +/** + * Run the large_unary test + * @param {Client} client The client to test against + * @param {function} done Callback to call when the test is completed. Included + * primarily for use with mocha + */ +function largeUnary(client, done) { + var arg = { + response_type: testProto.PayloadType.COMPRESSABLE, + response_size: 314159, + payload: { + body: zeroBuffer(271828) + } + }; + var call = client.unaryCall(arg, function(err, resp) { + assert.ifError(err); + assert.strictEqual(resp.payload.type, testProto.PayloadType.COMPRESSABLE); + assert.strictEqual(resp.payload.body.limit - resp.payload.body.offset, + 314159); + }); + call.on('status', function(status) { + assert.strictEqual(status.code, grpc.status.OK); + if (done) { + done(); + } + }); +} + +/** + * Run the client_streaming test + * @param {Client} client The client to test against + * @param {function} done Callback to call when the test is completed. Included + * primarily for use with mocha + */ +function clientStreaming(client, done) { + var call = client.streamingInputCall(function(err, resp) { + assert.ifError(err); + assert.strictEqual(resp.aggregated_payload_size, 74922); + }); + call.on('status', function(status) { + assert.strictEqual(status.code, grpc.status.OK); + if (done) { + done(); + } + }); + var payload_sizes = [27182, 8, 1828, 45904]; + for (var i = 0; i < payload_sizes.length; i++) { + call.write({payload: {body: zeroBuffer(payload_sizes[i])}}); + } + call.end(); +} + +/** + * Run the server_streaming test + * @param {Client} client The client to test against + * @param {function} done Callback to call when the test is completed. Included + * primarily for use with mocha + */ +function serverStreaming(client, done) { + var arg = { + response_type: testProto.PayloadType.COMPRESSABLE, + response_parameters: [ + {size: 31415}, + {size: 9}, + {size: 2653}, + {size: 58979} + ] + }; + var call = client.streamingOutputCall(arg); + var resp_index = 0; + call.on('data', function(value) { + assert(resp_index < 4); + assert.strictEqual(value.payload.type, testProto.PayloadType.COMPRESSABLE); + assert.strictEqual(value.payload.body.limit - value.payload.body.offset, + arg.response_parameters[resp_index].size); + resp_index += 1; + }); + call.on('status', function(status) { + assert.strictEqual(resp_index, 4); + assert.strictEqual(status.code, grpc.status.OK); + if (done) { + done(); + } + }); +} + +/** + * Run the ping_pong test + * @param {Client} client The client to test against + * @param {function} done Callback to call when the test is completed. Included + * primarily for use with mocha + */ +function pingPong(client, done) { + var payload_sizes = [27182, 8, 1828, 45904]; + var response_sizes = [31415, 9, 2653, 58979]; + var call = client.fullDuplexCall(); + call.on('status', function(status) { + assert.strictEqual(status.code, grpc.status.OK); + if (done) { + done(); + } + }); + var index = 0; + call.write({ + response_type: testProto.PayloadType.COMPRESSABLE, + response_parameters: [ + {size: response_sizes[index]} + ], + payload: {body: zeroBuffer(payload_sizes[index])} + }); + call.on('data', function(response) { + assert.strictEqual(response.payload.type, + testProto.PayloadType.COMPRESSABLE); + assert.equal(response.payload.body.limit - response.payload.body.offset, + response_sizes[index]); + index += 1; + if (index == 4) { + call.end(); + } else { + call.write({ + response_type: testProto.PayloadType.COMPRESSABLE, + response_parameters: [ + {size: response_sizes[index]} + ], + payload: {body: zeroBuffer(payload_sizes[index])} + }); + } + }); +} + +/** + * Run the empty_stream test. + * NOTE: This does not work, but should with the new invoke API + * @param {Client} client The client to test against + * @param {function} done Callback to call when the test is completed. Included + * primarily for use with mocha + */ +function emptyStream(client, done) { + var call = client.fullDuplexCall(); + call.on('status', function(status) { + assert.strictEqual(status.code, grpc.status.OK); + if (done) { + done(); + } + }); + call.on('data', function(value) { + assert.fail(value, null, 'No data should have been received', '!=='); + }); + call.end(); +} + +/** + * Map from test case names to test functions + */ +var test_cases = { + empty_unary: emptyUnary, + large_unary: largeUnary, + client_streaming: clientStreaming, + server_streaming: serverStreaming, + ping_pong: pingPong, + empty_stream: emptyStream +}; + +/** + * Execute a single test case. + * @param {string} address The address of the server to connect to, in the + * format "hostname:port" + * @param {string} host_overrirde The hostname of the server to use as an SSL + * override + * @param {string} test_case The name of the test case to run + * @param {bool} tls Indicates that a secure channel should be used + * @param {function} done Callback to call when the test is completed. Included + * primarily for use with mocha + */ +function runTest(address, host_override, test_case, tls, done) { + // TODO(mlumish): enable TLS functionality + var options = {}; + if (tls) { + var ca_path = path.join(__dirname, '../test/data/ca.pem'); + var ca_data = fs.readFileSync(ca_path); + var creds = grpc.Credentials.createSsl(ca_data); + options.credentials = creds; + if (host_override) { + options['grpc.ssl_target_name_override'] = host_override; + } + } + var client = new testProto.TestService(address, options); + + test_cases[test_case](client, done); +} + +if (require.main === module) { + var parseArgs = require('minimist'); + var argv = parseArgs(process.argv, { + string: ['server_host', 'server_host_override', 'server_port', 'test_case', + 'use_tls', 'use_test_ca'] + }); + runTest(argv.server_host + ':' + argv.server_port, argv.server_host_override, + argv.test_case, argv.use_tls === 'true'); +} + +/** + * See docs for runTest + */ +exports.runTest = runTest; diff --git a/src/node/interop/interop_server.js b/src/node/interop/interop_server.js new file mode 100644 index 0000000000000000000000000000000000000000..6d2bd7ae0de767f09f80a1a9982faffebe209ace --- /dev/null +++ b/src/node/interop/interop_server.js @@ -0,0 +1,203 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +var fs = require('fs'); +var path = require('path'); +var _ = require('underscore'); +var grpc = require('..'); +var testProto = grpc.load(__dirname + '/test.proto').grpc.testing; +var Server = grpc.buildServer([testProto.TestService.service]); + +/** + * Create a buffer filled with size zeroes + * @param {number} size The length of the buffer + * @return {Buffer} The new buffer + */ +function zeroBuffer(size) { + var zeros = new Buffer(size); + zeros.fill(0); + return zeros; +} + +/** + * Respond to an empty parameter with an empty response. + * NOTE: this currently does not work due to issue #137 + * @param {Call} call Call to handle + * @param {function(Error, Object)} callback Callback to call with result + * or error + */ +function handleEmpty(call, callback) { + callback(null, {}); +} + +/** + * Handle a unary request by sending the requested payload + * @param {Call} call Call to handle + * @param {function(Error, Object)} callback Callback to call with result or + * error + */ +function handleUnary(call, callback) { + var req = call.request; + var zeros = zeroBuffer(req.response_size); + var payload_type = req.response_type; + if (payload_type === testProto.PayloadType.RANDOM) { + payload_type = [ + testProto.PayloadType.COMPRESSABLE, + testProto.PayloadType.UNCOMPRESSABLE][Math.random() < 0.5 ? 0 : 1]; + } + callback(null, {payload: {type: payload_type, body: zeros}}); +} + +/** + * Respond to a streaming call with the total size of all payloads + * @param {Call} call Call to handle + * @param {function(Error, Object)} callback Callback to call with result or + * error + */ +function handleStreamingInput(call, callback) { + var aggregate_size = 0; + call.on('data', function(value) { + aggregate_size += value.payload.body.limit - value.payload.body.offset; + }); + call.on('end', function() { + callback(null, {aggregated_payload_size: aggregate_size}); + }); +} + +/** + * Respond to a payload request with a stream of the requested payloads + * @param {Call} call Call to handle + */ +function handleStreamingOutput(call) { + var req = call.request; + var payload_type = req.response_type; + if (payload_type === testProto.PayloadType.RANDOM) { + payload_type = [ + testProto.PayloadType.COMPRESSABLE, + testProto.PayloadType.UNCOMPRESSABLE][Math.random() < 0.5 ? 0 : 1]; + } + _.each(req.response_parameters, function(resp_param) { + call.write({ + payload: { + body: zeroBuffer(resp_param.size), + type: payload_type + } + }); + }); + call.end(); +} + +/** + * Respond to a stream of payload requests with a stream of payload responses as + * they arrive. + * @param {Call} call Call to handle + */ +function handleFullDuplex(call) { + call.on('data', function(value) { + var payload_type = value.response_type; + if (payload_type === testProto.PayloadType.RANDOM) { + payload_type = [ + testProto.PayloadType.COMPRESSABLE, + testProto.PayloadType.UNCOMPRESSABLE][Math.random() < 0.5 ? 0 : 1]; + } + _.each(value.response_parameters, function(resp_param) { + call.write({ + payload: { + body: zeroBuffer(resp_param.size), + type: payload_type + } + }); + }); + }); + call.on('end', function() { + call.end(); + }); +} + +/** + * Respond to a stream of payload requests with a stream of payload responses + * after all requests have arrived + * @param {Call} call Call to handle + */ +function handleHalfDuplex(call) { + throw new Error('HalfDuplexCall not yet implemented'); +} + +/** + * Get a server object bound to the given port + * @param {string} port Port to which to bind + * @param {boolean} tls Indicates that the bound port should use TLS + * @return {{server: Server, port: number}} Server object bound to the support, + * and port number that the server is bound to + */ +function getServer(port, tls) { + // TODO(mlumish): enable TLS functionality + var options = {}; + if (tls) { + var key_path = path.join(__dirname, '../test/data/server1.key'); + var pem_path = path.join(__dirname, '../test/data/server1.pem'); + + var key_data = fs.readFileSync(key_path); + var pem_data = fs.readFileSync(pem_path); + var server_creds = grpc.ServerCredentials.createSsl(null, + key_data, + pem_data); + options.credentials = server_creds; + } + var server = new Server({ + 'grpc.testing.TestService' : { + emptyCall: handleEmpty, + unaryCall: handleUnary, + streamingOutputCall: handleStreamingOutput, + streamingInputCall: handleStreamingInput, + fullDuplexCall: handleFullDuplex, + halfDuplexCall: handleHalfDuplex + } + }, options); + var port_num = server.bind('0.0.0.0:' + port, tls); + return {server: server, port: port_num}; +} + +if (require.main === module) { + var parseArgs = require('minimist'); + var argv = parseArgs(process.argv, { + string: ['port', 'use_tls'] + }); + var server_obj = getServer(argv.port, argv.use_tls === 'true'); + server_obj.server.start(); +} + +/** + * See docs for getServer + */ +exports.getServer = getServer; diff --git a/src/node/interop/messages.proto b/src/node/interop/messages.proto new file mode 100644 index 0000000000000000000000000000000000000000..29db0dd8b1aa0f4445bfc8b85e90d5304c9d2160 --- /dev/null +++ b/src/node/interop/messages.proto @@ -0,0 +1,94 @@ +// Message definitions to be used by integration test service definitions. + +syntax = "proto2"; + +package grpc.testing; + +// The type of payload that should be returned. +enum PayloadType { + // Compressable text format. + COMPRESSABLE = 0; + + // Uncompressable binary format. + UNCOMPRESSABLE = 1; + + // Randomly chosen from all other formats defined in this enum. + RANDOM = 2; +} + +// A block of data, to simply increase gRPC message size. +message Payload { + // The type of data in body. + optional PayloadType type = 1; + // Primary contents of payload. + optional bytes body = 2; +} + +// Unary request. +message SimpleRequest { + // Desired payload type in the response from the server. + // If response_type is RANDOM, server randomly chooses one from other formats. + optional PayloadType response_type = 1; + + // Desired payload size in the response from the server. + // If response_type is COMPRESSABLE, this denotes the size before compression. + optional int32 response_size = 2; + + // Optional input payload sent along with the request. + optional Payload payload = 3; +} + +// Unary response, as configured by the request. +message SimpleResponse { + // Payload to increase message size. + optional Payload payload = 1; + // The user the request came from, for verifying authentication was + // successful when the client expected it. + optional int64 effective_gaia_user_id = 2; +} + +// Client-streaming request. +message StreamingInputCallRequest { + // Optional input payload sent along with the request. + optional Payload payload = 1; + + // Not expecting any payload from the response. +} + +// Client-streaming response. +message StreamingInputCallResponse { + // Aggregated size of payloads received from the client. + optional int32 aggregated_payload_size = 1; +} + +// Configuration for a particular response. +message ResponseParameters { + // Desired payload sizes in responses from the server. + // If response_type is COMPRESSABLE, this denotes the size before compression. + optional int32 size = 1; + + // Desired interval between consecutive responses in the response stream in + // microseconds. + optional int32 interval_us = 2; +} + +// Server-streaming request. +message StreamingOutputCallRequest { + // Desired payload type in the response from the server. + // If response_type is RANDOM, the payload from each response in the stream + // might be of different types. This is to simulate a mixed type of payload + // stream. + optional PayloadType response_type = 1; + + // Configuration for each expected response message. + repeated ResponseParameters response_parameters = 2; + + // Optional input payload sent along with the request. + optional Payload payload = 3; +} + +// Server-streaming response, as configured by the request and parameters. +message StreamingOutputCallResponse { + // Payload to increase response size. + optional Payload payload = 1; +} diff --git a/src/node/interop/test.proto b/src/node/interop/test.proto new file mode 100644 index 0000000000000000000000000000000000000000..8380ebb31de74fc7e68a83ac5fc7dbd4485372fb --- /dev/null +++ b/src/node/interop/test.proto @@ -0,0 +1,42 @@ +// An integration test service that covers all the method signature permutations +// of unary/streaming requests/responses. +syntax = "proto2"; + +import "empty.proto"; +import "messages.proto"; + +package grpc.testing; + +// A simple service to test the various types of RPCs and experiment with +// performance with various types of payload. +service TestService { + // One empty request followed by one empty response. + rpc EmptyCall(grpc.testing.Empty) returns (grpc.testing.Empty); + + // One request followed by one response. + // The server returns the client payload as-is. + rpc UnaryCall(SimpleRequest) returns (SimpleResponse); + + // One request followed by a sequence of responses (streamed download). + // The server returns the payload with client desired type and sizes. + rpc StreamingOutputCall(StreamingOutputCallRequest) + returns (stream StreamingOutputCallResponse); + + // A sequence of requests followed by one response (streamed upload). + // The server returns the aggregated size of client payload as the result. + rpc StreamingInputCall(stream StreamingInputCallRequest) + returns (StreamingInputCallResponse); + + // A sequence of requests with each request served by the server immediately. + // As one request could lead to multiple responses, this interface + // demonstrates the idea of full duplexing. + rpc FullDuplexCall(stream StreamingOutputCallRequest) + returns (stream StreamingOutputCallResponse); + + // A sequence of requests followed by a sequence of responses. + // The server buffers all the client requests and then serves them in order. A + // stream of responses are returned to the client when the server starts with + // first request. + rpc HalfDuplexCall(stream StreamingOutputCallRequest) + returns (stream StreamingOutputCallResponse); +} diff --git a/src/node/main.js b/src/node/main.js new file mode 100644 index 0000000000000000000000000000000000000000..751c3525d37c91d3d36ef4fedd2f76e80328e59d --- /dev/null +++ b/src/node/main.js @@ -0,0 +1,108 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +var _ = require('underscore'); + +var ProtoBuf = require('protobufjs'); + +var surface_client = require('./surface_client.js'); + +var surface_server = require('./surface_server.js'); + +var grpc = require('bindings')('grpc'); + +/** + * Load a gRPC object from an existing ProtoBuf.Reflect object. + * @param {ProtoBuf.Reflect.Namespace} value The ProtoBuf object to load. + * @return {Object<string, *>} The resulting gRPC object + */ +function loadObject(value) { + var result = {}; + if (value.className === 'Namespace') { + _.each(value.children, function(child) { + result[child.name] = loadObject(child); + }); + return result; + } else if (value.className === 'Service') { + return surface_client.makeClientConstructor(value); + } else if (value.className === 'Message' || value.className === 'Enum') { + return value.build(); + } else { + return value; + } +} + +/** + * Load a gRPC object from a .proto file. + * @param {string} filename The file to load + * @return {Object<string, *>} The resulting gRPC object + */ +function load(filename) { + var builder = ProtoBuf.loadProtoFile(filename); + + return loadObject(builder.ns); +} + +/** + * See docs for loadObject + */ +exports.loadObject = loadObject; + +/** + * See docs for load + */ +exports.load = load; + +/** + * See docs for surface_server.makeServerConstructor + */ +exports.buildServer = surface_server.makeServerConstructor; + +/** + * Status name to code number mapping + */ +exports.status = grpc.status; +/** + * Call error name to code number mapping + */ +exports.callError = grpc.callError; + +/** + * Credentials factories + */ +exports.Credentials = grpc.Credentials; + +/** + * ServerCredentials factories + */ +exports.ServerCredentials = grpc.ServerCredentials; diff --git a/src/node/package.json b/src/node/package.json index a2940b29bbc8cbe0b0bb044beab4ed238baca3ea..5f3c6fa3455d29719fae7f212457531bbe95641b 100644 --- a/src/node/package.json +++ b/src/node/package.json @@ -8,11 +8,14 @@ "dependencies": { "bindings": "^1.2.1", "nan": "~1.3.0", - "underscore": "^1.7.0" + "protobufjs": "murgatroid99/ProtoBuf.js", + "underscore": "^1.7.0", + "underscore.string": "^3.0.0" }, "devDependencies": { + "highland": "~2.2.0", "mocha": "~1.21.0", - "highland": "~2.0.0", - "protobufjs": "~3.8.0" - } + "minimist": "^1.1.0" + }, + "main": "main.js" } diff --git a/src/node/server.cc b/src/node/server.cc index 64826897cda9d1bd98392ff9457fa86768d05e3a..b102775d33783ea58c1f439bb953a5a2584c8779 100644 --- a/src/node/server.cc +++ b/src/node/server.cc @@ -194,7 +194,7 @@ NAN_METHOD(Server::AddHttp2Port) { return NanThrowTypeError("addHttp2Port's argument must be a String"); } Server *server = ObjectWrap::Unwrap<Server>(args.This()); - NanReturnValue(NanNew<Boolean>(grpc_server_add_http2_port( + NanReturnValue(NanNew<Number>(grpc_server_add_http2_port( server->wrapped_server, *NanUtf8String(args[0])))); } @@ -208,7 +208,7 @@ NAN_METHOD(Server::AddSecureHttp2Port) { return NanThrowTypeError("addSecureHttp2Port's argument must be a String"); } Server *server = ObjectWrap::Unwrap<Server>(args.This()); - NanReturnValue(NanNew<Boolean>(grpc_server_add_secure_http2_port( + NanReturnValue(NanNew<Number>(grpc_server_add_secure_http2_port( server->wrapped_server, *NanUtf8String(args[0])))); } diff --git a/src/node/server.js b/src/node/server.js index 2704c68f17c96dea95f45ddbc7ea5a25ab6123a4..eca20aa5fd070fa000dbb93a7fd8340b1e33658a 100644 --- a/src/node/server.js +++ b/src/node/server.js @@ -31,6 +31,8 @@ * */ +var _ = require('underscore'); + var grpc = require('bindings')('grpc.node'); var common = require('./common'); @@ -45,10 +47,22 @@ util.inherits(GrpcServerStream, Duplex); * from stream.Duplex. * @constructor * @param {grpc.Call} call Call object to proxy - * @param {object} options Stream options + * @param {function(*):Buffer=} serialize Serialization function for responses + * @param {function(Buffer):*=} deserialize Deserialization function for + * requests */ -function GrpcServerStream(call, options) { - Duplex.call(this, options); +function GrpcServerStream(call, serialize, deserialize) { + Duplex.call(this, {objectMode: true}); + if (!serialize) { + serialize = function(value) { + return value; + }; + } + if (!deserialize) { + deserialize = function(value) { + return value; + }; + } this._call = call; // Indicate that a status has been sent var finished = false; @@ -57,6 +71,33 @@ function GrpcServerStream(call, options) { 'code' : grpc.status.OK, 'details' : 'OK' }; + + /** + * Serialize a response value to a buffer. Always maps null to null. Otherwise + * uses the provided serialize function + * @param {*} value The value to serialize + * @return {Buffer} The serialized value + */ + this.serialize = function(value) { + if (value === null || value === undefined) { + return null; + } + return serialize(value); + }; + + /** + * Deserialize a request buffer to a value. Always maps null to null. + * Otherwise uses the provided deserialize function. + * @param {Buffer} buffer The buffer to deserialize + * @return {*} The deserialized value + */ + this.deserialize = function(buffer) { + if (buffer === null) { + return null; + } + return deserialize(buffer); + }; + /** * Send the pending status */ @@ -73,7 +114,6 @@ function GrpcServerStream(call, options) { * @param {Error} err The error object */ function setStatus(err) { - console.log('Server setting status to', err); var code = grpc.status.INTERNAL; var details = 'Unknown Error'; @@ -111,7 +151,7 @@ function GrpcServerStream(call, options) { return; } var data = event.data; - if (self.push(data) && data != null) { + if (self.push(deserialize(data)) && data != null) { self._call.startRead(readCallback); } else { reading = false; @@ -153,7 +193,7 @@ GrpcServerStream.prototype._read = function(size) { */ GrpcServerStream.prototype._write = function(chunk, encoding, callback) { var self = this; - self._call.startWrite(chunk, function(event) { + self._call.startWrite(self.serialize(chunk), function(event) { callback(); }, 0); }; @@ -176,6 +216,10 @@ function Server(options) { * @this Server */ this.start = function() { + console.log('Server starting'); + _.each(handlers, function(handler, handler_name) { + console.log('Serving', handler_name); + }); if (this.started) { throw 'Server is already running'; } @@ -205,12 +249,13 @@ function Server(options) { } }, 0); call.serverEndInitialMetadata(0); - var stream = new GrpcServerStream(call); + var stream = new GrpcServerStream(call, handler.serialize, + handler.deserialize); Object.defineProperty(stream, 'cancelled', { get: function() { return cancelled;} }); try { - handler(stream, data.metadata); + handler.func(stream, data.metadata); } catch (e) { stream.emit('error', e); } @@ -231,14 +276,20 @@ function Server(options) { * handle/respond to. * @param {function} handler Function that takes a stream of request values and * returns a stream of response values + * @param {function(*):Buffer} serialize Serialization function for responses + * @param {function(Buffer):*} deserialize Deserialization function for requests * @return {boolean} True if the handler was set. False if a handler was already * set for that name. */ -Server.prototype.register = function(name, handler) { +Server.prototype.register = function(name, handler, serialize, deserialize) { if (this.handlers.hasOwnProperty(name)) { return false; } - this.handlers[name] = handler; + this.handlers[name] = { + func: handler, + serialize: serialize, + deserialize: deserialize + }; return true; }; @@ -250,9 +301,9 @@ Server.prototype.register = function(name, handler) { */ Server.prototype.bind = function(port, secure) { if (secure) { - this._server.addSecureHttp2Port(port); + return this._server.addSecureHttp2Port(port); } else { - this._server.addHttp2Port(port); + return this._server.addHttp2Port(port); } }; diff --git a/src/node/server_credentials.cc b/src/node/server_credentials.cc index 38df54752781c127ac19fe5c3cacab193742c7e0..393f3a63052fd3b5dcfcae3d8767f08fa34d5156 100644 --- a/src/node/server_credentials.cc +++ b/src/node/server_credentials.cc @@ -123,14 +123,12 @@ NAN_METHOD(ServerCredentials::New) { } NAN_METHOD(ServerCredentials::CreateSsl) { + // TODO: have the node API support multiple key/cert pairs. NanScope(); char *root_certs = NULL; - char *private_key; - char *cert_chain; - int root_certs_length = 0, private_key_length, cert_chain_length; + grpc_ssl_pem_key_cert_pair key_cert_pair; if (Buffer::HasInstance(args[0])) { root_certs = Buffer::Data(args[0]); - root_certs_length = Buffer::Length(args[0]); } else if (!(args[0]->IsNull() || args[0]->IsUndefined())) { return NanThrowTypeError( "createSSl's first argument must be a Buffer if provided"); @@ -138,17 +136,13 @@ NAN_METHOD(ServerCredentials::CreateSsl) { if (!Buffer::HasInstance(args[1])) { return NanThrowTypeError("createSsl's second argument must be a Buffer"); } - private_key = Buffer::Data(args[1]); - private_key_length = Buffer::Length(args[1]); + key_cert_pair.private_key = Buffer::Data(args[1]); if (!Buffer::HasInstance(args[2])) { return NanThrowTypeError("createSsl's third argument must be a Buffer"); } - cert_chain = Buffer::Data(args[2]); - cert_chain_length = Buffer::Length(args[2]); - NanReturnValue(WrapStruct(grpc_ssl_server_credentials_create( - reinterpret_cast<unsigned char *>(root_certs), root_certs_length, - reinterpret_cast<unsigned char *>(private_key), private_key_length, - reinterpret_cast<unsigned char *>(cert_chain), cert_chain_length))); + key_cert_pair.cert_chain = Buffer::Data(args[2]); + NanReturnValue(WrapStruct( + grpc_ssl_server_credentials_create(root_certs, &key_cert_pair, 1))); } NAN_METHOD(ServerCredentials::CreateFake) { diff --git a/src/node/surface_client.js b/src/node/surface_client.js index acd22089ce1c717e6066d0609d02b2ce2ba353a3..996e3d101fcd94556585aa722940bc80520196b3 100644 --- a/src/node/surface_client.js +++ b/src/node/surface_client.js @@ -33,8 +33,13 @@ var _ = require('underscore'); +var capitalize = require('underscore.string/capitalize'); +var decapitalize = require('underscore.string/decapitalize'); + var client = require('./client.js'); +var common = require('./common.js'); + var EventEmitter = require('events').EventEmitter; var stream = require('stream'); @@ -44,6 +49,7 @@ var Writable = stream.Writable; var Duplex = stream.Duplex; var util = require('util'); + function forwardEvent(fromEmitter, toEmitter, event) { fromEmitter.on(event, function forward() { _.partial(toEmitter.emit, event).apply(toEmitter, arguments); @@ -317,16 +323,13 @@ var requester_makers = { } /** - * Creates a constructor for clients with a service defined by the methods - * object. The methods object has string keys and values of this form: - * {serialize: function, deserialize: function, client_stream: bool, - * server_stream: bool} - * @param {!Object<string, Object>} methods Method descriptor for each method - * the client should expose - * @param {string} prefix The prefix to prepend to each method name + * Creates a constructor for clients for the given service + * @param {ProtoBuf.Reflect.Service} service The service to generate a client + * for * @return {function(string, Object)} New client constructor */ -function makeClientConstructor(methods, prefix) { +function makeClientConstructor(service) { + var prefix = '/' + common.fullyQualifiedName(service) + '/'; /** * Create a client with the given methods * @constructor @@ -337,27 +340,30 @@ function makeClientConstructor(methods, prefix) { this.channel = new client.Channel(address, options); } - _.each(methods, function(method, name) { + _.each(service.children, function(method) { var method_type; - if (method.client_stream) { - if (method.server_stream) { + if (method.requestStream) { + if (method.responseStream) { method_type = 'bidi'; } else { method_type = 'client_stream'; } } else { - if (method.server_stream) { + if (method.responseStream) { method_type = 'server_stream'; } else { method_type = 'unary'; } } - SurfaceClient.prototype[name] = requester_makers[method_type]( - prefix + name, - method.serialize, - method.deserialize); + SurfaceClient.prototype[decapitalize(method.name)] = + requester_makers[method_type]( + prefix + capitalize(method.name), + common.serializeCls(method.resolvedRequestType.build()), + common.deserializeCls(method.resolvedResponseType.build())); }); + SurfaceClient.service = service; + return SurfaceClient; } diff --git a/src/node/surface_server.js b/src/node/surface_server.js index 295c1ccafffc51210c2b2786d536ba13d285ea47..bc688839fe56ed017e2b4d8eb738891382d0b5a0 100644 --- a/src/node/surface_server.js +++ b/src/node/surface_server.js @@ -33,6 +33,9 @@ var _ = require('underscore'); +var capitalize = require('underscore.string/capitalize'); +var decapitalize = require('underscore.string/decapitalize'); + var Server = require('./server.js'); var stream = require('stream'); @@ -42,6 +45,8 @@ var Writable = stream.Writable; var Duplex = stream.Duplex; var util = require('util'); +var common = require('./common.js'); + util.inherits(ServerReadableObjectStream, Readable); /** @@ -287,36 +292,60 @@ var handler_makers = { * @param {string} prefix The prefex to prepend to each method name * @return {function(Object, Object)} New server constructor */ -function makeServerConstructor(methods, prefix) { +function makeServerConstructor(services) { + var qual_names = []; + _.each(services, function(service) { + _.each(service.children, function(method) { + var name = common.fullyQualifiedName(method); + if (_.indexOf(qual_names, name) !== -1) { + throw new Error('Method ' + name + ' exposed by more than one service'); + } + qual_names.push(name); + }); + }); /** * Create a server with the given handlers for all of the methods. * @constructor - * @param {Object} handlers Map from method names to method handlers. + * @param {Object} service_handlers Map from service names to map from method + * names to handlers * @param {Object} options Options to pass to the underlying server */ - function SurfaceServer(handlers, options) { + function SurfaceServer(service_handlers, options) { var server = new Server(options); this.inner_server = server; - _.each(handlers, function(handler, name) { - var method = methods[name]; - var method_type; - if (method.client_stream) { - if (method.server_stream) { - method_type = 'bidi'; + _.each(services, function(service) { + var service_name = common.fullyQualifiedName(service); + if (service_handlers[service_name] === undefined) { + throw new Error('Handlers for service ' + + service_name + ' not provided.'); + } + var prefix = '/' + common.fullyQualifiedName(service) + '/'; + _.each(service.children, function(method) { + var method_type; + if (method.requestStream) { + if (method.responseStream) { + method_type = 'bidi'; + } else { + method_type = 'client_stream'; + } } else { - method_type = 'client_stream'; + if (method.responseStream) { + method_type = 'server_stream'; + } else { + method_type = 'unary'; + } } - } else { - if (method.server_stream) { - method_type = 'server_stream'; - } else { - method_type = 'unary'; + if (service_handlers[service_name][decapitalize(method.name)] === + undefined) { + throw new Error('Method handler for ' + + common.fullyQualifiedName(method) + ' not provided.'); } - } - var binary_handler = handler_makers[method_type](handler, - method.serialize, - method.deserialize); - server.register('' + prefix + name, binary_handler); + var binary_handler = handler_makers[method_type]( + service_handlers[service_name][decapitalize(method.name)], + common.serializeCls(method.resolvedResponseType.build()), + common.deserializeCls(method.resolvedRequestType.build())); + server.register(prefix + capitalize(method.name), binary_handler); + }); }, this); } @@ -328,8 +357,7 @@ function makeServerConstructor(methods, prefix) { * @return {SurfaceServer} this */ SurfaceServer.prototype.bind = function(port, secure) { - this.inner_server.bind(port, secure); - return this; + return this.inner_server.bind(port, secure); }; /** diff --git a/src/node/test/client_server_test.js b/src/node/test/client_server_test.js index 534a5c464fb32cbe9b08383f62bfb624a0ae14b4..2a25908684be8d36f813077e1fcb6349de6ac8df 100644 --- a/src/node/test/client_server_test.js +++ b/src/node/test/client_server_test.js @@ -37,7 +37,6 @@ var path = require('path'); var grpc = require('bindings')('grpc.node'); var Server = require('../server'); var client = require('../client'); -var port_picker = require('../port_picker'); var common = require('../common'); var _ = require('highland'); @@ -80,55 +79,50 @@ function errorHandler(stream) { describe('echo client', function() { it('should receive echo responses', function(done) { - port_picker.nextAvailablePort(function(port) { - var server = new Server(); - server.bind(port); - server.register('echo', echoHandler); - server.start(); - - var messages = ['echo1', 'echo2', 'echo3', 'echo4']; - var channel = new grpc.Channel(port); - var stream = client.makeRequest( - channel, - 'echo'); - _(messages).map(function(val) { - return new Buffer(val); - }).pipe(stream); - var index = 0; - stream.on('data', function(chunk) { - assert.equal(messages[index], chunk.toString()); - index += 1; - }); - stream.on('end', function() { - server.shutdown(); - done(); - }); + var server = new Server(); + var port_num = server.bind('0.0.0.0:0'); + server.register('echo', echoHandler); + server.start(); + + var messages = ['echo1', 'echo2', 'echo3', 'echo4']; + var channel = new grpc.Channel('localhost:' + port_num); + var stream = client.makeRequest( + channel, + 'echo'); + _(messages).map(function(val) { + return new Buffer(val); + }).pipe(stream); + var index = 0; + stream.on('data', function(chunk) { + assert.equal(messages[index], chunk.toString()); + index += 1; + }); + stream.on('end', function() { + server.shutdown(); + done(); }); }); it('should get an error status that the server throws', function(done) { - port_picker.nextAvailablePort(function(port) { - var server = new Server(); - server.bind(port); - server.register('error', errorHandler); - server.start(); - - var channel = new grpc.Channel(port); - var stream = client.makeRequest( - channel, - 'error', - null, - getDeadline(1)); - - stream.on('data', function() {}); - stream.write(new Buffer('test')); - stream.end(); - stream.on('status', function(status) { - assert.equal(status.code, grpc.status.UNIMPLEMENTED); - assert.equal(status.details, 'error details'); - server.shutdown(); - done(); - }); - + var server = new Server(); + var port_num = server.bind('0.0.0.0:0'); + server.register('error', errorHandler); + server.start(); + + var channel = new grpc.Channel('localhost:' + port_num); + var stream = client.makeRequest( + channel, + 'error', + null, + getDeadline(1)); + + stream.on('data', function() {}); + stream.write(new Buffer('test')); + stream.end(); + stream.on('status', function(status) { + assert.equal(status.code, grpc.status.UNIMPLEMENTED); + assert.equal(status.details, 'error details'); + server.shutdown(); + done(); }); }); }); @@ -136,46 +130,43 @@ describe('echo client', function() { * and the insecure echo client test */ describe('secure echo client', function() { it('should recieve echo responses', function(done) { - port_picker.nextAvailablePort(function(port) { - fs.readFile(ca_path, function(err, ca_data) { + fs.readFile(ca_path, function(err, ca_data) { + assert.ifError(err); + fs.readFile(key_path, function(err, key_data) { assert.ifError(err); - fs.readFile(key_path, function(err, key_data) { + fs.readFile(pem_path, function(err, pem_data) { assert.ifError(err); - fs.readFile(pem_path, function(err, pem_data) { - assert.ifError(err); - var creds = grpc.Credentials.createSsl(ca_data); - var server_creds = grpc.ServerCredentials.createSsl(null, - key_data, - pem_data); - - var server = new Server({'credentials' : server_creds}); - server.bind(port, true); - server.register('echo', echoHandler); - server.start(); - - var messages = ['echo1', 'echo2', 'echo3', 'echo4']; - var channel = new grpc.Channel(port, { - 'grpc.ssl_target_name_override' : 'foo.test.google.com', - 'credentials' : creds - }); - var stream = client.makeRequest( - channel, - 'echo'); - - _(messages).map(function(val) { - return new Buffer(val); - }).pipe(stream); - var index = 0; - stream.on('data', function(chunk) { - assert.equal(messages[index], chunk.toString()); - index += 1; - }); - stream.on('end', function() { - server.shutdown(); - done(); - }); + var creds = grpc.Credentials.createSsl(ca_data); + var server_creds = grpc.ServerCredentials.createSsl(null, + key_data, + pem_data); + + var server = new Server({'credentials' : server_creds}); + var port_num = server.bind('0.0.0.0:0', true); + server.register('echo', echoHandler); + server.start(); + + var messages = ['echo1', 'echo2', 'echo3', 'echo4']; + var channel = new grpc.Channel('localhost:' + port_num, { + 'grpc.ssl_target_name_override' : 'foo.test.google.com', + 'credentials' : creds + }); + var stream = client.makeRequest( + channel, + 'echo'); + + _(messages).map(function(val) { + return new Buffer(val); + }).pipe(stream); + var index = 0; + stream.on('data', function(chunk) { + assert.equal(messages[index], chunk.toString()); + index += 1; + }); + stream.on('end', function() { + server.shutdown(); + done(); }); - }); }); }); diff --git a/src/node/test/end_to_end_test.js b/src/node/test/end_to_end_test.js index 40bb5f3bbde27aed6c096cb0fc5b78ed01234838..db3834dbbadd0e4fc99acb3ddef56e464ba2dda8 100644 --- a/src/node/test/end_to_end_test.js +++ b/src/node/test/end_to_end_test.js @@ -33,7 +33,6 @@ var assert = require('assert'); var grpc = require('bindings')('grpc.node'); -var port_picker = require('../port_picker'); /** * This is used for testing functions with multiple asynchronous calls that @@ -58,143 +57,139 @@ function multiDone(done, count) { describe('end-to-end', function() { it('should start and end a request without error', function(complete) { - port_picker.nextAvailablePort(function(port) { - var server = new grpc.Server(); - var done = multiDone(function() { - complete(); - server.shutdown(); - }, 2); - server.addHttp2Port(port); - var channel = new grpc.Channel(port); - var deadline = new Date(); - deadline.setSeconds(deadline.getSeconds() + 3); - var status_text = 'xyz'; - var call = new grpc.Call(channel, - 'dummy_method', - deadline); - call.startInvoke(function(event) { - assert.strictEqual(event.type, - grpc.completionType.INVOKE_ACCEPTED); + var server = new grpc.Server(); + var done = multiDone(function() { + complete(); + server.shutdown(); + }, 2); + var port_num = server.addHttp2Port('0.0.0.0:0'); + var channel = new grpc.Channel('localhost:' + port_num); + var deadline = new Date(); + deadline.setSeconds(deadline.getSeconds() + 3); + var status_text = 'xyz'; + var call = new grpc.Call(channel, + 'dummy_method', + deadline); + call.startInvoke(function(event) { + assert.strictEqual(event.type, + grpc.completionType.INVOKE_ACCEPTED); - call.writesDone(function(event) { - assert.strictEqual(event.type, - grpc.completionType.FINISH_ACCEPTED); - assert.strictEqual(event.data, grpc.opError.OK); - }); - },function(event) { + call.writesDone(function(event) { assert.strictEqual(event.type, - grpc.completionType.CLIENT_METADATA_READ); - },function(event) { + grpc.completionType.FINISH_ACCEPTED); + assert.strictEqual(event.data, grpc.opError.OK); + }); + },function(event) { + assert.strictEqual(event.type, + grpc.completionType.CLIENT_METADATA_READ); + },function(event) { + assert.strictEqual(event.type, grpc.completionType.FINISHED); + var status = event.data; + assert.strictEqual(status.code, grpc.status.OK); + assert.strictEqual(status.details, status_text); + done(); + }, 0); + + server.start(); + server.requestCall(function(event) { + assert.strictEqual(event.type, grpc.completionType.SERVER_RPC_NEW); + var server_call = event.call; + assert.notEqual(server_call, null); + server_call.serverAccept(function(event) { assert.strictEqual(event.type, grpc.completionType.FINISHED); - var status = event.data; - assert.strictEqual(status.code, grpc.status.OK); - assert.strictEqual(status.details, status_text); - done(); }, 0); + server_call.serverEndInitialMetadata(0); + server_call.startWriteStatus( + grpc.status.OK, + status_text, + function(event) { + assert.strictEqual(event.type, + grpc.completionType.FINISH_ACCEPTED); + assert.strictEqual(event.data, grpc.opError.OK); + done(); + }); + }); + }); - server.start(); - server.requestCall(function(event) { - assert.strictEqual(event.type, grpc.completionType.SERVER_RPC_NEW); - var server_call = event.call; - assert.notEqual(server_call, null); - server_call.serverAccept(function(event) { - assert.strictEqual(event.type, grpc.completionType.FINISHED); - }, 0); - server_call.serverEndInitialMetadata(0); - server_call.startWriteStatus( - grpc.status.OK, - status_text, - function(event) { + it('should send and receive data without error', function(complete) { + var req_text = 'client_request'; + var reply_text = 'server_response'; + var server = new grpc.Server(); + var done = multiDone(function() { + complete(); + server.shutdown(); + }, 6); + var port_num = server.addHttp2Port('0.0.0.0:0'); + var channel = new grpc.Channel('localhost:' + port_num); + var deadline = new Date(); + deadline.setSeconds(deadline.getSeconds() + 3); + var status_text = 'success'; + var call = new grpc.Call(channel, + 'dummy_method', + deadline); + call.startInvoke(function(event) { + assert.strictEqual(event.type, + grpc.completionType.INVOKE_ACCEPTED); + call.startWrite( + new Buffer(req_text), + function(event) { + assert.strictEqual(event.type, + grpc.completionType.WRITE_ACCEPTED); + assert.strictEqual(event.data, grpc.opError.OK); + call.writesDone(function(event) { assert.strictEqual(event.type, grpc.completionType.FINISH_ACCEPTED); assert.strictEqual(event.data, grpc.opError.OK); done(); }); + }, 0); + call.startRead(function(event) { + assert.strictEqual(event.type, grpc.completionType.READ); + assert.strictEqual(event.data.toString(), reply_text); + done(); }); - }); - }); + },function(event) { + assert.strictEqual(event.type, + grpc.completionType.CLIENT_METADATA_READ); + done(); + },function(event) { + assert.strictEqual(event.type, grpc.completionType.FINISHED); + var status = event.data; + assert.strictEqual(status.code, grpc.status.OK); + assert.strictEqual(status.details, status_text); + done(); + }, 0); - it('should send and receive data without error', function(complete) { - port_picker.nextAvailablePort(function(port) { - var req_text = 'client_request'; - var reply_text = 'server_response'; - var server = new grpc.Server(); - var done = multiDone(function() { - complete(); - server.shutdown(); - }, 6); - server.addHttp2Port(port); - var channel = new grpc.Channel(port); - var deadline = new Date(); - deadline.setSeconds(deadline.getSeconds() + 3); - var status_text = 'success'; - var call = new grpc.Call(channel, - 'dummy_method', - deadline); - call.startInvoke(function(event) { - assert.strictEqual(event.type, - grpc.completionType.INVOKE_ACCEPTED); - call.startWrite( - new Buffer(req_text), + server.start(); + server.requestCall(function(event) { + assert.strictEqual(event.type, grpc.completionType.SERVER_RPC_NEW); + var server_call = event.call; + assert.notEqual(server_call, null); + server_call.serverAccept(function(event) { + assert.strictEqual(event.type, grpc.completionType.FINISHED); + done(); + }); + server_call.serverEndInitialMetadata(0); + server_call.startRead(function(event) { + assert.strictEqual(event.type, grpc.completionType.READ); + assert.strictEqual(event.data.toString(), req_text); + server_call.startWrite( + new Buffer(reply_text), function(event) { assert.strictEqual(event.type, grpc.completionType.WRITE_ACCEPTED); - assert.strictEqual(event.data, grpc.opError.OK); - call.writesDone(function(event) { - assert.strictEqual(event.type, - grpc.completionType.FINISH_ACCEPTED); - assert.strictEqual(event.data, grpc.opError.OK); - done(); - }); + assert.strictEqual(event.data, + grpc.opError.OK); + server_call.startWriteStatus( + grpc.status.OK, + status_text, + function(event) { + assert.strictEqual(event.type, + grpc.completionType.FINISH_ACCEPTED); + assert.strictEqual(event.data, grpc.opError.OK); + done(); + }); }, 0); - call.startRead(function(event) { - assert.strictEqual(event.type, grpc.completionType.READ); - assert.strictEqual(event.data.toString(), reply_text); - done(); - }); - },function(event) { - assert.strictEqual(event.type, - grpc.completionType.CLIENT_METADATA_READ); - done(); - },function(event) { - assert.strictEqual(event.type, grpc.completionType.FINISHED); - var status = event.data; - assert.strictEqual(status.code, grpc.status.OK); - assert.strictEqual(status.details, status_text); - done(); - }, 0); - - server.start(); - server.requestCall(function(event) { - assert.strictEqual(event.type, grpc.completionType.SERVER_RPC_NEW); - var server_call = event.call; - assert.notEqual(server_call, null); - server_call.serverAccept(function(event) { - assert.strictEqual(event.type, grpc.completionType.FINISHED); - done(); - }); - server_call.serverEndInitialMetadata(0); - server_call.startRead(function(event) { - assert.strictEqual(event.type, grpc.completionType.READ); - assert.strictEqual(event.data.toString(), req_text); - server_call.startWrite( - new Buffer(reply_text), - function(event) { - assert.strictEqual(event.type, - grpc.completionType.WRITE_ACCEPTED); - assert.strictEqual(event.data, - grpc.opError.OK); - server_call.startWriteStatus( - grpc.status.OK, - status_text, - function(event) { - assert.strictEqual(event.type, - grpc.completionType.FINISH_ACCEPTED); - assert.strictEqual(event.data, grpc.opError.OK); - done(); - }); - }, 0); - }); }); }); }); diff --git a/src/node/test/interop_sanity_test.js b/src/node/test/interop_sanity_test.js new file mode 100644 index 0000000000000000000000000000000000000000..410b050e8d2289ad3aa96747781dfc0f019a6442 --- /dev/null +++ b/src/node/test/interop_sanity_test.js @@ -0,0 +1,71 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +var interop_server = require('../interop/interop_server.js'); +var interop_client = require('../interop/interop_client.js'); + +var server; + +var port; + +var name_override = 'foo.test.google.com'; + +describe('Interop tests', function() { + before(function(done) { + var server_obj = interop_server.getServer(0, true); + server = server_obj.server; + server.listen(); + port = 'localhost:' + server_obj.port; + done(); + }); + // This depends on not using a binary stream + it('should pass empty_unary', function(done) { + interop_client.runTest(port, name_override, 'empty_unary', true, done); + }); + it('should pass large_unary', function(done) { + interop_client.runTest(port, name_override, 'large_unary', true, done); + }); + it('should pass client_streaming', function(done) { + interop_client.runTest(port, name_override, 'client_streaming', true, done); + }); + it('should pass server_streaming', function(done) { + interop_client.runTest(port, name_override, 'server_streaming', true, done); + }); + it('should pass ping_pong', function(done) { + interop_client.runTest(port, name_override, 'ping_pong', true, done); + }); + // This depends on the new invoke API + it.skip('should pass empty_stream', function(done) { + interop_client.runTest(port, name_override, 'empty_stream', true, done); + }); +}); diff --git a/src/node/test/math_client_test.js b/src/node/test/math_client_test.js index 5b34a228ad3556bbec2ada419a6ddda14e1d92e9..0e365bf87060677810e6a9fcce2ceac76f534c89 100644 --- a/src/node/test/math_client_test.js +++ b/src/node/test/math_client_test.js @@ -32,83 +32,12 @@ */ var assert = require('assert'); -var ProtoBuf = require('protobufjs'); -var port_picker = require('../port_picker'); -var builder = ProtoBuf.loadProtoFile(__dirname + '/../examples/math.proto'); -var math = builder.build('math'); +var grpc = require('..'); +var math = grpc.load(__dirname + '/../examples/math.proto').math; -var client = require('../surface_client.js'); -var makeConstructor = client.makeClientConstructor; /** - * Get a function that deserializes a specific type of protobuf. - * @param {function()} cls The constructor of the message type to deserialize - * @return {function(Buffer):cls} The deserialization function - */ -function deserializeCls(cls) { - /** - * Deserialize a buffer to a message object - * @param {Buffer} arg_buf The buffer to deserialize - * @return {cls} The resulting object - */ - return function deserialize(arg_buf) { - return cls.decode(arg_buf); - }; -} - -/** - * Get a function that serializes objects to a buffer by protobuf class. - * @param {function()} Cls The constructor of the message type to serialize - * @return {function(Cls):Buffer} The serialization function - */ -function serializeCls(Cls) { - /** - * Serialize an object to a Buffer - * @param {Object} arg The object to serialize - * @return {Buffer} The serialized object - */ - return function serialize(arg) { - return new Buffer(new Cls(arg).encode().toBuffer()); - }; -} - -/* This function call creates a client constructor for clients that expose the - * four specified methods. This specifies how to serialize messages that the - * client sends and deserialize messages that the server sends, and whether the - * client or the server will send a stream of messages, for each method. This - * also specifies a prefix that will be added to method names when sending them - * on the wire. This function call and all of the preceding code in this file - * are intended to approximate what the generated code will look like for the - * math client */ -var MathClient = makeConstructor({ - Div: { - serialize: serializeCls(math.DivArgs), - deserialize: deserializeCls(math.DivReply), - client_stream: false, - server_stream: false - }, - Fib: { - serialize: serializeCls(math.FibArgs), - deserialize: deserializeCls(math.Num), - client_stream: false, - server_stream: true - }, - Sum: { - serialize: serializeCls(math.Num), - deserialize: deserializeCls(math.Num), - client_stream: true, - server_stream: false - }, - DivMany: { - serialize: serializeCls(math.DivArgs), - deserialize: deserializeCls(math.DivReply), - client_stream: true, - server_stream: true - } -}, '/Math/'); - -/** - * Channel to use to make requests to a running server. + * Client to use to make requests to a running server. */ var math_client; @@ -120,29 +49,28 @@ var server = require('../examples/math_server.js'); describe('Math client', function() { before(function(done) { - port_picker.nextAvailablePort(function(port) { - server.bind(port).listen(); - math_client = new MathClient(port); - done(); - }); + var port_num = server.bind('0.0.0.0:0'); + server.listen(); + math_client = new math.Math('localhost:' + port_num); + done(); }); after(function() { server.shutdown(); }); it('should handle a single request', function(done) { var arg = {dividend: 7, divisor: 4}; - var call = math_client.Div(arg, function handleDivResult(err, value) { + var call = math_client.div(arg, function handleDivResult(err, value) { assert.ifError(err); assert.equal(value.quotient, 1); assert.equal(value.remainder, 3); }); call.on('status', function checkStatus(status) { - assert.strictEqual(status.code, client.status.OK); + assert.strictEqual(status.code, grpc.status.OK); done(); }); }); it('should handle a server streaming request', function(done) { - var call = math_client.Fib({limit: 7}); + var call = math_client.fib({limit: 7}); var expected_results = [1, 1, 2, 3, 5, 8, 13]; var next_expected = 0; call.on('data', function checkResponse(value) { @@ -150,12 +78,12 @@ describe('Math client', function() { next_expected += 1; }); call.on('status', function checkStatus(status) { - assert.strictEqual(status.code, client.status.OK); + assert.strictEqual(status.code, grpc.status.OK); done(); }); }); it('should handle a client streaming request', function(done) { - var call = math_client.Sum(function handleSumResult(err, value) { + var call = math_client.sum(function handleSumResult(err, value) { assert.ifError(err); assert.equal(value.num, 21); }); @@ -164,7 +92,7 @@ describe('Math client', function() { } call.end(); call.on('status', function checkStatus(status) { - assert.strictEqual(status.code, client.status.OK); + assert.strictEqual(status.code, grpc.status.OK); done(); }); }); @@ -173,7 +101,7 @@ describe('Math client', function() { assert.equal(value.quotient, index); assert.equal(value.remainder, 1); } - var call = math_client.DivMany(); + var call = math_client.divMany(); var response_index = 0; call.on('data', function(value) { checkResponse(response_index, value); @@ -184,7 +112,7 @@ describe('Math client', function() { } call.end(); call.on('status', function checkStatus(status) { - assert.strictEqual(status.code, client.status.OK); + assert.strictEqual(status.code, grpc.status.OK); done(); }); }); diff --git a/src/node/test/server_test.js b/src/node/test/server_test.js index 79f7b3294858ca84d7623dfbe647861c684ca5e7..61aef4677e3c1ee329f7946886e4e26e81e212fd 100644 --- a/src/node/test/server_test.js +++ b/src/node/test/server_test.js @@ -34,7 +34,6 @@ var assert = require('assert'); var grpc = require('bindings')('grpc.node'); var Server = require('../server'); -var port_picker = require('../port_picker'); /** * This is used for testing functions with multiple asynchronous calls that @@ -68,54 +67,52 @@ function echoHandler(stream) { describe('echo server', function() { it('should echo inputs as responses', function(done) { done = multiDone(done, 4); - port_picker.nextAvailablePort(function(port) { - var server = new Server(); - server.bind(port); - server.register('echo', echoHandler); - server.start(); + var server = new Server(); + var port_num = server.bind('[::]:0'); + server.register('echo', echoHandler); + server.start(); - var req_text = 'echo test string'; - var status_text = 'OK'; + var req_text = 'echo test string'; + var status_text = 'OK'; - var channel = new grpc.Channel(port); - var deadline = new Date(); - deadline.setSeconds(deadline.getSeconds() + 3); - var call = new grpc.Call(channel, - 'echo', - deadline); - call.startInvoke(function(event) { - assert.strictEqual(event.type, - grpc.completionType.INVOKE_ACCEPTED); - call.startWrite( - new Buffer(req_text), - function(event) { + var channel = new grpc.Channel('localhost:' + port_num); + var deadline = new Date(); + deadline.setSeconds(deadline.getSeconds() + 3); + var call = new grpc.Call(channel, + 'echo', + deadline); + call.startInvoke(function(event) { + assert.strictEqual(event.type, + grpc.completionType.INVOKE_ACCEPTED); + call.startWrite( + new Buffer(req_text), + function(event) { + assert.strictEqual(event.type, + grpc.completionType.WRITE_ACCEPTED); + assert.strictEqual(event.data, grpc.opError.OK); + call.writesDone(function(event) { assert.strictEqual(event.type, - grpc.completionType.WRITE_ACCEPTED); + grpc.completionType.FINISH_ACCEPTED); assert.strictEqual(event.data, grpc.opError.OK); - call.writesDone(function(event) { - assert.strictEqual(event.type, - grpc.completionType.FINISH_ACCEPTED); - assert.strictEqual(event.data, grpc.opError.OK); - done(); - }); - }, 0); - call.startRead(function(event) { - assert.strictEqual(event.type, grpc.completionType.READ); - assert.strictEqual(event.data.toString(), req_text); - done(); - }); - },function(event) { - assert.strictEqual(event.type, - grpc.completionType.CLIENT_METADATA_READ); + done(); + }); + }, 0); + call.startRead(function(event) { + assert.strictEqual(event.type, grpc.completionType.READ); + assert.strictEqual(event.data.toString(), req_text); done(); - },function(event) { - assert.strictEqual(event.type, grpc.completionType.FINISHED); - var status = event.data; - assert.strictEqual(status.code, grpc.status.OK); - assert.strictEqual(status.details, status_text); - server.shutdown(); - done(); - }, 0); - }); + }); + },function(event) { + assert.strictEqual(event.type, + grpc.completionType.CLIENT_METADATA_READ); + done(); + },function(event) { + assert.strictEqual(event.type, grpc.completionType.FINISHED); + var status = event.data; + assert.strictEqual(status.code, grpc.status.OK); + assert.strictEqual(status.details, status_text); + server.shutdown(); + done(); + }, 0); }); }); diff --git a/src/node/test/surface_test.js b/src/node/test/surface_test.js new file mode 100644 index 0000000000000000000000000000000000000000..34f1a156eb99c62b19d2ca4f6c0feddb9adb5264 --- /dev/null +++ b/src/node/test/surface_test.js @@ -0,0 +1,75 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +var assert = require('assert'); + +var surface_server = require('../surface_server.js'); + +var ProtoBuf = require('protobufjs'); + +var grpc = require('..'); + +var math_proto = ProtoBuf.loadProtoFile(__dirname + '/../examples/math.proto'); + +var mathService = math_proto.lookup('math.Math'); + +describe('Surface server constructor', function() { + it('Should fail with conflicting method names', function() { + assert.throws(function() { + grpc.buildServer([mathService, mathService]); + }); + }); + it('Should succeed with a single service', function() { + assert.doesNotThrow(function() { + grpc.buildServer([mathService]); + }); + }); + it('Should fail with missing handlers', function() { + var Server = grpc.buildServer([mathService]); + assert.throws(function() { + new Server({ + 'math.Math': { + 'div': function() {}, + 'divMany': function() {}, + 'fib': function() {} + } + }); + }, /math.Math.Sum/); + }); + it('Should fail with no handlers for the service', function() { + var Server = grpc.buildServer([mathService]); + assert.throws(function() { + new Server({}); + }, /math.Math/); + }); +}); diff --git a/src/php/.gitignore b/src/php/.gitignore old mode 100755 new mode 100644 index 00fbd965dc25cb0221a1e23c2e03fc262c73d48b..0bb5f8e956678468b940e17e989b1f0a7b1ddf04 --- a/src/php/.gitignore +++ b/src/php/.gitignore @@ -15,4 +15,7 @@ run-tests.php install-sh libtool missing -mkinstalldirs \ No newline at end of file +mkinstalldirs + +ext/grpc/ltmain.sh + diff --git a/src/php/bin/run_tests.sh b/src/php/bin/run_tests.sh index cf4cc78a52e56390542ce088e07c9d8a129b1c55..28282c3e37c39d3b93a6cf5a56abe84349d22dc7 100755 --- a/src/php/bin/run_tests.sh +++ b/src/php/bin/run_tests.sh @@ -1,5 +1,17 @@ +#!/bin/sh # Loads the local shared library, and runs all of the test cases in tests/ # against it +set -e cd $(dirname $0) -php -d extension_dir=../ext/grpc/modules/ -d extension=grpc.so \ - /usr/local/bin/phpunit -v --debug --strict ../tests/unit_tests +default_extension_dir=`php -i | grep extension_dir | sed 's/.*=> //g'` + +# sym-link in system supplied extensions +for f in $default_extension_dir/*.so +do + ln -s $f ../ext/grpc/modules/$(basename $f) &> /dev/null || true +done + +php \ + -d extension_dir=../ext/grpc/modules/ \ + -d extension=grpc.so \ + `which phpunit` -v --debug --strict ../tests/unit_tests diff --git a/src/php/ext/grpc/call.c b/src/php/ext/grpc/call.c index c01af34e958d65b753323d41780719b6f1b560c3..410efbce681fa5812df1784dd2040cead1aa8cc2 100644 --- a/src/php/ext/grpc/call.c +++ b/src/php/ext/grpc/call.c @@ -423,16 +423,15 @@ PHP_METHOD(Call, start_read) { static zend_function_entry call_methods[] = { PHP_ME(Call, __construct, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR) - PHP_ME(Call, server_accept, NULL, ZEND_ACC_PUBLIC) - PHP_ME(Call, server_end_initial_metadata, NULL, ZEND_ACC_PUBLIC) - PHP_ME(Call, add_metadata, NULL, ZEND_ACC_PUBLIC) PHP_ME( - Call, cancel, NULL, ZEND_ACC_PUBLIC) - PHP_ME(Call, start_invoke, NULL, ZEND_ACC_PUBLIC) PHP_ME( - Call, start_read, NULL, ZEND_ACC_PUBLIC) - PHP_ME(Call, start_write, NULL, ZEND_ACC_PUBLIC) PHP_ME( - Call, start_write_status, NULL, ZEND_ACC_PUBLIC) - PHP_ME(Call, writes_done, NULL, ZEND_ACC_PUBLIC) - PHP_FE_END}; + PHP_ME(Call, server_accept, NULL, ZEND_ACC_PUBLIC) + PHP_ME(Call, server_end_initial_metadata, NULL, ZEND_ACC_PUBLIC) + PHP_ME(Call, add_metadata, NULL, ZEND_ACC_PUBLIC) + PHP_ME(Call, cancel, NULL, ZEND_ACC_PUBLIC) + PHP_ME(Call, start_invoke, NULL, ZEND_ACC_PUBLIC) + PHP_ME(Call, start_read, NULL, ZEND_ACC_PUBLIC) + PHP_ME(Call, start_write, NULL, ZEND_ACC_PUBLIC) + PHP_ME(Call, start_write_status, NULL, ZEND_ACC_PUBLIC) + PHP_ME(Call, writes_done, NULL, ZEND_ACC_PUBLIC) PHP_FE_END}; void grpc_init_call(TSRMLS_D) { zend_class_entry ce; diff --git a/src/php/ext/grpc/channel.c b/src/php/ext/grpc/channel.c index f0e4153b22aa0eb40532d16787a5ffffa00e0a0f..2ab229f5e6700a8fcc8bf2a4e885d7873c0e2cdb 100644 --- a/src/php/ext/grpc/channel.c +++ b/src/php/ext/grpc/channel.c @@ -155,7 +155,7 @@ PHP_METHOD(Channel, close) { static zend_function_entry channel_methods[] = { PHP_ME(Channel, __construct, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR) - PHP_ME(Channel, close, NULL, ZEND_ACC_PUBLIC) PHP_FE_END}; + PHP_ME(Channel, close, NULL, ZEND_ACC_PUBLIC) PHP_FE_END}; void grpc_init_channel(TSRMLS_D) { zend_class_entry ce; diff --git a/src/php/ext/grpc/completion_queue.c b/src/php/ext/grpc/completion_queue.c index 9785eab8cc1165663c2105877fe78e30fb66342e..3a93bfcff76486052b19d6ed7b2f4ed96dabf39f 100644 --- a/src/php/ext/grpc/completion_queue.c +++ b/src/php/ext/grpc/completion_queue.c @@ -63,8 +63,8 @@ zend_object_value create_wrapped_grpc_completion_queue( */ PHP_METHOD(CompletionQueue, __construct) { wrapped_grpc_completion_queue *queue = - (wrapped_grpc_completion_queue *)zend_object_store_get_object( - getThis() TSRMLS_CC); + (wrapped_grpc_completion_queue *)zend_object_store_get_object(getThis() + TSRMLS_CC); queue->wrapped = grpc_completion_queue_create(); } @@ -86,8 +86,8 @@ PHP_METHOD(CompletionQueue, next) { return; } wrapped_grpc_completion_queue *completion_queue = - (wrapped_grpc_completion_queue *)zend_object_store_get_object( - getThis() TSRMLS_CC); + (wrapped_grpc_completion_queue *)zend_object_store_get_object(getThis() + TSRMLS_CC); wrapped_grpc_timeval *wrapped_timeout = (wrapped_grpc_timeval *)zend_object_store_get_object(timeout TSRMLS_CC); grpc_event *event = grpc_completion_queue_next(completion_queue->wrapped, @@ -109,8 +109,8 @@ PHP_METHOD(CompletionQueue, pluck) { "pluck needs a long and a Timeval", 1 TSRMLS_CC); } wrapped_grpc_completion_queue *completion_queue = - (wrapped_grpc_completion_queue *)zend_object_store_get_object( - getThis() TSRMLS_CC); + (wrapped_grpc_completion_queue *)zend_object_store_get_object(getThis() + TSRMLS_CC); wrapped_grpc_timeval *wrapped_timeout = (wrapped_grpc_timeval *)zend_object_store_get_object(timeout TSRMLS_CC); grpc_event *event = grpc_completion_queue_pluck( @@ -124,8 +124,8 @@ PHP_METHOD(CompletionQueue, pluck) { static zend_function_entry completion_queue_methods[] = { PHP_ME(CompletionQueue, __construct, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR) - PHP_ME(CompletionQueue, next, NULL, ZEND_ACC_PUBLIC) - PHP_ME(CompletionQueue, pluck, NULL, ZEND_ACC_PUBLIC) PHP_FE_END}; + PHP_ME(CompletionQueue, next, NULL, ZEND_ACC_PUBLIC) + PHP_ME(CompletionQueue, pluck, NULL, ZEND_ACC_PUBLIC) PHP_FE_END}; void grpc_init_completion_queue(TSRMLS_D) { zend_class_entry ce; diff --git a/src/php/ext/grpc/config.m4 b/src/php/ext/grpc/config.m4 index d7d13f413eafa6a07ae1662119ee38a98d37a734..27c67781e78b6252a79c5579345d6bfe9abf2a6a 100755 --- a/src/php/ext/grpc/config.m4 +++ b/src/php/ext/grpc/config.m4 @@ -38,7 +38,9 @@ if test "$PHP_GRPC" != "no"; then PHP_ADD_LIBRARY(rt,,GRPC_SHARED_LIBADD) PHP_ADD_LIBRARY(rt) - PHP_ADD_LIBPATH($GRPC_DIR/lib) + GRPC_LIBDIR=$GRPC_DIR/${GRPC_LIB_SUBDIR-lib} + + PHP_ADD_LIBPATH($GRPC_LIBDIR) PHP_CHECK_LIBRARY(gpr,gpr_now, [ @@ -48,18 +50,9 @@ if test "$PHP_GRPC" != "no"; then ],[ AC_MSG_ERROR([wrong gpr lib version or lib not found]) ],[ - -L$GRPC_DIR/lib + -L$GRPC_LIBDIR ]) - PHP_ADD_LIBRARY(event,,GRPC_SHARED_LIBADD) - PHP_ADD_LIBRARY(event) - - PHP_ADD_LIBRARY(event_pthreads,,GRPC_SHARED_LIBADD) - PHP_ADD_LIBRARY(event_pthreads) - - PHP_ADD_LIBRARY(event_core,,GRPC_SHARED_LIBADD) - PHP_ADD_LIBRARY(event_core) - PHP_CHECK_LIBRARY(grpc,grpc_channel_destroy, [ PHP_ADD_LIBRARY(grpc,,GRPC_SHARED_LIBADD) @@ -68,7 +61,7 @@ if test "$PHP_GRPC" != "no"; then ],[ AC_MSG_ERROR([wrong grpc lib version or lib not found]) ],[ - -L$GRPC_DIR/lib + -L$GRPC_LIBDIR ]) PHP_SUBST(GRPC_SHARED_LIBADD) diff --git a/src/php/ext/grpc/credentials.c b/src/php/ext/grpc/credentials.c index f486272531d208af5f85ebe58009bbbbfeb6463c..c63196bf909ef062f204d152bd9750d12cedb98d 100644 --- a/src/php/ext/grpc/credentials.c +++ b/src/php/ext/grpc/credentials.c @@ -77,24 +77,23 @@ PHP_METHOD(Credentials, createDefault) { */ PHP_METHOD(Credentials, createSsl) { char *pem_root_certs; - char *pem_private_key = NULL; - char *pem_cert_chain = NULL; + grpc_ssl_pem_key_cert_pair pem_key_cert_pair; int root_certs_length, private_key_length = 0, cert_chain_length = 0; /* "s|s!s! == 1 string, 2 optional nullable strings */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s!s!", &pem_root_certs, &root_certs_length, - &pem_private_key, &private_key_length, - &pem_cert_chain, &cert_chain_length) == FAILURE) { + &pem_key_cert_pair.private_key, &private_key_length, + &pem_key_cert_pair.cert_chain, + &cert_chain_length) == FAILURE) { zend_throw_exception(spl_ce_InvalidArgumentException, "createSsl expects 1 to 3 strings", 1 TSRMLS_CC); return; } grpc_credentials *creds = grpc_ssl_credentials_create( - (unsigned char *)pem_root_certs, (size_t)root_certs_length, - (unsigned char *)pem_private_key, (size_t)private_key_length, - (unsigned char *)pem_cert_chain, (size_t)cert_chain_length); + pem_root_certs, + pem_key_cert_pair.private_key == NULL ? NULL : &pem_key_cert_pair); zval *creds_object = grpc_php_wrap_credentials(creds); RETURN_DESTROY_ZVAL(creds_object); } @@ -151,13 +150,12 @@ PHP_METHOD(Credentials, createFake) { static zend_function_entry credentials_methods[] = { PHP_ME(Credentials, createDefault, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC) - PHP_ME(Credentials, createSsl, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC) - PHP_ME(Credentials, createComposite, NULL, - ZEND_ACC_PUBLIC | ZEND_ACC_STATIC) - PHP_ME(Credentials, createGce, NULL, - ZEND_ACC_PUBLIC | ZEND_ACC_STATIC) - PHP_ME(Credentials, createFake, NULL, - ZEND_ACC_PUBLIC | ZEND_ACC_STATIC) PHP_FE_END}; + PHP_ME(Credentials, createSsl, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC) + PHP_ME(Credentials, createComposite, NULL, + ZEND_ACC_PUBLIC | ZEND_ACC_STATIC) + PHP_ME(Credentials, createGce, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC) + PHP_ME(Credentials, createFake, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC) + PHP_FE_END}; void grpc_init_credentials(TSRMLS_D) { zend_class_entry ce; diff --git a/src/php/ext/grpc/php_grpc.c b/src/php/ext/grpc/php_grpc.c index c1042293aa42d195c04265107d4e3a05e0973a33..e8b4643a582ec6153a5436793153469ea09d2f40 100644 --- a/src/php/ext/grpc/php_grpc.c +++ b/src/php/ext/grpc/php_grpc.c @@ -33,7 +33,8 @@ zend_module_entry grpc_module_entry = { #if ZEND_MODULE_API_NO >= 20010901 STANDARD_MODULE_HEADER, #endif - "grpc", grpc_functions, PHP_MINIT(grpc), PHP_MSHUTDOWN(grpc), NULL, NULL, + "grpc", grpc_functions, PHP_MINIT(grpc), + PHP_MSHUTDOWN(grpc), NULL, NULL, PHP_MINFO(grpc), #if ZEND_MODULE_API_NO >= 20010901 PHP_GRPC_VERSION, diff --git a/src/php/ext/grpc/server.c b/src/php/ext/grpc/server.c index f484375712075ca9500d8c17d643e600364bd5d6..38777f3d541521115aa8773d7e2868fb3fea67f1 100644 --- a/src/php/ext/grpc/server.c +++ b/src/php/ext/grpc/server.c @@ -176,10 +176,10 @@ PHP_METHOD(Server, start) { static zend_function_entry server_methods[] = { PHP_ME(Server, __construct, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR) - PHP_ME(Server, request_call, NULL, ZEND_ACC_PUBLIC) - PHP_ME(Server, add_http2_port, NULL, ZEND_ACC_PUBLIC) - PHP_ME(Server, add_secure_http2_port, NULL, ZEND_ACC_PUBLIC) - PHP_ME(Server, start, NULL, ZEND_ACC_PUBLIC) PHP_FE_END}; + PHP_ME(Server, request_call, NULL, ZEND_ACC_PUBLIC) + PHP_ME(Server, add_http2_port, NULL, ZEND_ACC_PUBLIC) + PHP_ME(Server, add_secure_http2_port, NULL, ZEND_ACC_PUBLIC) + PHP_ME(Server, start, NULL, ZEND_ACC_PUBLIC) PHP_FE_END}; void grpc_init_server(TSRMLS_D) { zend_class_entry ce; diff --git a/src/php/ext/grpc/server_credentials.c b/src/php/ext/grpc/server_credentials.c index 5b9ab3390d7412aa78afc200fc409bef52e19303..3d43d6a78c704950eab5de445ffb7fd5ec5adf30 100644 --- a/src/php/ext/grpc/server_credentials.c +++ b/src/php/ext/grpc/server_credentials.c @@ -66,24 +66,22 @@ zval *grpc_php_wrap_server_credentials(grpc_server_credentials *wrapped) { */ PHP_METHOD(ServerCredentials, createSsl) { char *pem_root_certs = 0; - char *pem_private_key; - char *pem_cert_chain; + grpc_ssl_pem_key_cert_pair pem_key_cert_pair; int root_certs_length = 0, private_key_length, cert_chain_length; /* "s!ss" == 1 nullable string, 2 strings */ + /* TODO: support multiple key cert pairs. */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s!ss", &pem_root_certs, - &root_certs_length, &pem_private_key, - &private_key_length, &pem_cert_chain, + &root_certs_length, &pem_key_cert_pair.private_key, + &private_key_length, &pem_key_cert_pair.cert_chain, &cert_chain_length) == FAILURE) { zend_throw_exception(spl_ce_InvalidArgumentException, "createSsl expects 3 strings", 1 TSRMLS_CC); return; } - grpc_server_credentials *creds = grpc_ssl_server_credentials_create( - (unsigned char *)pem_root_certs, (size_t)root_certs_length, - (unsigned char *)pem_private_key, (size_t)private_key_length, - (unsigned char *)pem_cert_chain, (size_t)cert_chain_length); + grpc_server_credentials *creds = + grpc_ssl_server_credentials_create(pem_root_certs, &pem_key_cert_pair, 1); zval *creds_object = grpc_php_wrap_server_credentials(creds); RETURN_DESTROY_ZVAL(creds_object); } @@ -102,8 +100,8 @@ PHP_METHOD(ServerCredentials, createFake) { static zend_function_entry server_credentials_methods[] = { PHP_ME(ServerCredentials, createSsl, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC) - PHP_ME(ServerCredentials, createFake, NULL, - ZEND_ACC_PUBLIC | ZEND_ACC_STATIC) PHP_FE_END}; + PHP_ME(ServerCredentials, createFake, NULL, + ZEND_ACC_PUBLIC | ZEND_ACC_STATIC) PHP_FE_END}; void grpc_init_server_credentials(TSRMLS_D) { zend_class_entry ce; diff --git a/src/php/ext/grpc/timeval.c b/src/php/ext/grpc/timeval.c index a5508115e47ddf485e199e1da08eff2219c76f17..cbbbf3791562a10a4ac0da383fb2c9a3e06042a5 100644 --- a/src/php/ext/grpc/timeval.c +++ b/src/php/ext/grpc/timeval.c @@ -217,20 +217,16 @@ PHP_METHOD(Timeval, sleep_until) { } static zend_function_entry timeval_methods[] = { - PHP_ME(Timeval, __construct, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR) PHP_ME( - Timeval, add, NULL, - ZEND_ACC_PUBLIC) PHP_ME(Timeval, compare, NULL, - ZEND_ACC_PUBLIC | ZEND_ACC_STATIC) - PHP_ME(Timeval, inf_future, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC) - PHP_ME(Timeval, inf_past, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC) - PHP_ME(Timeval, now, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC) - PHP_ME(Timeval, similar, NULL, - ZEND_ACC_PUBLIC | ZEND_ACC_STATIC) - PHP_ME(Timeval, sleep_until, NULL, ZEND_ACC_PUBLIC) - PHP_ME(Timeval, subtract, NULL, ZEND_ACC_PUBLIC) - PHP_ME(Timeval, zero, NULL, - ZEND_ACC_PUBLIC | ZEND_ACC_STATIC) - PHP_FE_END}; + PHP_ME(Timeval, __construct, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR) + PHP_ME(Timeval, add, NULL, ZEND_ACC_PUBLIC) + PHP_ME(Timeval, compare, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC) + PHP_ME(Timeval, inf_future, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC) + PHP_ME(Timeval, inf_past, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC) + PHP_ME(Timeval, now, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC) + PHP_ME(Timeval, similar, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC) + PHP_ME(Timeval, sleep_until, NULL, ZEND_ACC_PUBLIC) + PHP_ME(Timeval, subtract, NULL, ZEND_ACC_PUBLIC) + PHP_ME(Timeval, zero, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC) PHP_FE_END}; void grpc_init_timeval(TSRMLS_D) { zend_class_entry ce; diff --git a/src/python/__init__.py b/src/python/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/python/_framework/__init__.py b/src/python/_framework/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/python/_framework/foundation/__init__.py b/src/python/_framework/foundation/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/python/_framework/foundation/_logging_pool_test.py b/src/python/_framework/foundation/_logging_pool_test.py new file mode 100644 index 0000000000000000000000000000000000000000..ffe07c788da9a9186e11d353380e724a159594be --- /dev/null +++ b/src/python/_framework/foundation/_logging_pool_test.py @@ -0,0 +1,64 @@ +# 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. + +"""Tests for google3.net.rpc.python.framework.foundation.logging_pool.""" + +import unittest + +from _framework.foundation import logging_pool + +_POOL_SIZE = 16 + + +class LoggingPoolTest(unittest.TestCase): + + def testUpAndDown(self): + pool = logging_pool.pool(_POOL_SIZE) + pool.shutdown(wait=True) + + with logging_pool.pool(_POOL_SIZE) as pool: + self.assertIsNotNone(pool) + + def testTaskExecuted(self): + test_list = [] + + with logging_pool.pool(_POOL_SIZE) as pool: + pool.submit(lambda: test_list.append(object())).result() + + self.assertTrue(test_list) + + def testException(self): + with logging_pool.pool(_POOL_SIZE) as pool: + raised_exception = pool.submit(lambda: 1/0).exception() + + self.assertIsNotNone(raised_exception) + + +if __name__ == '__main__': + unittest.main() diff --git a/src/python/_framework/foundation/logging_pool.py b/src/python/_framework/foundation/logging_pool.py new file mode 100644 index 0000000000000000000000000000000000000000..7c7a6eebfca16b62f350d082c3d14672bc74e67d --- /dev/null +++ b/src/python/_framework/foundation/logging_pool.py @@ -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. + +"""A thread pool that logs exceptions raised by tasks executed within it.""" + +import functools +import logging + +from concurrent import futures + + +def _wrap(behavior): + """Wraps an arbitrary callable behavior in exception-logging.""" + @functools.wraps(behavior) + def _wrapping(*args, **kwargs): + try: + return behavior(*args, **kwargs) + except Exception as e: + logging.exception('Unexpected exception from task run in logging pool!') + raise + return _wrapping + + +class _LoggingPool(object): + """An exception-logging futures.ThreadPoolExecutor-compatible thread pool.""" + + def __init__(self, backing_pool): + self._backing_pool = backing_pool + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + self._backing_pool.shutdown(wait=True) + + def submit(self, fn, *args, **kwargs): + return self._backing_pool.submit(_wrap(fn), *args, **kwargs) + + def map(self, func, *iterables, **kwargs): + return self._backing_pool.map( + _wrap(func), *iterables, timeout=kwargs.get('timeout', None)) + + def shutdown(self, wait=True): + self._backing_pool.shutdown(wait=wait) + + +def pool(max_workers): + """Creates a thread pool that logs exceptions raised by the tasks within it. + + Args: + max_workers: The maximum number of worker threads to allow the pool. + + Returns: + A futures.ThreadPoolExecutor-compatible thread pool that logs exceptions + raised by the tasks executed within it. + """ + return _LoggingPool(futures.ThreadPoolExecutor(max_workers)) diff --git a/src/ruby/.rubocop.yml b/src/ruby/.rubocop.yml new file mode 100644 index 0000000000000000000000000000000000000000..47e382afa7032c6ad4e9dd90e98ab3c747302810 --- /dev/null +++ b/src/ruby/.rubocop.yml @@ -0,0 +1,10 @@ +# This is the configuration used to check the rubocop source code. + +inherit_from: .rubocop_todo.yml + +AllCops: + Exclude: + - 'bin/apis/**/*' + - 'bin/interop/test/**/*' + - 'bin/math.rb' + - 'bin/math_services.rb' diff --git a/src/ruby/.rubocop_todo.yml b/src/ruby/.rubocop_todo.yml new file mode 100644 index 0000000000000000000000000000000000000000..d5bb55e5a84590146a110d0e8c1375d69718a7e3 --- /dev/null +++ b/src/ruby/.rubocop_todo.yml @@ -0,0 +1,52 @@ +# This configuration was generated by `rubocop --auto-gen-config` +# on 2015-01-16 02:30:04 -0800 using RuboCop version 0.28.0. +# 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 +Metrics/AbcSize: + Max: 39 + +# Offense count: 3 +# Configuration parameters: CountComments. +Metrics/ClassLength: + Max: 231 + +# Offense count: 2 +Metrics/CyclomaticComplexity: + Max: 8 + +# Offense count: 36 +# Configuration parameters: CountComments. +Metrics/MethodLength: + Max: 37 + +# Offense count: 8 +# Configuration parameters: CountKeywordArgs. +Metrics/ParameterLists: + Max: 8 + +# Offense count: 2 +Metrics/PerceivedComplexity: + Max: 10 + +# Offense count: 7 +# Configuration parameters: AllowedVariables. +Style/GlobalVars: + Enabled: false + +# Offense count: 1 +# Configuration parameters: EnforcedStyle, MinBodyLength, SupportedStyles. +Style/Next: + Enabled: false + +# Offense count: 2 +# Configuration parameters: Methods. +Style/SingleLineBlockParams: + Enabled: false diff --git a/src/ruby/Rakefile b/src/ruby/Rakefile index 0a0fbceccacef2d4dfcf693a470e2358bea2da50..6ba9a97c893fb3692c8abe91718d75fa1d11bacf 100755 --- a/src/ruby/Rakefile +++ b/src/ruby/Rakefile @@ -1,46 +1,44 @@ # -*- ruby -*- require 'rake/extensiontask' require 'rspec/core/rake_task' +require 'rubocop/rake_task' +desc 'Run Rubocop to check for style violations' +RuboCop::RakeTask.new Rake::ExtensionTask.new 'grpc' do |ext| ext.lib_dir = File.join('lib', 'grpc') end SPEC_SUITES = [ - { :id => :wrapper, :title => 'wrapper layer', :files => %w(spec/*.rb) }, - { :id => :idiomatic, :title => 'idiomatic layer', :dir => %w(spec/generic), - :tag => '~bidi' }, - { :id => :bidi, :title => 'bidi tests', :dir => %w(spec/generic), - :tag => 'bidi' } + { id: :wrapper, title: 'wrapper layer', files: %w(spec/*.rb) }, + { id: :idiomatic, title: 'idiomatic layer', dir: %w(spec/generic), + tag: '~bidi' }, + { id: :bidi, title: 'bidi tests', dir: %w(spec/generic), + tag: 'bidi' } ] -desc "Run all RSpec tests" +desc 'Run all RSpec tests' namespace :spec do namespace :suite do SPEC_SUITES.each do |suite| desc "Run all specs in #{suite[:title]} spec suite" RSpec::Core::RakeTask.new(suite[:id]) do |t| spec_files = [] - if suite[:files] - suite[:files].each { |f| spec_files += Dir[f] } - end + suite[:files].each { |f| spec_files += Dir[f] } if suite[:files] if suite[:dirs] suite[:dirs].each { |f| spec_files += Dir["#{f}/**/*_spec.rb"] } end t.pattern = spec_files - - if suite[:tag] - t.rspec_opts = "--tag #{suite[:tag]}" - end + t.rspec_opts = "--tag #{suite[:tag]}" if suite[:tag] end end end end -task :default => "spec:suite:idiomatic" # this should be spec:suite:bidi -task "spec:suite:wrapper" => :compile -task "spec:suite:idiomatic" => "spec:suite:wrapper" -task "spec:suite:bidi" => "spec:suite:idiomatic" +task default: 'spec:suite:idiomatic' # this should be spec:suite:bidi +task 'spec:suite:wrapper' => :compile +task 'spec:suite:idiomatic' => 'spec:suite:wrapper' +task 'spec:suite:bidi' => 'spec:suite:idiomatic' diff --git a/src/ruby/bin/interop/interop_client.rb b/src/ruby/bin/interop/interop_client.rb index 718b0fdb83eb648066156e859a7aa5eb691509c3..0ea7f376bea6efa747a1e83cc05f7f323da4f1bd 100755 --- a/src/ruby/bin/interop/interop_client.rb +++ b/src/ruby/bin/interop/interop_client.rb @@ -65,7 +65,7 @@ end # creates a Credentials from the test certificates. def test_creds certs = load_test_certs - creds = GRPC::Core::Credentials.new(certs[0]) + GRPC::Core::Credentials.new(certs[0]) end # creates a test stub that accesses host:port securely. @@ -73,15 +73,15 @@ def create_stub(host, port) address = "#{host}:#{port}" stub_opts = { :creds => test_creds, - GRPC::Core::Channel::SSL_TARGET => 'foo.test.google.com', + GRPC::Core::Channel::SSL_TARGET => 'foo.test.google.com' } logger.info("... connecting securely to #{address}") - stub = Grpc::Testing::TestService::Stub.new(address, **stub_opts) + Grpc::Testing::TestService::Stub.new(address, **stub_opts) end # produces a string of null chars (\0) of length l. def nulls(l) - raise 'requires #{l} to be +ve' if l < 0 + fail 'requires #{l} to be +ve' if l < 0 [].pack('x' * l).force_encoding('utf-8') end @@ -102,16 +102,16 @@ class PingPongPlayer def each_item return enum_for(:each_item) unless block_given? - req_cls, p_cls= StreamingOutputCallRequest, ResponseParameters # short + req_cls, p_cls = StreamingOutputCallRequest, ResponseParameters # short count = 0 @msg_sizes.each do |m| req_size, resp_size = m - req = req_cls.new(:payload => Payload.new(:body => nulls(req_size)), - :response_type => COMPRESSABLE, - :response_parameters => [p_cls.new(:size => resp_size)]) + req = req_cls.new(payload: Payload.new(body: nulls(req_size)), + response_type: :COMPRESSABLE, + response_parameters: [p_cls.new(size: resp_size)]) yield req resp = @queue.pop - assert_equal(PayloadType.lookup(COMPRESSABLE), resp.payload.type, + assert_equal(:COMPRESSABLE, resp.payload.type, 'payload type is wrong') assert_equal(resp_size, resp.payload.body.length, 'payload body #{i} has the wrong length') @@ -148,12 +148,14 @@ class NamedTests # ruby server # FAILED def large_unary - req_size, wanted_response_size = 271828, 314159 - payload = Payload.new(:type => COMPRESSABLE, :body => nulls(req_size)) - req = SimpleRequest.new(:response_type => COMPRESSABLE, - :response_size => wanted_response_size, - :payload => payload) + req_size, wanted_response_size = 271_828, 314_159 + payload = Payload.new(type: :COMPRESSABLE, body: nulls(req_size)) + req = SimpleRequest.new(response_type: :COMPRESSABLE, + response_size: wanted_response_size, + payload: payload) resp = @stub.unary_call(req) + assert_equal(:COMPRESSABLE, resp.payload.type, + 'large_unary: payload had the wrong type') assert_equal(wanted_response_size, resp.payload.body.length, 'large_unary: payload had the wrong length') assert_equal(nulls(wanted_response_size), resp.payload.body, @@ -166,31 +168,31 @@ class NamedTests # ruby server # FAILED def client_streaming - msg_sizes = [27182, 8, 1828, 45904] - wanted_aggregate_size = 74922 + msg_sizes = [27_182, 8, 1828, 45_904] + wanted_aggregate_size = 74_922 reqs = msg_sizes.map do |x| - req = Payload.new(:body => nulls(x)) - StreamingInputCallRequest.new(:payload => req) + req = Payload.new(body: nulls(x)) + StreamingInputCallRequest.new(payload: req) end resp = @stub.streaming_input_call(reqs) assert_equal(wanted_aggregate_size, resp.aggregated_payload_size, 'client_streaming: aggregate payload size is incorrect') p 'OK: client_streaming' - end + end # TESTING: # PASSED # ruby server # FAILED def server_streaming - msg_sizes = [31415, 9, 2653, 58979] - response_spec = msg_sizes.map { |s| ResponseParameters.new(:size => s) } - req = StreamingOutputCallRequest.new(:response_type => COMPRESSABLE, - :response_parameters => response_spec) + msg_sizes = [31_415, 9, 2653, 58_979] + response_spec = msg_sizes.map { |s| ResponseParameters.new(size: s) } + req = StreamingOutputCallRequest.new(response_type: :COMPRESSABLE, + response_parameters: response_spec) resps = @stub.streaming_output_call(req) resps.each_with_index do |r, i| assert i < msg_sizes.length, 'too many responses' - assert_equal(PayloadType.lookup(COMPRESSABLE), r.payload.type, + assert_equal(:COMPRESSABLE, r.payload.type, 'payload type is wrong') assert_equal(msg_sizes[i], r.payload.body.length, 'payload body #{i} has the wrong length') @@ -203,13 +205,12 @@ class NamedTests # ruby server # FAILED def ping_pong - msg_sizes = [[27182, 31415], [8, 9], [1828, 2653], [45904, 58979]] + msg_sizes = [[27_182, 31_415], [8, 9], [1828, 2653], [45_904, 58_979]] ppp = PingPongPlayer.new(msg_sizes) resps = @stub.full_duplex_call(ppp.each_item) resps.each { |r| ppp.queue.push(r) } p 'OK: ping_pong' end - end # validates the the command line options, returning them as a Hash. @@ -217,7 +218,7 @@ def parse_options options = { 'server_host' => nil, 'server_port' => nil, - 'test_case' => nil, + 'test_case' => nil } OptionParser.new do |opts| opts.banner = 'Usage: --server_host <server_host> --server_port server_port' @@ -228,17 +229,17 @@ def parse_options options['server_port'] = v end # instance_methods(false) gives only the methods defined in that class - test_cases = NamedTests.instance_methods(false).map { |t| t.to_s } + test_cases = NamedTests.instance_methods(false).map(&:to_s) test_case_list = test_cases.join(',') - opts.on("--test_case CODE", test_cases, {}, "select a test_case", + opts.on('--test_case CODE', test_cases, {}, 'select a test_case', " (#{test_case_list})") do |v| options['test_case'] = v end end.parse! - ['server_host', 'server_port', 'test_case'].each do |arg| + %w(server_host server_port test_case).each do |arg| if options[arg].nil? - raise OptionParser::MissingArgument.new("please specify --#{arg}") + fail(OptionParser::MissingArgument, "please specify --#{arg}") end end options diff --git a/src/ruby/bin/interop/interop_server.rb b/src/ruby/bin/interop/interop_server.rb index 63071f3ec2e6efa7adbb5e91f751ecfeb23082c5..1a08eb97dfef7faffa3df5e104ef6a2664855e6b 100755 --- a/src/ruby/bin/interop/interop_server.rb +++ b/src/ruby/bin/interop/interop_server.rb @@ -62,12 +62,12 @@ end # creates a ServerCredentials from the test certificates. def test_server_creds certs = load_test_certs - server_creds = GRPC::Core::ServerCredentials.new(nil, certs[1], certs[2]) + GRPC::Core::ServerCredentials.new(nil, certs[1], certs[2]) end # produces a string of null chars (\0) of length l. def nulls(l) - raise 'requires #{l} to be +ve' if l < 0 + fail 'requires #{l} to be +ve' if l < 0 [].pack('x' * l).force_encoding('utf-8') end @@ -86,7 +86,7 @@ class EnumeratorQueue loop do r = @q.pop break if r.equal?(@sentinel) - raise r if r.is_a?Exception + fail r if r.is_a? Exception yield r end end @@ -98,27 +98,27 @@ class TestTarget < Grpc::Testing::TestService::Service include Grpc::Testing include Grpc::Testing::PayloadType - def empty_call(empty, call) + def empty_call(_empty, _call) Empty.new end - def unary_call(simple_req, call) + def unary_call(simple_req, _call) req_size = simple_req.response_size - SimpleResponse.new(:payload => Payload.new(:type => COMPRESSABLE, - :body => nulls(req_size))) + SimpleResponse.new(payload: Payload.new(type: :COMPRESSABLE, + body: nulls(req_size))) end def streaming_input_call(call) sizes = call.each_remote_read.map { |x| x.payload.body.length } - sum = sizes.inject { |sum,x| sum + x } - StreamingInputCallResponse.new(:aggregated_payload_size => sum) + sum = sizes.inject { |s, x| s + x } + StreamingInputCallResponse.new(aggregated_payload_size: sum) end - def streaming_output_call(req, call) + def streaming_output_call(req, _call) cls = StreamingOutputCallResponse req.response_parameters.map do |p| - cls.new(:payload => Payload.new(:type => req.response_type, - :body => nulls(p.size))) + cls.new(payload: Payload.new(type: req.response_type, + body: nulls(p.size))) end end @@ -126,13 +126,13 @@ class TestTarget < Grpc::Testing::TestService::Service # reqs is a lazy Enumerator of the requests sent by the client. q = EnumeratorQueue.new(self) cls = StreamingOutputCallResponse - t = Thread.new do + Thread.new do begin reqs.each do |req| logger.info("read #{req.inspect}") resp_size = req.response_parameters[0].size - resp = cls.new(:payload => Payload.new(:type => req.response_type, - :body => nulls(resp_size))) + resp = cls.new(payload: Payload.new(type: req.response_type, + body: nulls(resp_size))) q.push(resp) end logger.info('finished reads') @@ -149,13 +149,12 @@ class TestTarget < Grpc::Testing::TestService::Service # currently used in any tests full_duplex_call(reqs) end - end # validates the the command line options, returning them as a Hash. def parse_options options = { - 'port' => nil, + 'port' => nil } OptionParser.new do |opts| opts.banner = 'Usage: --port port' @@ -165,7 +164,7 @@ def parse_options end.parse! if options['port'].nil? - raise OptionParser::MissingArgument.new("please specify --port") + fail(OptionParser::MissingArgument, 'please specify --port') end options end diff --git a/src/ruby/bin/math_client.rb b/src/ruby/bin/math_client.rb index 4df333d085d714c7fa2db94e3e692bcdffd34379..195406c8b3678108a93744ecfe24d4aee25510a1 100755 --- a/src/ruby/bin/math_client.rb +++ b/src/ruby/bin/math_client.rb @@ -29,7 +29,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - # Sample app that accesses a Calc service running on a Ruby gRPC server and # helps validate RpcServer as a gRPC server using proto2 serialization. # @@ -49,9 +48,9 @@ include GRPC::Core::TimeConsts def do_div(stub) logger.info('request_response') logger.info('----------------') - req = Math::DivArgs.new(:dividend => 7, :divisor => 3) + req = Math::DivArgs.new(dividend: 7, divisor: 3) logger.info("div(7/3): req=#{req.inspect}") - resp = stub.div(req, deadline=INFINITE_FUTURE) + resp = stub.div(req, INFINITE_FUTURE) logger.info("Answer: #{resp.inspect}") logger.info('----------------') end @@ -60,7 +59,7 @@ def do_sum(stub) # to make client streaming requests, pass an enumerable of the inputs logger.info('client_streamer') logger.info('---------------') - reqs = [1, 2, 3, 4, 5].map { |x| Math::Num.new(:num => x) } + reqs = [1, 2, 3, 4, 5].map { |x| Math::Num.new(num: x) } logger.info("sum(1, 2, 3, 4, 5): reqs=#{reqs.inspect}") resp = stub.sum(reqs) # reqs.is_a?(Enumerable) logger.info("Answer: #{resp.inspect}") @@ -70,9 +69,9 @@ end def do_fib(stub) logger.info('server_streamer') logger.info('----------------') - req = Math::FibArgs.new(:limit => 11) + req = Math::FibArgs.new(limit: 11) logger.info("fib(11): req=#{req.inspect}") - resp = stub.fib(req, deadline=INFINITE_FUTURE) + resp = stub.fib(req, INFINITE_FUTURE) resp.each do |r| logger.info("Answer: #{r.inspect}") end @@ -83,11 +82,11 @@ def do_div_many(stub) logger.info('bidi_streamer') logger.info('-------------') reqs = [] - reqs << Math::DivArgs.new(:dividend => 7, :divisor => 3) - reqs << Math::DivArgs.new(:dividend => 5, :divisor => 2) - reqs << Math::DivArgs.new(:dividend => 7, :divisor => 2) + reqs << Math::DivArgs.new(dividend: 7, divisor: 3) + reqs << Math::Di5AvArgs.new(dividend: 5, divisor: 2) + reqs << Math::DivArgs.new(dividend: 7, divisor: 2) logger.info("div(7/3), div(5/2), div(7/2): reqs=#{reqs.inspect}") - resp = stub.div_many(reqs, deadline=10) + resp = stub.div_many(reqs, 10) resp.each do |r| logger.info("Answer: #{r.inspect}") end @@ -103,7 +102,7 @@ end def test_creds certs = load_test_certs - creds = GRPC::Core::Credentials.new(certs[0]) + GRPC::Core::Credentials.new(certs[0]) end def main @@ -117,7 +116,7 @@ def main options['host'] = v end opts.on('-s', '--secure', 'access using test creds') do |v| - options['secure'] = true + options['secure'] = v end end.parse! @@ -128,7 +127,7 @@ def main if options['secure'] stub_opts = { :creds => test_creds, - GRPC::Core::Channel::SSL_TARGET => 'foo.test.google.com', + GRPC::Core::Channel::SSL_TARGET => 'foo.test.google.com' } p stub_opts p options['host'] diff --git a/src/ruby/bin/math_server.rb b/src/ruby/bin/math_server.rb index 0e47f71e6687fc252164b49f3056463c168431d2..55ee1d331410f0ed853b3bb20d4b0ec554b82657 100755 --- a/src/ruby/bin/math_server.rb +++ b/src/ruby/bin/math_server.rb @@ -46,9 +46,8 @@ require 'optparse' # Holds state for a fibonacci series class Fibber - def initialize(limit) - raise "bad limit: got #{limit}, want limit > 0" if limit < 1 + fail "bad limit: got #{limit}, want limit > 0" if limit < 1 @limit = limit end @@ -57,14 +56,14 @@ class Fibber idx, current, previous = 0, 1, 1 until idx == @limit if idx == 0 || idx == 1 - yield Math::Num.new(:num => 1) + yield Math::Num.new(num: 1) idx += 1 next end tmp = current current = previous + current previous = tmp - yield Math::Num.new(:num => current) + yield Math::Num.new(num: current) idx += 1 end end @@ -85,43 +84,41 @@ class EnumeratorQueue loop do r = @q.pop break if r.equal?(@sentinel) - raise r if r.is_a?Exception + fail r if r.is_a? Exception yield r end end - end # The Math::Math:: module occurs because the service has the same name as its # package. That practice should be avoided by defining real services. class Calculator < Math::Math::Service - - def div(div_args, call) + def div(div_args, _call) if div_args.divisor == 0 # To send non-OK status handlers raise a StatusError with the code and # and detail they want sent as a Status. - raise GRPC::StatusError.new(GRPC::Status::INVALID_ARGUMENT, - 'divisor cannot be 0') + fail GRPC::StatusError.new(GRPC::Status::INVALID_ARGUMENT, + 'divisor cannot be 0') end - Math::DivReply.new(:quotient => div_args.dividend/div_args.divisor, - :remainder => div_args.dividend % div_args.divisor) + Math::DivReply.new(quotient: div_args.dividend / div_args.divisor, + remainder: div_args.dividend % div_args.divisor) end def sum(call) # the requests are accesible as the Enumerator call#each_request - nums = call.each_remote_read.collect { |x| x.num } - sum = nums.inject { |sum,x| sum + x } - Math::Num.new(:num => sum) + nums = call.each_remote_read.collect(&:num) + sum = nums.inject { |s, x| s + x } + Math::Num.new(num: sum) end - def fib(fib_args, call) + def fib(fib_args, _call) if fib_args.limit < 1 - raise StatusError.new(Status::INVALID_ARGUMENT, 'limit must be >= 0') + fail StatusError.new(Status::INVALID_ARGUMENT, 'limit must be >= 0') end # return an Enumerator of Nums - Fibber.new(fib_args.limit).generator() + Fibber.new(fib_args.limit).generator # just return the generator, GRPC::GenericServer sends each actual response end @@ -132,10 +129,10 @@ class Calculator < Math::Math::Service begin requests.each do |req| logger.info("read #{req.inspect}") - resp = Math::DivReply.new(:quotient => req.dividend/req.divisor, - :remainder => req.dividend % req.divisor) + resp = Math::DivReply.new(quotient: req.dividend / req.divisor, + remainder: req.dividend % req.divisor) q.push(resp) - Thread::pass # let the internal Bidi threads run + Thread.pass # let the internal Bidi threads run end logger.info('finished reads') q.push(self) @@ -147,7 +144,6 @@ class Calculator < Math::Math::Service t.priority = -2 # hint that the div_many thread should not be favoured q.each_item end - end def load_test_certs @@ -159,7 +155,7 @@ end def test_server_creds certs = load_test_certs - server_creds = GRPC::Core::ServerCredentials.new(nil, certs[1], certs[2]) + GRPC::Core::ServerCredentials.new(nil, certs[1], certs[2]) end def main @@ -173,7 +169,7 @@ def main options['host'] = v end opts.on('-s', '--secure', 'access using test creds') do |v| - options['secure'] = true + options['secure'] = v end end.parse! diff --git a/src/ruby/bin/noproto_client.rb b/src/ruby/bin/noproto_client.rb index 34bdf545ee93f41669fd68d620187bac30499c4c..74bdfbb93a74022d51eed4feb6b5a87712cce424 100755 --- a/src/ruby/bin/noproto_client.rb +++ b/src/ruby/bin/noproto_client.rb @@ -40,16 +40,18 @@ $LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir) require 'grpc' require 'optparse' +# a simple non-protobuf message class. class NoProtoMsg - def self.marshal(o) + def self.marshal(_o) '' end - def self.unmarshal(o) + def self.unmarshal(_o) NoProtoMsg.new end end +# service the uses the non-protobuf message class. class NoProtoService include GRPC::GenericService rpc :AnRPC, NoProtoMsg, NoProtoMsg @@ -66,7 +68,7 @@ end def test_creds certs = load_test_certs - creds = GRPC::Core::Credentials.new(certs[0]) + GRPC::Core::Credentials.new(certs[0]) end def main @@ -80,14 +82,14 @@ def main options['host'] = v end opts.on('-s', '--secure', 'access using test creds') do |v| - options['secure'] = true + options['secure'] = v end end.parse! if options['secure'] stub_opts = { :creds => test_creds, - GRPC::Core::Channel::SSL_TARGET => 'foo.test.google.com', + GRPC::Core::Channel::SSL_TARGET => 'foo.test.google.com' } p stub_opts p options['host'] diff --git a/src/ruby/bin/noproto_server.rb b/src/ruby/bin/noproto_server.rb index 1bdc192f0231d7100eb4c39b38cd07c5a30da6d6..e34075c1f0c89b65a15976011107c030b2e47e7d 100755 --- a/src/ruby/bin/noproto_server.rb +++ b/src/ruby/bin/noproto_server.rb @@ -40,26 +40,29 @@ $LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir) require 'grpc' require 'optparse' +# a simple non-protobuf message class. class NoProtoMsg - def self.marshal(o) + def self.marshal(_o) '' end - def self.unmarshal(o) + def self.unmarshal(_o) NoProtoMsg.new end end +# service the uses the non-protobuf message class. class NoProtoService include GRPC::GenericService rpc :AnRPC, NoProtoMsg, NoProtoMsg end +# an implementation of the non-protobuf service. class NoProto < NoProtoService - def initialize(default_var='ignored') + def initialize(_default_var = 'ignored') end - def an_rpc(req, call) + def an_rpc(req, _call) logger.info('echo service received a request') req end @@ -74,7 +77,7 @@ end def test_server_creds certs = load_test_certs - server_creds = GRPC::Core::ServerCredentials.new(nil, certs[1], certs[2]) + GRPC::Core::ServerCredentials.new(nil, certs[1], certs[2]) end def main @@ -88,7 +91,7 @@ def main options['host'] = v end opts.on('-s', '--secure', 'access using test creds') do |v| - options['secure'] = true + options['secure'] = v end end.parse! @@ -106,5 +109,4 @@ def main s.run end - main diff --git a/src/ruby/ext/grpc/extconf.rb b/src/ruby/ext/grpc/extconf.rb index a828b472948f02e8d56a9c467e1f9d2e8d82e7e1..a6dbbf3aca1ea7b60c574836f6f210e0a1f5ef51 100644 --- a/src/ruby/ext/grpc/extconf.rb +++ b/src/ruby/ext/grpc/extconf.rb @@ -33,29 +33,29 @@ LIBDIR = RbConfig::CONFIG['libdir'] INCLUDEDIR = RbConfig::CONFIG['includedir'] HEADER_DIRS = [ - # Search /opt/local (Mac source install) - '/opt/local/include', + # Search /opt/local (Mac source install) + '/opt/local/include', - # Search /usr/local (Source install) - '/usr/local/include', + # Search /usr/local (Source install) + '/usr/local/include', - # Check the ruby install locations - INCLUDEDIR, + # Check the ruby install locations + INCLUDEDIR ] LIB_DIRS = [ - # Search /opt/local (Mac source install) - '/opt/local/lib', + # Search /opt/local (Mac source install) + '/opt/local/lib', - # Search /usr/local (Source install) - '/usr/local/lib', + # Search /usr/local (Source install) + '/usr/local/lib', - # Check the ruby install locations - LIBDIR, + # Check the ruby install locations + LIBDIR ] def crash(msg) - print(" extconf failure: %s\n" % msg) + print(" extconf failure: #{msg}\n") exit 1 end @@ -68,7 +68,7 @@ $CFLAGS << ' -Wno-return-type ' $CFLAGS << ' -Wall ' $CFLAGS << ' -pedantic ' -$LDFLAGS << ' -lgrpc -lgpr -levent -levent_pthreads -levent_core' +$LDFLAGS << ' -lgrpc -lgpr' # crash('need grpc lib') unless have_library('grpc', 'grpc_channel_destroy') # diff --git a/src/ruby/ext/grpc/rb_credentials.c b/src/ruby/ext/grpc/rb_credentials.c index 5dec51824d9c869c80b94166de43ef46ea7a4c2f..31f47f3b761daf7f99d11ab3db25803cdb75470e 100644 --- a/src/ruby/ext/grpc/rb_credentials.c +++ b/src/ruby/ext/grpc/rb_credentials.c @@ -214,6 +214,7 @@ static VALUE grpc_rb_credentials_init(int argc, VALUE *argv, VALUE self) { VALUE pem_cert_chain = Qnil; grpc_rb_credentials *wrapper = NULL; grpc_credentials *creds = NULL; + /* TODO: Remove mandatory arg when we support default roots. */ /* "12" == 1 mandatory arg, 2 (credentials) is optional */ rb_scan_args(argc, argv, "12", &pem_root_certs, &pem_private_key, &pem_cert_chain); @@ -225,22 +226,12 @@ static VALUE grpc_rb_credentials_init(int argc, VALUE *argv, VALUE self) { return Qnil; } if (pem_private_key == Qnil && pem_cert_chain == Qnil) { - creds = grpc_ssl_credentials_create(RSTRING_PTR(pem_root_certs), - RSTRING_LEN(pem_root_certs), NULL, 0, - NULL, 0); - } else if (pem_cert_chain == Qnil) { - creds = grpc_ssl_credentials_create( - RSTRING_PTR(pem_root_certs), RSTRING_LEN(pem_root_certs), - RSTRING_PTR(pem_private_key), RSTRING_LEN(pem_private_key), - RSTRING_PTR(pem_cert_chain), RSTRING_LEN(pem_cert_chain)); - } else if (pem_private_key == Qnil) { - creds = grpc_ssl_credentials_create( - RSTRING_PTR(pem_root_certs), RSTRING_LEN(pem_root_certs), NULL, 0, - RSTRING_PTR(pem_cert_chain), RSTRING_LEN(pem_cert_chain)); + creds = grpc_ssl_credentials_create(RSTRING_PTR(pem_root_certs), NULL); } else { + grpc_ssl_pem_key_cert_pair key_cert_pair = {RSTRING_PTR(pem_private_key), + RSTRING_PTR(pem_cert_chain)}; creds = grpc_ssl_credentials_create( - RSTRING_PTR(pem_root_certs), RSTRING_LEN(pem_root_certs), - RSTRING_PTR(pem_private_key), RSTRING_LEN(pem_private_key), NULL, 0); + RSTRING_PTR(pem_root_certs), &key_cert_pair); } if (creds == NULL) { rb_raise(rb_eRuntimeError, "could not create a credentials, not sure why"); diff --git a/src/ruby/ext/grpc/rb_server_credentials.c b/src/ruby/ext/grpc/rb_server_credentials.c index e534c114443d651d9e8fa4238a2e83f622c94932..4f6c67ea5e3b6936bcd229bd38cb7dbc03829fad 100644 --- a/src/ruby/ext/grpc/rb_server_credentials.c +++ b/src/ruby/ext/grpc/rb_server_credentials.c @@ -145,8 +145,10 @@ static ID id_pem_cert_chain; static VALUE grpc_rb_server_credentials_init(VALUE self, VALUE pem_root_certs, VALUE pem_private_key, VALUE pem_cert_chain) { + /* TODO support multiple key cert pairs in the ruby API. */ grpc_rb_server_credentials *wrapper = NULL; grpc_server_credentials *creds = NULL; + grpc_ssl_pem_key_cert_pair key_cert_pair = {NULL, NULL}; Data_Get_Struct(self, grpc_rb_server_credentials, wrapper); if (pem_cert_chain == Qnil) { rb_raise(rb_eRuntimeError, @@ -157,15 +159,13 @@ static VALUE grpc_rb_server_credentials_init(VALUE self, VALUE pem_root_certs, "could not create a server credential: nil pem_private_key"); return Qnil; } + key_cert_pair.private_key = RSTRING_PTR(pem_private_key); + key_cert_pair.cert_chain = RSTRING_PTR(pem_cert_chain); if (pem_root_certs == Qnil) { - creds = grpc_ssl_server_credentials_create( - NULL, 0, RSTRING_PTR(pem_private_key), RSTRING_LEN(pem_private_key), - RSTRING_PTR(pem_cert_chain), RSTRING_LEN(pem_cert_chain)); + creds = grpc_ssl_server_credentials_create(NULL, &key_cert_pair, 1); } else { - creds = grpc_ssl_server_credentials_create( - RSTRING_PTR(pem_root_certs), RSTRING_LEN(pem_root_certs), - RSTRING_PTR(pem_private_key), RSTRING_LEN(pem_private_key), - RSTRING_PTR(pem_cert_chain), RSTRING_LEN(pem_cert_chain)); + creds = grpc_ssl_server_credentials_create(RSTRING_PTR(pem_root_certs), + &key_cert_pair, 1); } if (creds == NULL) { rb_raise(rb_eRuntimeError, "could not create a credentials, not sure why"); diff --git a/src/ruby/grpc.gemspec b/src/ruby/grpc.gemspec index 53fdd29a7982fed63c907eb935958f0f35c2d352..8d7f44f30e204b3622adac5bb038ae3a6b158813 100755 --- a/src/ruby/grpc.gemspec +++ b/src/ruby/grpc.gemspec @@ -1,31 +1,34 @@ # encoding: utf-8 -$:.push File.expand_path("../lib", __FILE__) +$LOAD_PATH.push File.expand_path('../lib', __FILE__) require 'grpc/version' Gem::Specification.new do |s| - s.name = "grpc" + s.name = 'grpc' s.version = Google::RPC::VERSION - s.authors = ["One Platform Team"] - s.email = "stubby-team@google.com" - s.homepage = "http://go/grpc" + s.authors = ['One Platform Team'] + s.email = 'stubby-team@google.com' + s.homepage = 'http://go/grpc' s.summary = 'Google RPC system in Ruby' s.description = 'Send RPCs from Ruby' s.files = `git ls-files`.split("\n") s.test_files = `git ls-files -- spec/*`.split("\n") - s.executables = `git ls-files -- examples/*.rb`.split("\n").map{ |f| File.basename(f) } - s.require_paths = ['lib' ] + s.executables = `git ls-files -- bin/*.rb`.split("\n").map do |f| + File.basename(f) + end + s.require_paths = ['lib'] s.platform = Gem::Platform::RUBY s.add_dependency 'xray' s.add_dependency 'logging', '~> 1.8' s.add_dependency 'google-protobuf', '~> 3.0.0alpha.1.1' - s.add_dependency 'minitest', '~> 5.4' # not a dev dependency, used by the interop tests + s.add_dependency 'minitest', '~> 5.4' # reqd for interop tests - s.add_development_dependency "bundler", "~> 1.7" - s.add_development_dependency "rake", "~> 10.0" + s.add_development_dependency 'bundler', '~> 1.7' + s.add_development_dependency 'rake', '~> 10.0' s.add_development_dependency 'rake-compiler', '~> 0' - s.add_development_dependency 'rspec', "~> 3.0" + s.add_development_dependency 'rubocop', '~> 0.28.0' + s.add_development_dependency 'rspec', '~> 3.0' - s.extensions = %w[ext/grpc/extconf.rb] + s.extensions = %w(ext/grpc/extconf.rb) end diff --git a/src/ruby/lib/grpc/beefcake.rb b/src/ruby/lib/grpc/beefcake.rb index e8d7f0c2cd2b60f2514afde28b7cd53b14786417..fd3ebbf4b8436ec0aec353a228fd6dcd2798ec2c 100644 --- a/src/ruby/lib/grpc/beefcake.rb +++ b/src/ruby/lib/grpc/beefcake.rb @@ -29,25 +29,21 @@ require 'beefcake' -# Re-open the beefcake message module to add a static encode -# -# This is a temporary measure while beefcake is used as the default proto -# library for developing grpc ruby. Once that changes to the official proto -# library this can be removed. It's necessary to allow the update the service -# module to assume a static encode method. -# -# TODO(temiola): remove me, once official code generation is available in protoc module Beefcake + # Re-open the beefcake message module to add a static encode + # + # This is a temporary measure while beefcake is used as the default proto + # library for developing grpc ruby. Once that changes to the official proto + # library this can be removed. It's necessary to allow the update the service + # module to assume a static encode method. + # TODO(temiola): remove this. module Message - # additional mixin module that adds static encode method when include module StaticEncode - # encodes o with its instance#encode method def encode(o) o.encode end - end # extend self.included in Beefcake::Message to include StaticEncode @@ -57,6 +53,5 @@ module Beefcake o.extend Decode o.send(:include, Encode) end - end end diff --git a/src/ruby/lib/grpc/core/event.rb b/src/ruby/lib/grpc/core/event.rb index 29486763d5df413bf4f6d39ca0f3accb12a069ac..9a333589c214267666f7ef4d3737ab8e9e1aa9ff 100644 --- a/src/ruby/lib/grpc/core/event.rb +++ b/src/ruby/lib/grpc/core/event.rb @@ -30,9 +30,12 @@ module Google module RPC module Core - class Event # Add an inspect method to C-defined Event class. + # Event is a class defined in the c extension + # + # Here, we add an inspect method. + class Event def inspect - '<%s: type:%s, tag:%s result:%s>' % [self.class, type, tag, result] + "<#{self.class}: type:#{type}, tag:#{tag} result:#{result}>" end end end diff --git a/src/ruby/lib/grpc/core/time_consts.rb b/src/ruby/lib/grpc/core/time_consts.rb index 52e4c3f9b9405f1820e3f1697b66613dafae3820..6876dcb02eb4bab02b4afedc199299db06630b86 100644 --- a/src/ruby/lib/grpc/core/time_consts.rb +++ b/src/ruby/lib/grpc/core/time_consts.rb @@ -32,9 +32,10 @@ require 'grpc' module Google module RPC module Core - - module TimeConsts # re-opens a module in the C extension. - + # TimeConsts is a module from the C extension. + # + # Here it's re-opened to add a utility func. + module TimeConsts # Converts a time delta to an absolute deadline. # # Assumes timeish is a relative time, and converts its to an absolute, @@ -48,24 +49,23 @@ module Google # @param timeish [Number|TimeSpec] # @return timeish [Number|TimeSpec] def from_relative_time(timeish) - if timeish.is_a?TimeSpec + if timeish.is_a? TimeSpec timeish elsif timeish.nil? TimeConsts::ZERO - elsif !timeish.is_a?Numeric - raise TypeError('Cannot make an absolute deadline from %s', - timeish.inspect) + elsif !timeish.is_a? Numeric + fail(TypeError, + "Cannot make an absolute deadline from #{timeish.inspect}") elsif timeish < 0 TimeConsts::INFINITE_FUTURE elsif timeish == 0 TimeConsts::ZERO - else !timeish.nil? + else Time.now + timeish end end module_function :from_relative_time - end end end diff --git a/src/ruby/lib/grpc/errors.rb b/src/ruby/lib/grpc/errors.rb index d14e69c65a1a4f6c8b180b310bd96090fad5604f..70a92bfed771d861f1ccc3b65f3a38af2feef5d8 100644 --- a/src/ruby/lib/grpc/errors.rb +++ b/src/ruby/lib/grpc/errors.rb @@ -30,9 +30,8 @@ require 'grpc' module Google - + # Google::RPC contains the General RPC module. module RPC - # OutOfTime is an exception class that indicates that an RPC exceeded its # deadline. OutOfTime = Class.new(StandardError) @@ -42,12 +41,11 @@ module Google # error should be returned to the other end of a GRPC connection; when # caught it means that this end received a status error. class BadStatus < StandardError - attr_reader :code, :details # @param code [Numeric] the status code # @param details [String] the details of the exception - def initialize(code, details='unknown cause') + def initialize(code, details = 'unknown cause') super("#{code}:#{details}") @code = code @details = details @@ -60,9 +58,6 @@ module Google def to_status Status.new(code, details) end - end - end - end diff --git a/src/ruby/lib/grpc/generic/active_call.rb b/src/ruby/lib/grpc/generic/active_call.rb index 288ea083e6999ccfd20e79d13c24767b079f281e..bd684a8d07a2f9036e95d123d48d73e53689cf57 100644 --- a/src/ruby/lib/grpc/generic/active_call.rb +++ b/src/ruby/lib/grpc/generic/active_call.rb @@ -31,519 +31,516 @@ require 'forwardable' require 'grpc/generic/bidi_call' def assert_event_type(ev, want) - raise OutOfTime if ev.nil? + fail OutOfTime if ev.nil? got = ev.type - raise 'Unexpected rpc event: got %s, want %s' % [got, want] unless got == want + fail "Unexpected rpc event: got #{got}, want #{want}" unless got == want end -module Google::RPC - - # The ActiveCall class provides simple methods for sending marshallable - # data to a call - class ActiveCall - include Core::CompletionType - include Core::StatusCodes - include Core::TimeConsts - attr_reader(:deadline) - - # client_start_invoke begins a client invocation. - # - # Flow Control note: this blocks until flow control accepts that client - # request can go ahead. - # - # deadline is the absolute deadline for the call. - # - # == Keyword Arguments == - # any keyword arguments are treated as metadata to be sent to the server - # if a keyword value is a list, multiple metadata for it's key are sent - # - # @param call [Call] a call on which to start and invocation - # @param q [CompletionQueue] used to wait for INVOKE_ACCEPTED - # @param deadline [Fixnum,TimeSpec] the deadline for INVOKE_ACCEPTED - def self.client_start_invoke(call, q, deadline, **kw) - raise ArgumentError.new('not a call') unless call.is_a?Core::Call - if !q.is_a?Core::CompletionQueue - raise ArgumentError.new('not a CompletionQueue') - end - call.add_metadata(kw) if kw.length > 0 - invoke_accepted, client_metadata_read = Object.new, Object.new - finished_tag = Object.new - call.start_invoke(q, invoke_accepted, client_metadata_read, finished_tag) +module Google + # Google::RPC contains the General RPC module. + module RPC + # The ActiveCall class provides simple methods for sending marshallable + # data to a call + class ActiveCall + include Core::CompletionType + include Core::StatusCodes + include Core::TimeConsts + attr_reader(:deadline) + + # client_start_invoke begins a client invocation. + # + # Flow Control note: this blocks until flow control accepts that client + # request can go ahead. + # + # deadline is the absolute deadline for the call. + # + # == Keyword Arguments == + # any keyword arguments are treated as metadata to be sent to the server + # if a keyword value is a list, multiple metadata for it's key are sent + # + # @param call [Call] a call on which to start and invocation + # @param q [CompletionQueue] used to wait for INVOKE_ACCEPTED + # @param deadline [Fixnum,TimeSpec] the deadline for INVOKE_ACCEPTED + def self.client_start_invoke(call, q, _deadline, **kw) + fail(ArgumentError, 'not a call') unless call.is_a? Core::Call + unless q.is_a? Core::CompletionQueue + fail(ArgumentError, 'not a CompletionQueue') + end + call.add_metadata(kw) if kw.length > 0 + invoke_accepted, client_metadata_read = Object.new, Object.new + finished_tag = Object.new + call.start_invoke(q, invoke_accepted, client_metadata_read, + finished_tag) + + # wait for the invocation to be accepted + ev = q.pluck(invoke_accepted, INFINITE_FUTURE) + fail OutOfTime if ev.nil? + ev.close - # wait for the invocation to be accepted - ev = q.pluck(invoke_accepted, INFINITE_FUTURE) - raise OutOfTime if ev.nil? - ev.close + [finished_tag, client_metadata_read] + end - [finished_tag, client_metadata_read] - end + # Creates an ActiveCall. + # + # ActiveCall should only be created after a call is accepted. That means + # different things on a client and a server. On the client, the call is + # accepted after call.start_invoke followed by receipt of the + # corresponding INVOKE_ACCEPTED. on the server, this is after + # call.accept. + # + # #initialize cannot determine if the call is accepted or not; so if a + # call that's not accepted is used here, the error won't be visible until + # the ActiveCall methods are called. + # + # deadline is the absolute deadline for the call. + # + # @param call [Call] the call used by the ActiveCall + # @param q [CompletionQueue] the completion queue used to accept + # the call + # @param marshal [Function] f(obj)->string that marshal requests + # @param unmarshal [Function] f(string)->obj that unmarshals responses + # @param deadline [Fixnum] the deadline for the call to complete + # @param finished_tag [Object] the object used as the call's finish tag, + # if the call has begun + # @param read_metadata_tag [Object] the object used as the call's finish + # tag, if the call has begun + # @param started [true|false] indicates if the call has begun + def initialize(call, q, marshal, unmarshal, deadline, finished_tag: nil, + read_metadata_tag: nil, started: true) + fail(ArgumentError, 'not a call') unless call.is_a? Core::Call + unless q.is_a? Core::CompletionQueue + fail(ArgumentError, 'not a CompletionQueue') + end + @call = call + @cq = q + @deadline = deadline + @finished_tag = finished_tag + @read_metadata_tag = read_metadata_tag + @marshal = marshal + @started = started + @unmarshal = unmarshal + end - # Creates an ActiveCall. - # - # ActiveCall should only be created after a call is accepted. That means - # different things on a client and a server. On the client, the call is - # accepted after call.start_invoke followed by receipt of the - # corresponding INVOKE_ACCEPTED. on the server, this is after - # call.accept. - # - # #initialize cannot determine if the call is accepted or not; so if a - # call that's not accepted is used here, the error won't be visible until - # the ActiveCall methods are called. - # - # deadline is the absolute deadline for the call. - # - # @param call [Call] the call used by the ActiveCall - # @param q [CompletionQueue] the completion queue used to accept - # the call - # @param marshal [Function] f(obj)->string that marshal requests - # @param unmarshal [Function] f(string)->obj that unmarshals responses - # @param deadline [Fixnum] the deadline for the call to complete - # @param finished_tag [Object] the object used as the call's finish tag, - # if the call has begun - # @param read_metadata_tag [Object] the object used as the call's finish - # tag, if the call has begun - # @param started [true|false] (default true) indicates if the call has begun - def initialize(call, q, marshal, unmarshal, deadline, finished_tag: nil, - read_metadata_tag: nil, started: true) - raise ArgumentError.new('not a call') unless call.is_a?Core::Call - if !q.is_a?Core::CompletionQueue - raise ArgumentError.new('not a CompletionQueue') + # Obtains the status of the call. + # + # this value is nil until the call completes + # @return this call's status + def status + @call.status end - @call = call - @cq = q - @deadline = deadline - @finished_tag = finished_tag - @read_metadata_tag = read_metadata_tag - @marshal = marshal - @started = started - @unmarshal = unmarshal - end - # Obtains the status of the call. - # - # this value is nil until the call completes - # @return this call's status - def status - @call.status - end + # Obtains the metadata of the call. + # + # At the start of the call this will be nil. During the call this gets + # some values as soon as the other end of the connection acknowledges the + # request. + # + # @return this calls's metadata + def metadata + @call.metadata + end - # Obtains the metadata of the call. - # - # At the start of the call this will be nil. During the call this gets - # some values as soon as the other end of the connection acknowledges the - # request. - # - # @return this calls's metadata - def metadata - @call.metadata - end + # Cancels the call. + # + # Cancels the call. The call does not return any result, but once this it + # has been called, the call should eventually terminate. Due to potential + # races between the execution of the cancel and the in-flight request, the + # result of the call after calling #cancel is indeterminate: + # + # - the call may terminate with a BadStatus exception, with code=CANCELLED + # - the call may terminate with OK Status, and return a response + # - the call may terminate with a different BadStatus exception if that + # was happening + def cancel + @call.cancel + end - # Cancels the call. - # - # Cancels the call. The call does not return any result, but once this it - # has been called, the call should eventually terminate. Due to potential - # races between the execution of the cancel and the in-flight request, the - # result of the call after calling #cancel is indeterminate: - # - # - the call may terminate with a BadStatus exception, with code=CANCELLED - # - the call may terminate with OK Status, and return a response - # - the call may terminate with a different BadStatus exception if that was - # happening - def cancel - @call.cancel - end + # indicates if the call is shutdown + def shutdown + @shutdown ||= false + end - # indicates if the call is shutdown - def shutdown - @shutdown ||= false - end + # indicates if the call is cancelled. + def cancelled + @cancelled ||= false + end - # indicates if the call is cancelled. - def cancelled - @cancelled ||= false - end + # multi_req_view provides a restricted view of this ActiveCall for use + # in a server client-streaming handler. + def multi_req_view + MultiReqView.new(self) + end - # multi_req_view provides a restricted view of this ActiveCall for use - # in a server client-streaming handler. - def multi_req_view - MultiReqView.new(self) - end + # single_req_view provides a restricted view of this ActiveCall for use in + # a server request-response handler. + def single_req_view + SingleReqView.new(self) + end - # single_req_view provides a restricted view of this ActiveCall for use in - # a server request-response handler. - def single_req_view - SingleReqView.new(self) - end + # operation provides a restricted view of this ActiveCall for use as + # a Operation. + def operation + Operation.new(self) + end - # operation provides a restricted view of this ActiveCall for use as - # a Operation. - def operation - Operation.new(self) - end + # writes_done indicates that all writes are completed. + # + # It blocks until the remote endpoint acknowledges by sending a FINISHED + # event, unless assert_finished is set to false. Any calls to + # #remote_send after this call will fail. + # + # @param assert_finished [true, false] when true(default), waits for + # FINISHED. + def writes_done(assert_finished = true) + @call.writes_done(self) + ev = @cq.pluck(self, INFINITE_FUTURE) + begin + assert_event_type(ev, FINISH_ACCEPTED) + logger.debug("Writes done: waiting for finish? #{assert_finished}") + ensure + ev.close + end - # writes_done indicates that all writes are completed. - # - # It blocks until the remote endpoint acknowledges by sending a FINISHED - # event, unless assert_finished is set to false. Any calls to - # #remote_send after this call will fail. - # - # @param assert_finished [true, false] when true(default), waits for - # FINISHED. - def writes_done(assert_finished=true) - @call.writes_done(self) - ev = @cq.pluck(self, INFINITE_FUTURE) - begin - assert_event_type(ev, FINISH_ACCEPTED) - logger.debug("Writes done: waiting for finish? #{assert_finished}") - ensure + return unless assert_finished + ev = @cq.pluck(@finished_tag, INFINITE_FUTURE) + fail 'unexpected nil event' if ev.nil? ev.close + @call.status end - if assert_finished + # finished waits until the call is completed. + # + # It blocks until the remote endpoint acknowledges by sending a FINISHED + # event. + def finished ev = @cq.pluck(@finished_tag, INFINITE_FUTURE) - raise "unexpected event: #{ev.inspect}" if ev.nil? - ev.close - return @call.status + begin + fail "unexpected event: #{ev.inspect}" unless ev.type == FINISHED + if @call.metadata.nil? + @call.metadata = ev.result.metadata + else + @call.metadata.merge!(ev.result.metadata) + end + + if ev.result.code != Core::StatusCodes::OK + fail BadStatus.new(ev.result.code, ev.result.details) + end + res = ev.result + ensure + ev.close + end + res end - end - # finished waits until the call is completed. - # - # It blocks until the remote endpoint acknowledges by sending a FINISHED - # event. - def finished - ev = @cq.pluck(@finished_tag, INFINITE_FUTURE) - begin - raise "unexpected event: #{ev.inspect}" unless ev.type == FINISHED - if @call.metadata.nil? - @call.metadata = ev.result.metadata + # remote_send sends a request to the remote endpoint. + # + # It blocks until the remote endpoint acknowledges by sending a + # WRITE_ACCEPTED. req can be marshalled already. + # + # @param req [Object, String] the object to send or it's marshal form. + # @param marshalled [false, true] indicates if the object is already + # marshalled. + def remote_send(req, marshalled = false) + assert_queue_is_ready + logger.debug("sending #{req.inspect}, marshalled? #{marshalled}") + if marshalled + payload = req else - @call.metadata.merge!(ev.result.metadata) + payload = @marshal.call(req) end - - if ev.result.code != Core::StatusCodes::OK - raise BadStatus.new(ev.result.code, ev.result.details) + @call.start_write(Core::ByteBuffer.new(payload), self) + + # call queue#pluck, and wait for WRITE_ACCEPTED, so as not to return + # until the flow control allows another send on this call. + ev = @cq.pluck(self, INFINITE_FUTURE) + begin + assert_event_type(ev, WRITE_ACCEPTED) + ensure + ev.close end - res = ev.result - ensure - ev.close end - res - end - # remote_send sends a request to the remote endpoint. - # - # It blocks until the remote endpoint acknowledges by sending a - # WRITE_ACCEPTED. req can be marshalled already. - # - # @param req [Object, String] the object to send or it's marshal form. - # @param marshalled [false, true] indicates if the object is already - # marshalled. - def remote_send(req, marshalled=false) - assert_queue_is_ready - logger.debug("sending payload #{req.inspect}, marshalled? #{marshalled}") - if marshalled - payload = req - else - payload = @marshal.call(req) - end - @call.start_write(Core::ByteBuffer.new(payload), self) - - # call queue#pluck, and wait for WRITE_ACCEPTED, so as not to return - # until the flow control allows another send on this call. - ev = @cq.pluck(self, INFINITE_FUTURE) - begin - assert_event_type(ev, WRITE_ACCEPTED) - ensure - ev.close + # send_status sends a status to the remote endpoint + # + # @param code [int] the status code to send + # @param details [String] details + # @param assert_finished [true, false] when true(default), waits for + # FINISHED. + def send_status(code = OK, details = '', assert_finished = false) + assert_queue_is_ready + @call.start_write_status(code, details, self) + ev = @cq.pluck(self, INFINITE_FUTURE) + begin + assert_event_type(ev, FINISH_ACCEPTED) + ensure + ev.close + end + logger.debug("Status sent: #{code}:'#{details}'") + return finished if assert_finished + nil end - end - # send_status sends a status to the remote endpoint - # - # @param code [int] the status code to send - # @param details [String] details - # @param assert_finished [true, false] when true(default), waits for - # FINISHED. - def send_status(code=OK, details='', assert_finished=false) - assert_queue_is_ready - @call.start_write_status(code, details, self) - ev = @cq.pluck(self, INFINITE_FUTURE) - begin - assert_event_type(ev, FINISH_ACCEPTED) - ensure - ev.close - end - logger.debug("Status sent: #{code}:'#{details}'") - if assert_finished - return finished - end - nil - end - - # remote_read reads a response from the remote endpoint. - # - # It blocks until the remote endpoint sends a READ or FINISHED event. On - # a READ, it returns the response after unmarshalling it. On - # FINISHED, it returns nil if the status is OK, otherwise raising BadStatus - def remote_read - if @call.metadata.nil? && !@read_metadata_tag.nil? - ev = @cq.pluck(@read_metadata_tag, INFINITE_FUTURE) - assert_event_type(ev, CLIENT_METADATA_READ) - @call.metadata = ev.result - @read_metadata_tag = nil - end + # remote_read reads a response from the remote endpoint. + # + # It blocks until the remote endpoint sends a READ or FINISHED event. On + # a READ, it returns the response after unmarshalling it. On + # FINISHED, it returns nil if the status is OK, otherwise raising + # BadStatus + def remote_read + if @call.metadata.nil? && !@read_metadata_tag.nil? + ev = @cq.pluck(@read_metadata_tag, INFINITE_FUTURE) + assert_event_type(ev, CLIENT_METADATA_READ) + @call.metadata = ev.result + @read_metadata_tag = nil + end - @call.start_read(self) - ev = @cq.pluck(self, INFINITE_FUTURE) - begin - assert_event_type(ev, READ) - logger.debug("received req: #{ev.result.inspect}") - if !ev.result.nil? - logger.debug("received req.to_s: #{ev.result.to_s}") - res = @unmarshal.call(ev.result.to_s) - logger.debug("received_req (unmarshalled): #{res.inspect}") - return res + @call.start_read(self) + ev = @cq.pluck(self, INFINITE_FUTURE) + begin + assert_event_type(ev, READ) + logger.debug("received req: #{ev.result.inspect}") + unless ev.result.nil? + logger.debug("received req.to_s: #{ev.result}") + res = @unmarshal.call(ev.result.to_s) + logger.debug("received_req (unmarshalled): #{res.inspect}") + return res + end + ensure + ev.close end - ensure - ev.close + logger.debug('found nil; the final response has been sent') + nil end - logger.debug('found nil; the final response has been sent') - nil - end - # each_remote_read passes each response to the given block or returns an - # enumerator the responses if no block is given. - # - # == Enumerator == - # - # * #next blocks until the remote endpoint sends a READ or FINISHED - # * for each read, enumerator#next yields the response - # * on status - # * if it's is OK, enumerator#next raises StopException - # * if is not OK, enumerator#next raises RuntimeException - # - # == Block == - # - # * if provided it is executed for each response - # * the call blocks until no more responses are provided - # - # @return [Enumerator] if no block was given - def each_remote_read - return enum_for(:each_remote_read) if !block_given? - loop do - resp = remote_read() - break if resp.is_a?Struct::Status # is an OK status, bad statii raise - break if resp.nil? # the last response was received - yield resp + # each_remote_read passes each response to the given block or returns an + # enumerator the responses if no block is given. + # + # == Enumerator == + # + # * #next blocks until the remote endpoint sends a READ or FINISHED + # * for each read, enumerator#next yields the response + # * on status + # * if it's is OK, enumerator#next raises StopException + # * if is not OK, enumerator#next raises RuntimeException + # + # == Block == + # + # * if provided it is executed for each response + # * the call blocks until no more responses are provided + # + # @return [Enumerator] if no block was given + def each_remote_read + return enum_for(:each_remote_read) unless block_given? + loop do + resp = remote_read + break if resp.is_a? Struct::Status # is an OK status + break if resp.nil? # the last response was received + yield resp + end end - end - # each_remote_read_then_finish passes each response to the given block or - # returns an enumerator of the responses if no block is given. - # - # It is like each_remote_read, but it blocks on finishing on detecting - # the final message. - # - # == Enumerator == - # - # * #next blocks until the remote endpoint sends a READ or FINISHED - # * for each read, enumerator#next yields the response - # * on status - # * if it's is OK, enumerator#next raises StopException - # * if is not OK, enumerator#next raises RuntimeException - # - # == Block == - # - # * if provided it is executed for each response - # * the call blocks until no more responses are provided - # - # @return [Enumerator] if no block was given - def each_remote_read_then_finish - return enum_for(:each_remote_read_then_finish) if !block_given? - loop do - resp = remote_read - break if resp.is_a?Struct::Status # is an OK status, bad statii raise - if resp.nil? # the last response was received, but not finished yet - finished - break + # each_remote_read_then_finish passes each response to the given block or + # returns an enumerator of the responses if no block is given. + # + # It is like each_remote_read, but it blocks on finishing on detecting + # the final message. + # + # == Enumerator == + # + # * #next blocks until the remote endpoint sends a READ or FINISHED + # * for each read, enumerator#next yields the response + # * on status + # * if it's is OK, enumerator#next raises StopException + # * if is not OK, enumerator#next raises RuntimeException + # + # == Block == + # + # * if provided it is executed for each response + # * the call blocks until no more responses are provided + # + # @return [Enumerator] if no block was given + def each_remote_read_then_finish + return enum_for(:each_remote_read_then_finish) unless block_given? + loop do + resp = remote_read + break if resp.is_a? Struct::Status # is an OK status + if resp.nil? # the last response was received, but not finished yet + finished + break + end + yield resp end - yield resp end - end - # request_response sends a request to a GRPC server, and returns the - # response. - # - # == Keyword Arguments == - # any keyword arguments are treated as metadata to be sent to the server - # if a keyword value is a list, multiple metadata for it's key are sent - # - # @param req [Object] the request sent to the server - # @return [Object] the response received from the server - def request_response(req, **kw) - start_call(**kw) unless @started - remote_send(req) - writes_done(false) - response = remote_read - if !response.is_a?(Struct::Status) # finish if status not yet received - finished + # request_response sends a request to a GRPC server, and returns the + # response. + # + # == Keyword Arguments == + # any keyword arguments are treated as metadata to be sent to the server + # if a keyword value is a list, multiple metadata for it's key are sent + # + # @param req [Object] the request sent to the server + # @return [Object] the response received from the server + def request_response(req, **kw) + start_call(**kw) unless @started + remote_send(req) + writes_done(false) + response = remote_read + finished unless response.is_a? Struct::Status + response end - response - end - # client_streamer sends a stream of requests to a GRPC server, and - # returns a single response. - # - # requests provides an 'iterable' of Requests. I.e. it follows Ruby's - # #each enumeration protocol. In the simplest case, requests will be an - # array of marshallable objects; in typical case it will be an Enumerable - # that allows dynamic construction of the marshallable objects. - # - # == Keyword Arguments == - # any keyword arguments are treated as metadata to be sent to the server - # if a keyword value is a list, multiple metadata for it's key are sent - # - # @param requests [Object] an Enumerable of requests to send - # @return [Object] the response received from the server - def client_streamer(requests, **kw) - start_call(**kw) unless @started - requests.each { |r| remote_send(r) } - writes_done(false) - response = remote_read - if !response.is_a?(Struct::Status) # finish if status not yet received - finished + # client_streamer sends a stream of requests to a GRPC server, and + # returns a single response. + # + # requests provides an 'iterable' of Requests. I.e. it follows Ruby's + # #each enumeration protocol. In the simplest case, requests will be an + # array of marshallable objects; in typical case it will be an Enumerable + # that allows dynamic construction of the marshallable objects. + # + # == Keyword Arguments == + # any keyword arguments are treated as metadata to be sent to the server + # if a keyword value is a list, multiple metadata for it's key are sent + # + # @param requests [Object] an Enumerable of requests to send + # @return [Object] the response received from the server + def client_streamer(requests, **kw) + start_call(**kw) unless @started + requests.each { |r| remote_send(r) } + writes_done(false) + response = remote_read + finished unless response.is_a? Struct::Status + response end - response - end - # server_streamer sends one request to the GRPC server, which yields a - # stream of responses. - # - # responses provides an enumerator over the streamed responses, i.e. it - # follows Ruby's #each iteration protocol. The enumerator blocks while - # waiting for each response, stops when the server signals that no - # further responses will be supplied. If the implicit block is provided, - # it is executed with each response as the argument and no result is - # returned. - # - # == Keyword Arguments == - # any keyword arguments are treated as metadata to be sent to the server - # if a keyword value is a list, multiple metadata for it's key are sent - # any keyword arguments are treated as metadata to be sent to the server. - # - # @param req [Object] the request sent to the server - # @return [Enumerator|nil] a response Enumerator - def server_streamer(req, **kw) - start_call(**kw) unless @started - remote_send(req) - writes_done(false) - replies = enum_for(:each_remote_read_then_finish) - return replies if !block_given? - replies.each { |r| yield r } - end + # server_streamer sends one request to the GRPC server, which yields a + # stream of responses. + # + # responses provides an enumerator over the streamed responses, i.e. it + # follows Ruby's #each iteration protocol. The enumerator blocks while + # waiting for each response, stops when the server signals that no + # further responses will be supplied. If the implicit block is provided, + # it is executed with each response as the argument and no result is + # returned. + # + # == Keyword Arguments == + # any keyword arguments are treated as metadata to be sent to the server + # if a keyword value is a list, multiple metadata for it's key are sent + # any keyword arguments are treated as metadata to be sent to the server. + # + # @param req [Object] the request sent to the server + # @return [Enumerator|nil] a response Enumerator + def server_streamer(req, **kw) + start_call(**kw) unless @started + remote_send(req) + writes_done(false) + replies = enum_for(:each_remote_read_then_finish) + return replies unless block_given? + replies.each { |r| yield r } + end - # bidi_streamer sends a stream of requests to the GRPC server, and yields - # a stream of responses. - # - # This method takes an Enumerable of requests, and returns and enumerable - # of responses. - # - # == requests == - # - # requests provides an 'iterable' of Requests. I.e. it follows Ruby's #each - # enumeration protocol. In the simplest case, requests will be an array of - # marshallable objects; in typical case it will be an Enumerable that - # allows dynamic construction of the marshallable objects. - # - # == responses == - # - # This is an enumerator of responses. I.e, its #next method blocks - # waiting for the next response. Also, if at any point the block needs - # to consume all the remaining responses, this can be done using #each or - # #collect. Calling #each or #collect should only be done if - # the_call#writes_done has been called, otherwise the block will loop - # forever. - # - # == Keyword Arguments == - # any keyword arguments are treated as metadata to be sent to the server - # if a keyword value is a list, multiple metadata for it's key are sent - # - # @param requests [Object] an Enumerable of requests to send - # @return [Enumerator, nil] a response Enumerator - def bidi_streamer(requests, **kw, &blk) - start_call(**kw) unless @started - bd = BidiCall.new(@call, @cq, @marshal, @unmarshal, @deadline, - @finished_tag) - bd.run_on_client(requests, &blk) - end + # bidi_streamer sends a stream of requests to the GRPC server, and yields + # a stream of responses. + # + # This method takes an Enumerable of requests, and returns and enumerable + # of responses. + # + # == requests == + # + # requests provides an 'iterable' of Requests. I.e. it follows Ruby's + # #each enumeration protocol. In the simplest case, requests will be an + # array of marshallable objects; in typical case it will be an + # Enumerable that allows dynamic construction of the marshallable + # objects. + # + # == responses == + # + # This is an enumerator of responses. I.e, its #next method blocks + # waiting for the next response. Also, if at any point the block needs + # to consume all the remaining responses, this can be done using #each or + # #collect. Calling #each or #collect should only be done if + # the_call#writes_done has been called, otherwise the block will loop + # forever. + # + # == Keyword Arguments == + # any keyword arguments are treated as metadata to be sent to the server + # if a keyword value is a list, multiple metadata for it's key are sent + # + # @param requests [Object] an Enumerable of requests to send + # @return [Enumerator, nil] a response Enumerator + def bidi_streamer(requests, **kw, &blk) + start_call(**kw) unless @started + bd = BidiCall.new(@call, @cq, @marshal, @unmarshal, @deadline, + @finished_tag) + bd.run_on_client(requests, &blk) + end - # run_server_bidi orchestrates a BiDi stream processing on a server. - # - # N.B. gen_each_reply is a func(Enumerable<Requests>) - # - # It takes an enumerable of requests as an arg, in case there is a - # relationship between the stream of requests and the stream of replies. - # - # This does not mean that must necessarily be one. E.g, the replies - # produced by gen_each_reply could ignore the received_msgs - # - # @param gen_each_reply [Proc] generates the BiDi stream replies - def run_server_bidi(gen_each_reply) - bd = BidiCall.new(@call, @cq, @marshal, @unmarshal, @deadline, - @finished_tag) - bd.run_on_server(gen_each_reply) - end + # run_server_bidi orchestrates a BiDi stream processing on a server. + # + # N.B. gen_each_reply is a func(Enumerable<Requests>) + # + # It takes an enumerable of requests as an arg, in case there is a + # relationship between the stream of requests and the stream of replies. + # + # This does not mean that must necessarily be one. E.g, the replies + # produced by gen_each_reply could ignore the received_msgs + # + # @param gen_each_reply [Proc] generates the BiDi stream replies + def run_server_bidi(gen_each_reply) + bd = BidiCall.new(@call, @cq, @marshal, @unmarshal, @deadline, + @finished_tag) + bd.run_on_server(gen_each_reply) + end - private + private - def start_call(**kw) - tags = ActiveCall.client_start_invoke(@call, @cq, @deadline, **kw) - @finished_tag, @read_metadata_tag = tags - @started = true - end + def start_call(**kw) + tags = ActiveCall.client_start_invoke(@call, @cq, @deadline, **kw) + @finished_tag, @read_metadata_tag = tags + @started = true + end - def self.view_class(*visible_methods) - Class.new do - extend ::Forwardable - def_delegators :@wrapped, *visible_methods + def self.view_class(*visible_methods) + Class.new do + extend ::Forwardable + def_delegators :@wrapped, *visible_methods - # @param wrapped [ActiveCall] the call whose methods are shielded - def initialize(wrapped) - @wrapped = wrapped + # @param wrapped [ActiveCall] the call whose methods are shielded + def initialize(wrapped) + @wrapped = wrapped + end end end - end - # SingleReqView limits access to an ActiveCall's methods for use in server - # handlers that receive just one request. - SingleReqView = view_class(:cancelled, :deadline) - - # MultiReqView limits access to an ActiveCall's methods for use in - # server client_streamer handlers. - MultiReqView = view_class(:cancelled, :deadline, :each_queued_msg, - :each_remote_read) - - # Operation limits access to an ActiveCall's methods for use as - # a Operation on the client. - Operation = view_class(:cancel, :cancelled, :deadline, :execute, :metadata, - :status) - - # confirms that no events are enqueued, and that the queue is not - # shutdown. - def assert_queue_is_ready - ev = nil - begin - ev = @cq.pluck(self, ZERO) - raise "unexpected event #{ev.inspect}" unless ev.nil? - rescue OutOfTime - # expected, nothing should be on the queue and the deadline was ZERO, - # except things using another tag - ensure - ev.close unless ev.nil? + # SingleReqView limits access to an ActiveCall's methods for use in server + # handlers that receive just one request. + SingleReqView = view_class(:cancelled, :deadline) + + # MultiReqView limits access to an ActiveCall's methods for use in + # server client_streamer handlers. + MultiReqView = view_class(:cancelled, :deadline, :each_queued_msg, + :each_remote_read) + + # Operation limits access to an ActiveCall's methods for use as + # a Operation on the client. + Operation = view_class(:cancel, :cancelled, :deadline, :execute, + :metadata, :status) + + # confirms that no events are enqueued, and that the queue is not + # shutdown. + def assert_queue_is_ready + ev = nil + begin + ev = @cq.pluck(self, ZERO) + fail "unexpected event #{ev.inspect}" unless ev.nil? + rescue OutOfTime + logging.debug('timed out waiting for next event') + # expected, nothing should be on the queue and the deadline was ZERO, + # except things using another tag + ensure + ev.close unless ev.nil? + end end end - end - end diff --git a/src/ruby/lib/grpc/generic/bidi_call.rb b/src/ruby/lib/grpc/generic/bidi_call.rb index 066ec851acd4ec00d203e59baccf7fdb5b83e982..14ef6c531f93eae3264cb8f203e6208f4c09f60d 100644 --- a/src/ruby/lib/grpc/generic/bidi_call.rb +++ b/src/ruby/lib/grpc/generic/bidi_call.rb @@ -31,194 +31,195 @@ require 'forwardable' require 'grpc/grpc' def assert_event_type(ev, want) - raise OutOfTime if ev.nil? + fail OutOfTime if ev.nil? got = ev.type - raise 'Unexpected rpc event: got %s, want %s' % [got, want] unless got == want + fail("Unexpected rpc event: got #{got}, want #{want}") unless got == want end -module Google::RPC - - # The BiDiCall class orchestrates exection of a BiDi stream on a client or - # server. - class BidiCall - include Core::CompletionType - include Core::StatusCodes - include Core::TimeConsts - - # Creates a BidiCall. - # - # BidiCall should only be created after a call is accepted. That means - # different things on a client and a server. On the client, the call is - # accepted after call.start_invoke followed by receipt of the corresponding - # INVOKE_ACCEPTED. On the server, this is after call.accept. - # - # #initialize cannot determine if the call is accepted or not; so if a - # call that's not accepted is used here, the error won't be visible until - # the BidiCall#run is called. - # - # deadline is the absolute deadline for the call. - # - # @param call [Call] the call used by the ActiveCall - # @param q [CompletionQueue] the completion queue used to accept - # the call - # @param marshal [Function] f(obj)->string that marshal requests - # @param unmarshal [Function] f(string)->obj that unmarshals responses - # @param deadline [Fixnum] the deadline for the call to complete - # @param finished_tag [Object] the object used as the call's finish tag, - def initialize(call, q, marshal, unmarshal, deadline, finished_tag) - raise ArgumentError.new('not a call') unless call.is_a?Core::Call - if !q.is_a?Core::CompletionQueue - raise ArgumentError.new('not a CompletionQueue') +module Google + # Google::RPC contains the General RPC module. + module RPC + # The BiDiCall class orchestrates exection of a BiDi stream on a client or + # server. + class BidiCall + include Core::CompletionType + include Core::StatusCodes + include Core::TimeConsts + + # Creates a BidiCall. + # + # BidiCall should only be created after a call is accepted. That means + # different things on a client and a server. On the client, the call is + # accepted after call.start_invoke followed by receipt of the + # corresponding INVOKE_ACCEPTED. On the server, this is after + # call.accept. + # + # #initialize cannot determine if the call is accepted or not; so if a + # call that's not accepted is used here, the error won't be visible until + # the BidiCall#run is called. + # + # deadline is the absolute deadline for the call. + # + # @param call [Call] the call used by the ActiveCall + # @param q [CompletionQueue] the completion queue used to accept + # the call + # @param marshal [Function] f(obj)->string that marshal requests + # @param unmarshal [Function] f(string)->obj that unmarshals responses + # @param deadline [Fixnum] the deadline for the call to complete + # @param finished_tag [Object] the object used as the call's finish tag, + def initialize(call, q, marshal, unmarshal, deadline, finished_tag) + fail(ArgumentError, 'not a call') unless call.is_a? Core::Call + unless q.is_a? Core::CompletionQueue + fail(ArgumentError, 'not a CompletionQueue') + end + @call = call + @cq = q + @deadline = deadline + @finished_tag = finished_tag + @marshal = marshal + @readq = Queue.new + @unmarshal = unmarshal end - @call = call - @cq = q - @deadline = deadline - @finished_tag = finished_tag - @marshal = marshal - @readq = Queue.new - @unmarshal = unmarshal - end - # Begins orchestration of the Bidi stream for a client sending requests. - # - # The method either returns an Enumerator of the responses, or accepts a - # block that can be invoked with each response. - # - # @param requests the Enumerable of requests to send - # @return an Enumerator of requests to yield - def run_on_client(requests, &blk) - enq_th = start_write_loop(requests) - loop_th = start_read_loop - replies = each_queued_msg - return replies if blk.nil? - replies.each { |r| blk.call(r) } - enq_th.join - loop_th.join - end - - # Begins orchestration of the Bidi stream for a server generating replies. - # - # N.B. gen_each_reply is a func(Enumerable<Requests>) - # - # It takes an enumerable of requests as an arg, in case there is a - # relationship between the stream of requests and the stream of replies. - # - # This does not mean that must necessarily be one. E.g, the replies - # produced by gen_each_reply could ignore the received_msgs - # - # @param gen_each_reply [Proc] generates the BiDi stream replies. - def run_on_server(gen_each_reply) - replys = gen_each_reply.call(each_queued_msg) - enq_th = start_write_loop(replys, is_client:false) - loop_th = start_read_loop() - loop_th.join - enq_th.join - end - - private + # Begins orchestration of the Bidi stream for a client sending requests. + # + # The method either returns an Enumerator of the responses, or accepts a + # block that can be invoked with each response. + # + # @param requests the Enumerable of requests to send + # @return an Enumerator of requests to yield + def run_on_client(requests, &blk) + enq_th = start_write_loop(requests) + loop_th = start_read_loop + replies = each_queued_msg + return replies if blk.nil? + replies.each { |r| blk.call(r) } + enq_th.join + loop_th.join + end - END_OF_READS = :end_of_reads - END_OF_WRITES = :end_of_writes + # Begins orchestration of the Bidi stream for a server generating replies. + # + # N.B. gen_each_reply is a func(Enumerable<Requests>) + # + # It takes an enumerable of requests as an arg, in case there is a + # relationship between the stream of requests and the stream of replies. + # + # This does not mean that must necessarily be one. E.g, the replies + # produced by gen_each_reply could ignore the received_msgs + # + # @param gen_each_reply [Proc] generates the BiDi stream replies. + def run_on_server(gen_each_reply) + replys = gen_each_reply.call(each_queued_msg) + enq_th = start_write_loop(replys, is_client: false) + loop_th = start_read_loop + loop_th.join + enq_th.join + end - # each_queued_msg yields each message on this instances readq - # - # - messages are added to the readq by #read_loop - # - iteration ends when the instance itself is added - def each_queued_msg - return enum_for(:each_queued_msg) if !block_given? - count = 0 - loop do - logger.debug("each_queued_msg: msg##{count}") - count += 1 - req = @readq.pop - throw req if req.is_a?StandardError - break if req.equal?(END_OF_READS) - yield req + private + + END_OF_READS = :end_of_reads + END_OF_WRITES = :end_of_writes + + # each_queued_msg yields each message on this instances readq + # + # - messages are added to the readq by #read_loop + # - iteration ends when the instance itself is added + def each_queued_msg + return enum_for(:each_queued_msg) unless block_given? + count = 0 + loop do + logger.debug("each_queued_msg: msg##{count}") + count += 1 + req = @readq.pop + throw req if req.is_a? StandardError + break if req.equal?(END_OF_READS) + yield req + end end - end - # during bidi-streaming, read the requests to send from a separate thread - # read so that read_loop does not block waiting for requests to read. - def start_write_loop(requests, is_client: true) - Thread.new do # TODO(temiola) run on a thread pool - write_tag = Object.new - begin - count = 0 - requests.each do |req| - count += 1 - payload = @marshal.call(req) - @call.start_write(Core::ByteBuffer.new(payload), write_tag) - ev = @cq.pluck(write_tag, INFINITE_FUTURE) - begin - assert_event_type(ev, WRITE_ACCEPTED) - ensure - ev.close - end - end - if is_client - @call.writes_done(write_tag) - ev = @cq.pluck(write_tag, INFINITE_FUTURE) - begin - assert_event_type(ev, FINISH_ACCEPTED) - ensure - ev.close + # during bidi-streaming, read the requests to send from a separate thread + # read so that read_loop does not block waiting for requests to read. + def start_write_loop(requests, is_client: true) + Thread.new do # TODO(temiola) run on a thread pool + write_tag = Object.new + begin + count = 0 + requests.each do |req| + count += 1 + payload = @marshal.call(req) + @call.start_write(Core::ByteBuffer.new(payload), write_tag) + ev = @cq.pluck(write_tag, INFINITE_FUTURE) + begin + assert_event_type(ev, WRITE_ACCEPTED) + ensure + ev.close + end end - logger.debug("bidi-client: sent #{count} reqs, waiting to finish") - ev = @cq.pluck(@finished_tag, INFINITE_FUTURE) - begin - assert_event_type(ev, FINISHED) - ensure - ev.close + if is_client + @call.writes_done(write_tag) + ev = @cq.pluck(write_tag, INFINITE_FUTURE) + begin + assert_event_type(ev, FINISH_ACCEPTED) + ensure + ev.close + end + logger.debug("bidi-client: sent #{count} reqs, waiting to finish") + ev = @cq.pluck(@finished_tag, INFINITE_FUTURE) + begin + assert_event_type(ev, FINISHED) + ensure + ev.close + end + logger.debug('bidi-client: finished received') end - logger.debug('bidi-client: finished received') + rescue StandardError => e + logger.warn('bidi: write_loop failed') + logger.warn(e) end - rescue StandardError => e - logger.warn('bidi: write_loop failed') - logger.warn(e) end end - end - - # starts the read loop - def start_read_loop() - t = Thread.new do - begin - read_tag = Object.new - count = 0 - # queue the initial read before beginning the loop - loop do - logger.debug("waiting for read #{count}") - count += 1 - @call.start_read(read_tag) - ev = @cq.pluck(read_tag, INFINITE_FUTURE) - begin - assert_event_type(ev, READ) - - # handle the next event. - if ev.result.nil? - @readq.push(END_OF_READS) - logger.debug('done reading!') - break + # starts the read loop + def start_read_loop + Thread.new do + begin + read_tag = Object.new + count = 0 + + # queue the initial read before beginning the loop + loop do + logger.debug("waiting for read #{count}") + count += 1 + @call.start_read(read_tag) + ev = @cq.pluck(read_tag, INFINITE_FUTURE) + begin + assert_event_type(ev, READ) + + # handle the next event. + if ev.result.nil? + @readq.push(END_OF_READS) + logger.debug('done reading!') + break + end + + # push the latest read onto the queue and continue reading + logger.debug("received req: #{ev.result}") + res = @unmarshal.call(ev.result.to_s) + @readq.push(res) + ensure + ev.close end - - # push the latest read onto the queue and continue reading - logger.debug("received req.to_s: #{ev.result.to_s}") - res = @unmarshal.call(ev.result.to_s) - @readq.push(res) - ensure - ev.close end - end - rescue StandardError => e - logger.warn('bidi: read_loop failed') - logger.warn(e) - @readq.push(e) # let each_queued_msg terminate with this error + rescue StandardError => e + logger.warn('bidi: read_loop failed') + logger.warn(e) + @readq.push(e) # let each_queued_msg terminate with this error + end end end end - end - end diff --git a/src/ruby/lib/grpc/generic/client_stub.rb b/src/ruby/lib/grpc/generic/client_stub.rb index 62628cb1f029fc485e1c38c1ffe3847e595ee8b8..7e13de19ca5bd126f60a729137d1d68b6f232577 100644 --- a/src/ruby/lib/grpc/generic/client_stub.rb +++ b/src/ruby/lib/grpc/generic/client_stub.rb @@ -30,377 +30,381 @@ require 'grpc/generic/active_call' require 'xray/thread_dump_signal_handler' -module Google::RPC +module Google + # Google::RPC contains the General RPC module. + module RPC + # ClientStub represents an endpoint used to send requests to GRPC servers. + class ClientStub + include Core::StatusCodes - # ClientStub represents an endpoint used to send requests to GRPC servers. - class ClientStub - include Core::StatusCodes + # Default deadline is 5 seconds. + DEFAULT_DEADLINE = 5 - # Default deadline is 5 seconds. - DEFAULT_DEADLINE = 5 - - # Creates a new ClientStub. - # - # Minimally, a stub is created with the just the host of the gRPC service - # it wishes to access, e.g., - # - # my_stub = ClientStub.new(example.host.com:50505) - # - # Any arbitrary keyword arguments are treated as channel arguments used to - # configure the RPC connection to the host. - # - # There are some specific keyword args that are not used to configure the - # channel: - # - # - :channel_override - # when present, this must be a pre-created GRPC::Channel. If it's present - # the host and arbitrary keyword arg areignored, and the RPC connection uses - # this channel. - # - # - :deadline - # when present, this is the default deadline used for calls - # - # - :update_metadata - # when present, this a func that takes a hash and returns a hash - # it can be used to update metadata, i.e, remove, change or update - # amend metadata values. - # - # @param host [String] the host the stub connects to - # @param q [Core::CompletionQueue] used to wait for events - # @param channel_override [Core::Channel] a pre-created channel - # @param deadline [Number] the default deadline to use in requests - # @param creds [Core::Credentials] secures and/or authenticates the channel - # @param update_metadata a func that updates metadata as described above - # @param kw [KeywordArgs]the channel arguments - def initialize(host, q, - channel_override:nil, - deadline: DEFAULT_DEADLINE, - creds: nil, - update_metadata: nil, - **kw) - if !q.is_a?Core::CompletionQueue - raise ArgumentError.new('not a CompletionQueue') - end - @queue = q + # Creates a new ClientStub. + # + # Minimally, a stub is created with the just the host of the gRPC service + # it wishes to access, e.g., + # + # my_stub = ClientStub.new(example.host.com:50505) + # + # Any arbitrary keyword arguments are treated as channel arguments used to + # configure the RPC connection to the host. + # + # There are some specific keyword args that are not used to configure the + # channel: + # + # - :channel_override + # when present, this must be a pre-created GRPC::Channel. If it's + # present the host and arbitrary keyword arg areignored, and the RPC + # connection uses this channel. + # + # - :deadline + # when present, this is the default deadline used for calls + # + # - :update_metadata + # when present, this a func that takes a hash and returns a hash + # it can be used to update metadata, i.e, remove, change or update + # amend metadata values. + # + # @param host [String] the host the stub connects to + # @param q [Core::CompletionQueue] used to wait for events + # @param channel_override [Core::Channel] a pre-created channel + # @param deadline [Number] the default deadline to use in requests + # @param creds [Core::Credentials] the channel + # @param update_metadata a func that updates metadata as described above + # @param kw [KeywordArgs]the channel arguments + def initialize(host, q, + channel_override:nil, + deadline: DEFAULT_DEADLINE, + creds: nil, + update_metadata: nil, + **kw) + unless q.is_a? Core::CompletionQueue + fail(ArgumentError, 'not a CompletionQueue') + end + @queue = q - # set the channel instance - if !channel_override.nil? - ch = channel_override - raise ArgumentError.new('not a Channel') unless ch.is_a?(Core::Channel) - elsif creds.nil? - ch = Core::Channel.new(host, kw) - elsif !creds.is_a?(Core::Credentials) - raise ArgumentError.new('not a Credentials') - else - ch = Core::Channel.new(host, kw, creds) - end - @ch = ch + # set the channel instance + if !channel_override.nil? + ch = channel_override + fail(ArgumentError, 'not a Channel') unless ch.is_a? Core::Channel + else + if creds.nil? + ch = Core::Channel.new(host, kw) + elsif !creds.is_a?(Core::Credentials) + fail(ArgumentError, 'not a Credentials') + else + ch = Core::Channel.new(host, kw, creds) + end + end + @ch = ch - @update_metadata = nil - if !update_metadata.nil? - if !update_metadata.is_a?(Proc) - raise ArgumentError.new('update_metadata is not a Proc') + @update_metadata = nil + unless update_metadata.nil? + unless update_metadata.is_a? Proc + fail(ArgumentError, 'update_metadata is not a Proc') + end + @update_metadata = update_metadata end - @update_metadata = update_metadata + + @host = host + @deadline = deadline end + # request_response sends a request to a GRPC server, and returns the + # response. + # + # == Flow Control == + # This is a blocking call. + # + # * it does not return until a response is received. + # + # * the requests is sent only when GRPC core's flow control allows it to + # be sent. + # + # == Errors == + # An RuntimeError is raised if + # + # * the server responds with a non-OK status + # + # * the deadline is exceeded + # + # == Return Value == + # + # If return_op is false, the call returns the response + # + # If return_op is true, the call returns an Operation, calling execute + # on the Operation returns the response. + # + # == Keyword Args == + # + # Unspecified keyword arguments are treated as metadata to be sent to the + # server. + # + # @param method [String] the RPC method to call on the GRPC server + # @param req [Object] the request sent to the server + # @param marshal [Function] f(obj)->string that marshals requests + # @param unmarshal [Function] f(string)->obj that unmarshals responses + # @param deadline [Numeric] (optional) the max completion time in seconds + # @param return_op [true|false] return an Operation if true + # @return [Object] the response received from the server + def request_response(method, req, marshal, unmarshal, deadline = nil, + return_op: false, **kw) + c = new_active_call(method, marshal, unmarshal, deadline || @deadline) + md = @update_metadata.nil? ? kw : @update_metadata.call(kw.clone) + return c.request_response(req, **md) unless return_op - @host = host - @deadline = deadline - end + # return the operation view of the active_call; define #execute as a + # new method for this instance that invokes #request_response. + op = c.operation + op.define_singleton_method(:execute) do + c.request_response(req, **md) + end + op + end - # request_response sends a request to a GRPC server, and returns the - # response. - # - # == Flow Control == - # This is a blocking call. - # - # * it does not return until a response is received. - # - # * the requests is sent only when GRPC core's flow control allows it to - # be sent. - # - # == Errors == - # An RuntimeError is raised if - # - # * the server responds with a non-OK status - # - # * the deadline is exceeded - # - # == Return Value == - # - # If return_op is false, the call returns the response - # - # If return_op is true, the call returns an Operation, calling execute - # on the Operation returns the response. - # - # == Keyword Args == - # - # Unspecified keyword arguments are treated as metadata to be sent to the - # server. - # - # @param method [String] the RPC method to call on the GRPC server - # @param req [Object] the request sent to the server - # @param marshal [Function] f(obj)->string that marshals requests - # @param unmarshal [Function] f(string)->obj that unmarshals responses - # @param deadline [Numeric] (optional) the max completion time in seconds - # @param return_op [true|false] (default false) return an Operation if true - # @return [Object] the response received from the server - def request_response(method, req, marshal, unmarshal, deadline=nil, - return_op:false, **kw) - c = new_active_call(method, marshal, unmarshal, deadline || @deadline) - md = @update_metadata.nil? ? kw : @update_metadata.call(kw.clone) - return c.request_response(req, **md) unless return_op + # client_streamer sends a stream of requests to a GRPC server, and + # returns a single response. + # + # requests provides an 'iterable' of Requests. I.e. it follows Ruby's + # #each enumeration protocol. In the simplest case, requests will be an + # array of marshallable objects; in typical case it will be an Enumerable + # that allows dynamic construction of the marshallable objects. + # + # == Flow Control == + # This is a blocking call. + # + # * it does not return until a response is received. + # + # * each requests is sent only when GRPC core's flow control allows it to + # be sent. + # + # == Errors == + # An RuntimeError is raised if + # + # * the server responds with a non-OK status + # + # * the deadline is exceeded + # + # == Return Value == + # + # If return_op is false, the call consumes the requests and returns + # the response. + # + # If return_op is true, the call returns the response. + # + # == Keyword Args == + # + # Unspecified keyword arguments are treated as metadata to be sent to the + # server. + # + # @param method [String] the RPC method to call on the GRPC server + # @param requests [Object] an Enumerable of requests to send + # @param marshal [Function] f(obj)->string that marshals requests + # @param unmarshal [Function] f(string)->obj that unmarshals responses + # @param deadline [Numeric] the max completion time in seconds + # @param return_op [true|false] return an Operation if true + # @return [Object|Operation] the response received from the server + def client_streamer(method, requests, marshal, unmarshal, deadline = nil, + return_op: false, **kw) + c = new_active_call(method, marshal, unmarshal, deadline || @deadline) + md = @update_metadata.nil? ? kw : @update_metadata.call(kw.clone) + return c.client_streamer(requests, **md) unless return_op - # return the operation view of the active_call; define #execute as a - # new method for this instance that invokes #request_response. - op = c.operation - op.define_singleton_method(:execute) do - c.request_response(req, **md) + # return the operation view of the active_call; define #execute as a + # new method for this instance that invokes #client_streamer. + op = c.operation + op.define_singleton_method(:execute) do + c.client_streamer(requests, **md) + end + op end - op - end - # client_streamer sends a stream of requests to a GRPC server, and - # returns a single response. - # - # requests provides an 'iterable' of Requests. I.e. it follows Ruby's - # #each enumeration protocol. In the simplest case, requests will be an - # array of marshallable objects; in typical case it will be an Enumerable - # that allows dynamic construction of the marshallable objects. - # - # == Flow Control == - # This is a blocking call. - # - # * it does not return until a response is received. - # - # * each requests is sent only when GRPC core's flow control allows it to - # be sent. - # - # == Errors == - # An RuntimeError is raised if - # - # * the server responds with a non-OK status - # - # * the deadline is exceeded - # - # == Return Value == - # - # If return_op is false, the call consumes the requests and returns - # the response. - # - # If return_op is true, the call returns the response. - # - # == Keyword Args == - # - # Unspecified keyword arguments are treated as metadata to be sent to the - # server. - # - # @param method [String] the RPC method to call on the GRPC server - # @param requests [Object] an Enumerable of requests to send - # @param marshal [Function] f(obj)->string that marshals requests - # @param unmarshal [Function] f(string)->obj that unmarshals responses - # @param deadline [Numeric] the max completion time in seconds - # @param return_op [true|false] (default false) return an Operation if true - # @return [Object|Operation] the response received from the server - def client_streamer(method, requests, marshal, unmarshal, deadline=nil, - return_op:false, **kw) - c = new_active_call(method, marshal, unmarshal, deadline || @deadline) - md = @update_metadata.nil? ? kw : @update_metadata.call(kw.clone) - return c.client_streamer(requests, **md) unless return_op + # server_streamer sends one request to the GRPC server, which yields a + # stream of responses. + # + # responses provides an enumerator over the streamed responses, i.e. it + # follows Ruby's #each iteration protocol. The enumerator blocks while + # waiting for each response, stops when the server signals that no + # further responses will be supplied. If the implicit block is provided, + # it is executed with each response as the argument and no result is + # returned. + # + # == Flow Control == + # This is a blocking call. + # + # * the request is sent only when GRPC core's flow control allows it to + # be sent. + # + # * the request will not complete until the server sends the final + # response followed by a status message. + # + # == Errors == + # An RuntimeError is raised if + # + # * the server responds with a non-OK status when any response is + # * retrieved + # + # * the deadline is exceeded + # + # == Return Value == + # + # if the return_op is false, the return value is an Enumerator of the + # results, unless a block is provided, in which case the block is + # executed with each response. + # + # if return_op is true, the function returns an Operation whose #execute + # method runs server streamer call. Again, Operation#execute either + # calls the given block with each response or returns an Enumerator of the + # responses. + # + # == Keyword Args == + # + # Unspecified keyword arguments are treated as metadata to be sent to the + # server. + # + # @param method [String] the RPC method to call on the GRPC server + # @param req [Object] the request sent to the server + # @param marshal [Function] f(obj)->string that marshals requests + # @param unmarshal [Function] f(string)->obj that unmarshals responses + # @param deadline [Numeric] the max completion time in seconds + # @param return_op [true|false]return an Operation if true + # @param blk [Block] when provided, is executed for each response + # @return [Enumerator|Operation|nil] as discussed above + def server_streamer(method, req, marshal, unmarshal, deadline = nil, + return_op: false, **kw, &blk) + c = new_active_call(method, marshal, unmarshal, deadline || @deadline) + md = @update_metadata.nil? ? kw : @update_metadata.call(kw.clone) + return c.server_streamer(req, **md, &blk) unless return_op - # return the operation view of the active_call; define #execute as a - # new method for this instance that invokes #client_streamer. - op = c.operation - op.define_singleton_method(:execute) do - c.client_streamer(requests, **md) + # return the operation view of the active_call; define #execute + # as a new method for this instance that invokes #server_streamer + op = c.operation + op.define_singleton_method(:execute) do + c.server_streamer(req, **md, &blk) + end + op end - op - end - # server_streamer sends one request to the GRPC server, which yields a - # stream of responses. - # - # responses provides an enumerator over the streamed responses, i.e. it - # follows Ruby's #each iteration protocol. The enumerator blocks while - # waiting for each response, stops when the server signals that no - # further responses will be supplied. If the implicit block is provided, - # it is executed with each response as the argument and no result is - # returned. - # - # == Flow Control == - # This is a blocking call. - # - # * the request is sent only when GRPC core's flow control allows it to - # be sent. - # - # * the request will not complete until the server sends the final response - # followed by a status message. - # - # == Errors == - # An RuntimeError is raised if - # - # * the server responds with a non-OK status when any response is - # * retrieved - # - # * the deadline is exceeded - # - # == Return Value == - # - # if the return_op is false, the return value is an Enumerator of the - # results, unless a block is provided, in which case the block is - # executed with each response. - # - # if return_op is true, the function returns an Operation whose #execute - # method runs server streamer call. Again, Operation#execute either - # calls the given block with each response or returns an Enumerator of the - # responses. - # - # == Keyword Args == - # - # Unspecified keyword arguments are treated as metadata to be sent to the - # server. - # - # @param method [String] the RPC method to call on the GRPC server - # @param req [Object] the request sent to the server - # @param marshal [Function] f(obj)->string that marshals requests - # @param unmarshal [Function] f(string)->obj that unmarshals responses - # @param deadline [Numeric] the max completion time in seconds - # @param return_op [true|false] (default false) return an Operation if true - # @param blk [Block] when provided, is executed for each response - # @return [Enumerator|Operation|nil] as discussed above - def server_streamer(method, req, marshal, unmarshal, deadline=nil, - return_op:false, **kw, &blk) - c = new_active_call(method, marshal, unmarshal, deadline || @deadline) - md = @update_metadata.nil? ? kw : @update_metadata.call(kw.clone) - return c.server_streamer(req, **md, &blk) unless return_op + # bidi_streamer sends a stream of requests to the GRPC server, and yields + # a stream of responses. + # + # This method takes an Enumerable of requests, and returns and enumerable + # of responses. + # + # == requests == + # + # requests provides an 'iterable' of Requests. I.e. it follows Ruby's + # #each enumeration protocol. In the simplest case, requests will be an + # array of marshallable objects; in typical case it will be an + # Enumerable that allows dynamic construction of the marshallable + # objects. + # + # == responses == + # + # This is an enumerator of responses. I.e, its #next method blocks + # waiting for the next response. Also, if at any point the block needs + # to consume all the remaining responses, this can be done using #each or + # #collect. Calling #each or #collect should only be done if + # the_call#writes_done has been called, otherwise the block will loop + # forever. + # + # == Flow Control == + # This is a blocking call. + # + # * the call completes when the next call to provided block returns + # * [False] + # + # * the execution block parameters are two objects for sending and + # receiving responses, each of which blocks waiting for flow control. + # E.g, calles to bidi_call#remote_send will wait until flow control + # allows another write before returning; and obviously calls to + # responses#next block until the next response is available. + # + # == Termination == + # + # As well as sending and receiving messages, the block passed to the + # function is also responsible for: + # + # * calling bidi_call#writes_done to indicate no further reqs will be + # sent. + # + # * returning false if once the bidi stream is functionally completed. + # + # Note that response#next will indicate that there are no further + # responses by throwing StopIteration, but can only happen either + # if bidi_call#writes_done is called. + # + # To terminate the RPC correctly the block: + # + # * must call bidi#writes_done and then + # + # * either return false as soon as there is no need for other responses + # + # * loop on responses#next until no further responses are available + # + # == Errors == + # An RuntimeError is raised if + # + # * the server responds with a non-OK status when any response is + # * retrieved + # + # * the deadline is exceeded + # + # + # == Keyword Args == + # + # Unspecified keyword arguments are treated as metadata to be sent to the + # server. + # + # == Return Value == + # + # if the return_op is false, the return value is an Enumerator of the + # results, unless a block is provided, in which case the block is + # executed with each response. + # + # if return_op is true, the function returns an Operation whose #execute + # method runs the Bidi call. Again, Operation#execute either calls a + # given block with each response or returns an Enumerator of the + # responses. + # + # @param method [String] the RPC method to call on the GRPC server + # @param requests [Object] an Enumerable of requests to send + # @param marshal [Function] f(obj)->string that marshals requests + # @param unmarshal [Function] f(string)->obj that unmarshals responses + # @param deadline [Numeric] (optional) the max completion time in seconds + # @param blk [Block] when provided, is executed for each response + # @param return_op [true|false] return an Operation if true + # @return [Enumerator|nil|Operation] as discussed above + def bidi_streamer(method, requests, marshal, unmarshal, deadline = nil, + return_op: false, **kw, &blk) + c = new_active_call(method, marshal, unmarshal, deadline || @deadline) + md = @update_metadata.nil? ? kw : @update_metadata.call(kw.clone) + return c.bidi_streamer(requests, **md, &blk) unless return_op - # return the operation view of the active_call; define #execute - # as a new method for this instance that invokes #server_streamer - op = c.operation - op.define_singleton_method(:execute) do - c.server_streamer(req, **md, &blk) + # return the operation view of the active_call; define #execute + # as a new method for this instance that invokes #bidi_streamer + op = c.operation + op.define_singleton_method(:execute) do + c.bidi_streamer(requests, **md, &blk) + end + op end - op - end - # bidi_streamer sends a stream of requests to the GRPC server, and yields - # a stream of responses. - # - # This method takes an Enumerable of requests, and returns and enumerable - # of responses. - # - # == requests == - # - # requests provides an 'iterable' of Requests. I.e. it follows Ruby's #each - # enumeration protocol. In the simplest case, requests will be an array of - # marshallable objects; in typical case it will be an Enumerable that - # allows dynamic construction of the marshallable objects. - # - # == responses == - # - # This is an enumerator of responses. I.e, its #next method blocks - # waiting for the next response. Also, if at any point the block needs - # to consume all the remaining responses, this can be done using #each or - # #collect. Calling #each or #collect should only be done if - # the_call#writes_done has been called, otherwise the block will loop - # forever. - # - # == Flow Control == - # This is a blocking call. - # - # * the call completes when the next call to provided block returns - # * [False] - # - # * the execution block parameters are two objects for sending and - # receiving responses, each of which blocks waiting for flow control. - # E.g, calles to bidi_call#remote_send will wait until flow control - # allows another write before returning; and obviously calls to - # responses#next block until the next response is available. - # - # == Termination == - # - # As well as sending and receiving messages, the block passed to the - # function is also responsible for: - # - # * calling bidi_call#writes_done to indicate no further reqs will be - # sent. - # - # * returning false if once the bidi stream is functionally completed. - # - # Note that response#next will indicate that there are no further - # responses by throwing StopIteration, but can only happen either - # if bidi_call#writes_done is called. - # - # To terminate the RPC correctly the block: - # - # * must call bidi#writes_done and then - # - # * either return false as soon as there is no need for other responses - # - # * loop on responses#next until no further responses are available - # - # == Errors == - # An RuntimeError is raised if - # - # * the server responds with a non-OK status when any response is - # * retrieved - # - # * the deadline is exceeded - # - # - # == Keyword Args == - # - # Unspecified keyword arguments are treated as metadata to be sent to the - # server. - # - # == Return Value == - # - # if the return_op is false, the return value is an Enumerator of the - # results, unless a block is provided, in which case the block is - # executed with each response. - # - # if return_op is true, the function returns an Operation whose #execute - # method runs the Bidi call. Again, Operation#execute either calls a - # given block with each response or returns an Enumerator of the responses. - # - # @param method [String] the RPC method to call on the GRPC server - # @param requests [Object] an Enumerable of requests to send - # @param marshal [Function] f(obj)->string that marshals requests - # @param unmarshal [Function] f(string)->obj that unmarshals responses - # @param deadline [Numeric] (optional) the max completion time in seconds - # @param blk [Block] when provided, is executed for each response - # @param return_op [true|false] (default false) return an Operation if true - # @return [Enumerator|nil|Operation] as discussed above - def bidi_streamer(method, requests, marshal, unmarshal, deadline=nil, - return_op:false, **kw, &blk) - c = new_active_call(method, marshal, unmarshal, deadline || @deadline) - md = @update_metadata.nil? ? kw : @update_metadata.call(kw.clone) - return c.bidi_streamer(requests, **md, &blk) unless return_op + private - # return the operation view of the active_call; define #execute - # as a new method for this instance that invokes #bidi_streamer - op = c.operation - op.define_singleton_method(:execute) do - c.bidi_streamer(requests, **md, &blk) + # Creates a new active stub + # + # @param ch [GRPC::Channel] the channel used to create the stub. + # @param marshal [Function] f(obj)->string that marshals requests + # @param unmarshal [Function] f(string)->obj that unmarshals responses + # @param deadline [TimeConst] + def new_active_call(ch, marshal, unmarshal, deadline = nil) + absolute_deadline = Core::TimeConsts.from_relative_time(deadline) + call = @ch.create_call(ch, @host, absolute_deadline) + ActiveCall.new(call, @queue, marshal, unmarshal, absolute_deadline, + started: false) end - op end - - private - # Creates a new active stub - # - # @param ch [GRPC::Channel] the channel used to create the stub. - # @param marshal [Function] f(obj)->string that marshals requests - # @param unmarshal [Function] f(string)->obj that unmarshals responses - # @param deadline [TimeConst] - def new_active_call(ch, marshal, unmarshal, deadline=nil) - absolute_deadline = Core::TimeConsts.from_relative_time(deadline) - call = @ch.create_call(ch, @host, absolute_deadline) - ActiveCall.new(call, @queue, marshal, unmarshal, absolute_deadline, - started:false) - end - end - end diff --git a/src/ruby/lib/grpc/generic/rpc_desc.rb b/src/ruby/lib/grpc/generic/rpc_desc.rb index a915708f9207d1973258e981ca3a87b99daa2204..e1aa33e3183f8d62827dcc481d01715d26bc2628 100644 --- a/src/ruby/lib/grpc/generic/rpc_desc.rb +++ b/src/ruby/lib/grpc/generic/rpc_desc.rb @@ -29,54 +29,51 @@ require 'grpc/grpc' -module Google::RPC - - # RpcDesc is a Descriptor of an RPC method. - class RpcDesc < Struct.new(:name, :input, :output, :marshal_method, - :unmarshal_method) - include Core::StatusCodes - - # Used to wrap a message class to indicate that it needs to be streamed. - class Stream - attr_accessor :type - - def initialize(type) - @type = type +module Google + module RPC + # RpcDesc is a Descriptor of an RPC method. + class RpcDesc < Struct.new(:name, :input, :output, :marshal_method, + :unmarshal_method) + include Core::StatusCodes + + # Used to wrap a message class to indicate that it needs to be streamed. + class Stream + attr_accessor :type + + def initialize(type) + @type = type + end end - end - # @return [Proc] { |instance| marshalled(instance) } - def marshal_proc - Proc.new { |o| o.class.method(marshal_method).call(o).to_s } - end + # @return [Proc] { |instance| marshalled(instance) } + def marshal_proc + proc { |o| o.class.method(marshal_method).call(o).to_s } + end - # @param [:input, :output] target determines whether to produce the an - # unmarshal Proc for the rpc input parameter or - # its output parameter - # - # @return [Proc] An unmarshal proc { |marshalled(instance)| instance } - def unmarshal_proc(target) - raise ArgumentError if not [:input, :output].include?(target) - unmarshal_class = method(target).call - if unmarshal_class.is_a?Stream - unmarshal_class = unmarshal_class.type + # @param [:input, :output] target determines whether to produce the an + # unmarshal Proc for the rpc input parameter or + # its output parameter + # + # @return [Proc] An unmarshal proc { |marshalled(instance)| instance } + def unmarshal_proc(target) + fail ArgumentError unless [:input, :output].include?(target) + unmarshal_class = method(target).call + unmarshal_class = unmarshal_class.type if unmarshal_class.is_a? Stream + proc { |o| unmarshal_class.method(unmarshal_method).call(o) } end - Proc.new { |o| unmarshal_class.method(unmarshal_method).call(o) } - end - def run_server_method(active_call, mth) - # While a server method is running, it might be cancelled, its deadline - # might be reached, the handler could throw an unknown error, or a - # well-behaved handler could throw a StatusError. - begin - if is_request_response? + def run_server_method(active_call, mth) + # While a server method is running, it might be cancelled, its deadline + # might be reached, the handler could throw an unknown error, or a + # well-behaved handler could throw a StatusError. + if request_response? req = active_call.remote_read resp = mth.call(req, active_call.single_req_view) active_call.remote_send(resp) - elsif is_client_streamer? + elsif client_streamer? resp = mth.call(active_call.multi_req_view) active_call.remote_send(resp) - elsif is_server_streamer? + elsif server_streamer? req = active_call.remote_read replys = mth.call(req, active_call.single_req_view) replys.each { |r| active_call.remote_send(r) } @@ -88,7 +85,7 @@ module Google::RPC rescue BadStatus => e # this is raised by handlers that want GRPC to send an application # error code and detail message. - logger.debug("app error: #{active_call}, status:#{e.code}:#{e.details}") + logger.debug("app err: #{active_call}, status:#{e.code}:#{e.details}") send_status(active_call, e.code, e.details) rescue Core::CallError => e # This is raised by GRPC internals but should rarely, if ever happen. @@ -110,50 +107,46 @@ module Google::RPC logger.warn(e) send_status(active_call, UNKNOWN, 'no reason given') end - end - def assert_arity_matches(mth) - if (is_request_response? || is_server_streamer?) - if mth.arity != 2 - raise arity_error(mth, 2, "should be #{mth.name}(req, call)") - end - else - if mth.arity != 1 - raise arity_error(mth, 1, "should be #{mth.name}(call)") + def assert_arity_matches(mth) + if request_response? || server_streamer? + if mth.arity != 2 + fail arity_error(mth, 2, "should be #{mth.name}(req, call)") + end + else + if mth.arity != 1 + fail arity_error(mth, 1, "should be #{mth.name}(call)") + end end end - end - def is_request_response? - !input.is_a?(Stream) && !output.is_a?(Stream) - end + def request_response? + !input.is_a?(Stream) && !output.is_a?(Stream) + end - def is_client_streamer? - input.is_a?(Stream) && !output.is_a?(Stream) - end + def client_streamer? + input.is_a?(Stream) && !output.is_a?(Stream) + end - def is_server_streamer? - !input.is_a?(Stream) && output.is_a?(Stream) - end + def server_streamer? + !input.is_a?(Stream) && output.is_a?(Stream) + end - def is_bidi_streamer? - input.is_a?(Stream) && output.is_a?(Stream) - end + def bidi_streamer? + input.is_a?(Stream) && output.is_a?(Stream) + end - def arity_error(mth, want, msg) - "##{mth.name}: bad arg count; got:#{mth.arity}, want:#{want}, #{msg}" - end + def arity_error(mth, want, msg) + "##{mth.name}: bad arg count; got:#{mth.arity}, want:#{want}, #{msg}" + end - def send_status(active_client, code, details) - begin + def send_status(active_client, code, details) details = 'Not sure why' if details.nil? active_client.send_status(code, details) rescue StandardError => e - logger.warn('Could not send status %d:%s' % [code, details]) + logger.warn("Could not send status #{code}:#{details}") logger.warn(e) end end - end - end diff --git a/src/ruby/lib/grpc/generic/rpc_server.rb b/src/ruby/lib/grpc/generic/rpc_server.rb index 81db68804ec10dfd865df54080cb76fdce7d1ca1..5ea3cc94d65a2fd1c1c457508388d1e47562675a 100644 --- a/src/ruby/lib/grpc/generic/rpc_server.rb +++ b/src/ruby/lib/grpc/generic/rpc_server.rb @@ -33,382 +33,378 @@ require 'grpc/generic/service' require 'thread' require 'xray/thread_dump_signal_handler' -module Google::RPC - - # RpcServer hosts a number of services and makes them available on the - # network. - class RpcServer - include Core::CompletionType - include Core::TimeConsts - extend ::Forwardable - - def_delegators :@server, :add_http2_port - - # Default thread pool size is 3 - DEFAULT_POOL_SIZE = 3 - - # Default max_waiting_requests size is 20 - DEFAULT_MAX_WAITING_REQUESTS = 20 - - # Creates a new RpcServer. - # - # The RPC server is configured using keyword arguments. - # - # There are some specific keyword args used to configure the RpcServer - # instance, however other arbitrary are allowed and when present are used - # to configure the listeninng connection set up by the RpcServer. - # - # * server_override: which if passed must be a [GRPC::Core::Server]. When - # present. - # - # * poll_period: when present, the server polls for new events with this - # period - # - # * pool_size: the size of the thread pool the server uses to run its - # threads - # - # * completion_queue_override: when supplied, this will be used as the - # completion_queue that the server uses to receive network events, - # otherwise its creates a new instance itself - # - # * creds: [GRPC::Core::ServerCredentials] - # the credentials used to secure the server - # - # * max_waiting_requests: the maximum number of requests that are not - # being handled to allow. When this limit is exceeded, the server responds - # with not available to new requests - def initialize(pool_size:DEFAULT_POOL_SIZE, - max_waiting_requests:DEFAULT_MAX_WAITING_REQUESTS, - poll_period:INFINITE_FUTURE, - completion_queue_override:nil, - creds:nil, - server_override:nil, - **kw) - if !completion_queue_override.nil? - cq = completion_queue_override - if !cq.is_a?(Core::CompletionQueue) - raise ArgumentError.new('not a CompletionQueue') +module Google + # Google::RPC contains the General RPC module. + module RPC + # RpcServer hosts a number of services and makes them available on the + # network. + class RpcServer + include Core::CompletionType + include Core::TimeConsts + extend ::Forwardable + + def_delegators :@server, :add_http2_port + + # Default thread pool size is 3 + DEFAULT_POOL_SIZE = 3 + + # Default max_waiting_requests size is 20 + DEFAULT_MAX_WAITING_REQUESTS = 20 + + # Creates a new RpcServer. + # + # The RPC server is configured using keyword arguments. + # + # There are some specific keyword args used to configure the RpcServer + # instance, however other arbitrary are allowed and when present are used + # to configure the listeninng connection set up by the RpcServer. + # + # * server_override: which if passed must be a [GRPC::Core::Server]. When + # present. + # + # * poll_period: when present, the server polls for new events with this + # period + # + # * pool_size: the size of the thread pool the server uses to run its + # threads + # + # * completion_queue_override: when supplied, this will be used as the + # completion_queue that the server uses to receive network events, + # otherwise its creates a new instance itself + # + # * creds: [GRPC::Core::ServerCredentials] + # the credentials used to secure the server + # + # * max_waiting_requests: the maximum number of requests that are not + # being handled to allow. When this limit is exceeded, the server responds + # with not available to new requests + def initialize(pool_size:DEFAULT_POOL_SIZE, + max_waiting_requests:DEFAULT_MAX_WAITING_REQUESTS, + poll_period:INFINITE_FUTURE, + completion_queue_override:nil, + creds:nil, + server_override:nil, + **kw) + if completion_queue_override.nil? + cq = Core::CompletionQueue.new + else + cq = completion_queue_override + unless cq.is_a? Core::CompletionQueue + fail(ArgumentError, 'not a CompletionQueue') + end end - else - cq = Core::CompletionQueue.new - end - @cq = cq - - if !server_override.nil? - srv = server_override - raise ArgumentError.new('not a Server') unless srv.is_a?(Core::Server) - elsif creds.nil? - srv = Core::Server.new(@cq, kw) - elsif !creds.is_a?(Core::ServerCredentials) - raise ArgumentError.new('not a ServerCredentials') - else - srv = Core::Server.new(@cq, kw, creds) + @cq = cq + + if server_override.nil? + if creds.nil? + srv = Core::Server.new(@cq, kw) + elsif !creds.is_a? Core::ServerCredentials + fail(ArgumentError, 'not a ServerCredentials') + else + srv = Core::Server.new(@cq, kw, creds) + end + else + srv = server_override + fail(ArgumentError, 'not a Server') unless srv.is_a? Core::Server + end + @server = srv + + @pool_size = pool_size + @max_waiting_requests = max_waiting_requests + @poll_period = poll_period + @run_mutex = Mutex.new + @run_cond = ConditionVariable.new + @pool = Pool.new(@pool_size) end - @server = srv - - @pool_size = pool_size - @max_waiting_requests = max_waiting_requests - @poll_period = poll_period - @run_mutex = Mutex.new - @run_cond = ConditionVariable.new - @pool = Pool.new(@pool_size) - end - # stops a running server - # - # the call has no impact if the server is already stopped, otherwise - # server's current call loop is it's last. - def stop - if @running + # stops a running server + # + # the call has no impact if the server is already stopped, otherwise + # server's current call loop is it's last. + def stop + return unless @running @stopped = true @pool.stop end - end - # determines if the server is currently running - def running? - @running ||= false - end + # determines if the server is currently running + def running? + @running ||= false + end - # Is called from other threads to wait for #run to start up the server. - # - # If run has not been called, this returns immediately. - # - # @param timeout [Numeric] number of seconds to wait - # @result [true, false] true if the server is running, false otherwise - def wait_till_running(timeout=0.1) - end_time, sleep_period = Time.now + timeout, (1.0 * timeout)/100 - while Time.now < end_time - if !running? - @run_mutex.synchronize { @run_cond.wait(@run_mutex) } + # Is called from other threads to wait for #run to start up the server. + # + # If run has not been called, this returns immediately. + # + # @param timeout [Numeric] number of seconds to wait + # @result [true, false] true if the server is running, false otherwise + def wait_till_running(timeout = 0.1) + end_time, sleep_period = Time.now + timeout, (1.0 * timeout) / 100 + while Time.now < end_time + @run_mutex.synchronize { @run_cond.wait(@run_mutex) } unless running? + sleep(sleep_period) end - sleep(sleep_period) + running? end - return running? - end - - # determines if the server is currently stopped - def stopped? - @stopped ||= false - end - - # handle registration of classes - # - # service is either a class that includes GRPC::GenericService and whose - # #new function can be called without argument or any instance of such a - # class. - # - # E.g, after - # - # class Divider - # include GRPC::GenericService - # rpc :div DivArgs, DivReply # single request, single response - # def initialize(optional_arg='default option') # no args - # ... - # end - # - # srv = GRPC::RpcServer.new(...) - # - # # Either of these works - # - # srv.handle(Divider) - # - # # or - # - # srv.handle(Divider.new('replace optional arg')) - # - # It raises RuntimeError: - # - if service is not valid service class or object - # - if it is a valid service, but the handler methods are already registered - # - if the server is already running - # - # @param service [Object|Class] a service class or object as described - # above - def handle(service) - raise 'cannot add services if the server is running' if running? - raise 'cannot add services if the server is stopped' if stopped? - cls = service.is_a?(Class) ? service : service.class - assert_valid_service_class(cls) - add_rpc_descs_for(service) - end - # runs the server - # - # - if no rpc_descs are registered, this exits immediately, otherwise it - # continues running permanently and does not return until program exit. - # - # - #running? returns true after this is called, until #stop cause the - # the server to stop. - def run - if rpc_descs.size == 0 - logger.warn('did not run as no services were present') - return + # determines if the server is currently stopped + def stopped? + @stopped ||= false end - @run_mutex.synchronize do - @running = true - @run_cond.signal + + # handle registration of classes + # + # service is either a class that includes GRPC::GenericService and whose + # #new function can be called without argument or any instance of such a + # class. + # + # E.g, after + # + # class Divider + # include GRPC::GenericService + # rpc :div DivArgs, DivReply # single request, single response + # def initialize(optional_arg='default option') # no args + # ... + # end + # + # srv = GRPC::RpcServer.new(...) + # + # # Either of these works + # + # srv.handle(Divider) + # + # # or + # + # srv.handle(Divider.new('replace optional arg')) + # + # It raises RuntimeError: + # - if service is not valid service class or object + # - its handler methods are already registered + # - if the server is already running + # + # @param service [Object|Class] a service class or object as described + # above + def handle(service) + fail 'cannot add services if the server is running' if running? + fail 'cannot add services if the server is stopped' if stopped? + cls = service.is_a?(Class) ? service : service.class + assert_valid_service_class(cls) + add_rpc_descs_for(service) end - @pool.start - @server.start - server_tag = Object.new - while !stopped? - @server.request_call(server_tag) - ev = @cq.pluck(server_tag, @poll_period) - next if ev.nil? - if ev.type != SERVER_RPC_NEW - logger.warn("bad evt: got:#{ev.type}, want:#{SERVER_RPC_NEW}") - ev.close - next + + # runs the server + # + # - if no rpc_descs are registered, this exits immediately, otherwise it + # continues running permanently and does not return until program exit. + # + # - #running? returns true after this is called, until #stop cause the + # the server to stop. + def run + if rpc_descs.size == 0 + logger.warn('did not run as no services were present') + return end - c = new_active_server_call(ev.call, ev.result) - if !c.nil? - mth = ev.result.method.to_sym - ev.close - @pool.schedule(c) do |call| - rpc_descs[mth].run_server_method(call, rpc_handlers[mth]) + @run_mutex.synchronize do + @running = true + @run_cond.signal + end + @pool.start + @server.start + server_tag = Object.new + until stopped? + @server.request_call(server_tag) + ev = @cq.pluck(server_tag, @poll_period) + next if ev.nil? + if ev.type != SERVER_RPC_NEW + logger.warn("bad evt: got:#{ev.type}, want:#{SERVER_RPC_NEW}") + ev.close + next + end + c = new_active_server_call(ev.call, ev.result) + unless c.nil? + mth = ev.result.method.to_sym + ev.close + @pool.schedule(c) do |call| + rpc_descs[mth].run_server_method(call, rpc_handlers[mth]) + end end end - end - @running = false - end - - def new_active_server_call(call, new_server_rpc) - # TODO(temiola): perhaps reuse the main server completion queue here, but - # for now, create a new completion queue per call, pending best practice - # usage advice from the c core. - - # Accept the call. This is necessary even if a status is to be sent back - # immediately - finished_tag = Object.new - call_queue = Core::CompletionQueue.new - call.metadata = new_server_rpc.metadata # store the metadata on the call - call.server_accept(call_queue, finished_tag) - call.server_end_initial_metadata() - - # Send UNAVAILABLE if there are too many unprocessed jobs - jobs_count, max = @pool.jobs_waiting, @max_waiting_requests - logger.info("waiting: #{jobs_count}, max: #{max}") - if @pool.jobs_waiting > @max_waiting_requests - logger.warn("NOT AVAILABLE: too many jobs_waiting: #{new_server_rpc}") - noop = Proc.new { |x| x } - c = ActiveCall.new(call, call_queue, noop, noop, - new_server_rpc.deadline, finished_tag: finished_tag) - c.send_status(StatusCodes::UNAVAILABLE, '') - return nil + @running = false end - # Send NOT_FOUND if the method does not exist - mth = new_server_rpc.method.to_sym - if !rpc_descs.has_key?(mth) - logger.warn("NOT_FOUND: #{new_server_rpc}") - noop = Proc.new { |x| x } - c = ActiveCall.new(call, call_queue, noop, noop, - new_server_rpc.deadline, finished_tag: finished_tag) - c.send_status(StatusCodes::NOT_FOUND, '') - return nil - end + def new_active_server_call(call, new_server_rpc) + # TODO(temiola): perhaps reuse the main server completion queue here, + # but for now, create a new completion queue per call, pending best + # practice usage advice from the c core. + + # Accept the call. This is necessary even if a status is to be sent + # back immediately + finished_tag = Object.new + call_queue = Core::CompletionQueue.new + call.metadata = new_server_rpc.metadata # store the metadata + call.server_accept(call_queue, finished_tag) + call.server_end_initial_metadata + + # Send UNAVAILABLE if there are too many unprocessed jobs + jobs_count, max = @pool.jobs_waiting, @max_waiting_requests + logger.info("waiting: #{jobs_count}, max: #{max}") + if @pool.jobs_waiting > @max_waiting_requests + logger.warn("NOT AVAILABLE: too many jobs_waiting: #{new_server_rpc}") + noop = proc { |x| x } + c = ActiveCall.new(call, call_queue, noop, noop, + new_server_rpc.deadline, + finished_tag: finished_tag) + c.send_status(StatusCodes::UNAVAILABLE, '') + return nil + end - # Create the ActiveCall - rpc_desc = rpc_descs[mth] - logger.info("deadline is #{new_server_rpc.deadline}; (now=#{Time.now})") - ActiveCall.new(call, call_queue, - rpc_desc.marshal_proc, rpc_desc.unmarshal_proc(:input), - new_server_rpc.deadline, finished_tag: finished_tag) - end + # Send NOT_FOUND if the method does not exist + mth = new_server_rpc.method.to_sym + unless rpc_descs.key?(mth) + logger.warn("NOT_FOUND: #{new_server_rpc}") + noop = proc { |x| x } + c = ActiveCall.new(call, call_queue, noop, noop, + new_server_rpc.deadline, + finished_tag: finished_tag) + c.send_status(StatusCodes::NOT_FOUND, '') + return nil + end - # Pool is a simple thread pool for running server requests. - class Pool - - def initialize(size) - raise 'pool size must be positive' unless size > 0 - @jobs = Queue.new - @size = size - @stopped = false - @stop_mutex = Mutex.new - @stop_cond = ConditionVariable.new - @workers = [] + # Create the ActiveCall + rpc_desc = rpc_descs[mth] + logger.info("deadline is #{new_server_rpc.deadline}; (now=#{Time.now})") + ActiveCall.new(call, call_queue, + rpc_desc.marshal_proc, rpc_desc.unmarshal_proc(:input), + new_server_rpc.deadline, finished_tag: finished_tag) end - # Returns the number of jobs waiting - def jobs_waiting - @jobs.size - end + # Pool is a simple thread pool for running server requests. + class Pool + def initialize(size) + fail 'pool size must be positive' unless size > 0 + @jobs = Queue.new + @size = size + @stopped = false + @stop_mutex = Mutex.new + @stop_cond = ConditionVariable.new + @workers = [] + end - # Runs the given block on the queue with the provided args. - # - # @param args the args passed blk when it is called - # @param blk the block to call - def schedule(*args, &blk) - raise 'already stopped' if @stopped - return if blk.nil? - logger.info('schedule another job') - @jobs << [blk, args] - end + # Returns the number of jobs waiting + def jobs_waiting + @jobs.size + end + + # Runs the given block on the queue with the provided args. + # + # @param args the args passed blk when it is called + # @param blk the block to call + def schedule(*args, &blk) + fail 'already stopped' if @stopped + return if blk.nil? + logger.info('schedule another job') + @jobs << [blk, args] + end - # Starts running the jobs in the thread pool. - def start - raise 'already stopped' if @stopped - until @workers.size == @size.to_i - next_thread = Thread.new do - catch(:exit) do # allows { throw :exit } to kill a thread - loop do - begin - blk, args = @jobs.pop - blk.call(*args) - rescue StandardError => e - logger.warn('Error in worker thread') - logger.warn(e) + # Starts running the jobs in the thread pool. + def start + fail 'already stopped' if @stopped + until @workers.size == @size.to_i + next_thread = Thread.new do + catch(:exit) do # allows { throw :exit } to kill a thread + loop do + begin + blk, args = @jobs.pop + blk.call(*args) + rescue StandardError => e + logger.warn('Error in worker thread') + logger.warn(e) + end end end - end - # removes the threads from workers, and signal when all the threads - # are complete. - @stop_mutex.synchronize do - @workers.delete(Thread.current) - if @workers.size == 0 - @stop_cond.signal + # removes the threads from workers, and signal when all the + # threads are complete. + @stop_mutex.synchronize do + @workers.delete(Thread.current) + @stop_cond.signal if @workers.size == 0 end end + @workers << next_thread end - @workers << next_thread end - end - # Stops the jobs in the pool - def stop - logger.info('stopping, will wait for all the workers to exit') - @workers.size.times { schedule { throw :exit } } - @stopped = true + # Stops the jobs in the pool + def stop + logger.info('stopping, will wait for all the workers to exit') + @workers.size.times { schedule { throw :exit } } + @stopped = true - # TODO(temiola): allow configuration of the keepalive period - keep_alive = 5 - @stop_mutex.synchronize do - if @workers.size > 0 - @stop_cond.wait(@stop_mutex, keep_alive) + # TODO(temiola): allow configuration of the keepalive period + keep_alive = 5 + @stop_mutex.synchronize do + @stop_cond.wait(@stop_mutex, keep_alive) if @workers.size > 0 end - end - # Forcibly shutdown any threads that are still alive. - if @workers.size > 0 - logger.warn("forcibly terminating #{@workers.size} worker(s)") - @workers.each do |t| - next unless t.alive? - begin - t.exit - rescue StandardError => e - logger.warn('error while terminating a worker') - logger.warn(e) + # Forcibly shutdown any threads that are still alive. + if @workers.size > 0 + logger.warn("forcibly terminating #{@workers.size} worker(s)") + @workers.each do |t| + next unless t.alive? + begin + t.exit + rescue StandardError => e + logger.warn('error while terminating a worker') + logger.warn(e) + end end end - end - logger.info('stopped, all workers are shutdown') + logger.info('stopped, all workers are shutdown') + end end - end + protected - protected - - def rpc_descs - @rpc_descs ||= {} - end + def rpc_descs + @rpc_descs ||= {} + end - def rpc_handlers - @rpc_handlers ||= {} - end + def rpc_handlers + @rpc_handlers ||= {} + end - private + private - def assert_valid_service_class(cls) - if !cls.include?(GenericService) - raise "#{cls} should 'include GenericService'" - end - if cls.rpc_descs.size == 0 - raise "#{cls} should specify some rpc descriptions" + def assert_valid_service_class(cls) + unless cls.include?(GenericService) + fail "#{cls} should 'include GenericService'" + end + if cls.rpc_descs.size == 0 + fail "#{cls} should specify some rpc descriptions" + end + cls.assert_rpc_descs_have_methods end - cls.assert_rpc_descs_have_methods - end - def add_rpc_descs_for(service) - cls = service.is_a?(Class) ? service : service.class - specs = rpc_descs - handlers = rpc_handlers - cls.rpc_descs.each_pair do |name,spec| - route = "/#{cls.service_name}/#{name}".to_sym - if specs.has_key?(route) - raise "Cannot add rpc #{route} from #{spec}, already registered" - else - specs[route] = spec - if service.is_a?(Class) - handlers[route] = cls.new.method(name.to_s.underscore.to_sym) + def add_rpc_descs_for(service) + cls = service.is_a?(Class) ? service : service.class + specs = rpc_descs + handlers = rpc_handlers + cls.rpc_descs.each_pair do |name, spec| + route = "/#{cls.service_name}/#{name}".to_sym + if specs.key? route + fail "Cannot add rpc #{route} from #{spec}, already registered" else - handlers[route] = service.method(name.to_s.underscore.to_sym) + specs[route] = spec + if service.is_a?(Class) + handlers[route] = cls.new.method(name.to_s.underscore.to_sym) + else + handlers[route] = service.method(name.to_s.underscore.to_sym) + end + logger.info("handling #{route} with #{handlers[route]}") end - logger.info("handling #{route} with #{handlers[route]}") end end end end - end diff --git a/src/ruby/lib/grpc/generic/service.rb b/src/ruby/lib/grpc/generic/service.rb index f3fe638fcefd36c0d23072eb2ac0ab427dffe308..ff37617ccfad39f5f72dcb42ec805015a30867f4 100644 --- a/src/ruby/lib/grpc/generic/service.rb +++ b/src/ruby/lib/grpc/generic/service.rb @@ -32,7 +32,6 @@ require 'grpc/generic/rpc_desc' # Extend String to add a method underscore class String - # creates a new string that is the underscore separate version of this one. # # E.g, @@ -40,210 +39,199 @@ class String # AMethod -> a_method # AnRpc -> an_rpc def underscore - word = self.dup + word = dup word.gsub!(/([A-Z]+)([A-Z][a-z])/, '\1_\2') word.gsub!(/([a-z\d])([A-Z])/, '\1_\2') word.tr!('-', '_') word.downcase! word end - end -module Google::RPC - - # Provides behaviour used to implement schema-derived service classes. - # - # Is intended to be used to support both client and server IDL-schema-derived - # servers. - module GenericService - - # Used to indicate that a name has already been specified - class DuplicateRpcName < StandardError - def initialize(name) - super("rpc (#{name}) is already defined") - end - end - - # Provides a simple DSL to describe RPC services. - # - # E.g, a Maths service that uses the serializable messages DivArgs, - # DivReply and Num might define its endpoint uses the following way: - # - # rpc :div DivArgs, DivReply # single request, single response - # rpc :sum stream(Num), Num # streamed input, single response - # rpc :fib FibArgs, stream(Num) # single request, streamed response - # rpc :div_many stream(DivArgs), stream(DivReply) - # # streamed req and resp +module Google + # Google::RPC contains the General RPC module. + module RPC + # Provides behaviour used to implement schema-derived service classes. # - # Each 'rpc' adds an RpcDesc to classes including this module, and - # #assert_rpc_descs_have_methods is used to ensure the including class - # provides methods with signatures that support all the descriptors. - module Dsl - - # This configures the method names that the serializable message - # implementation uses to marshal and unmarshal messages. - # - # - unmarshal_class method must be a class method on the serializable - # message type that takes a string (byte stream) and produces and object - # - # - marshal_class_method is called on a serializable message instance - # and produces a serialized string. - # - # The Dsl verifies that the types in the descriptor have both the - # unmarshal and marshal methods. - attr_writer(:marshal_class_method, :unmarshal_class_method) - - # This allows configuration of the service name. - attr_accessor(:service_name) + # Is intended to be used to support both client and server + # IDL-schema-derived servers. + module GenericService + # Used to indicate that a name has already been specified + class DuplicateRpcName < StandardError + def initialize(name) + super("rpc (#{name}) is already defined") + end + end - # Adds an RPC spec. + # Provides a simple DSL to describe RPC services. # - # Takes the RPC name and the classes representing the types to be - # serialized, and adds them to the including classes rpc_desc hash. + # E.g, a Maths service that uses the serializable messages DivArgs, + # DivReply and Num might define its endpoint uses the following way: # - # input and output should both have the methods #marshal and #unmarshal - # that are responsible for writing and reading an object instance from a - # byte buffer respectively. + # rpc :div DivArgs, DivReply # single request, single response + # rpc :sum stream(Num), Num # streamed input, single response + # rpc :fib FibArgs, stream(Num) # single request, streamed response + # rpc :div_many stream(DivArgs), stream(DivReply) + # # streamed req and resp # - # @param name [String] the name of the rpc - # @param input [Object] the input parameter's class - # @param output [Object] the output parameter's class - def rpc(name, input, output) - raise DuplicateRpcName, name if rpc_descs.has_key?(name) - assert_can_marshal(input) - assert_can_marshal(output) - rpc_descs[name] = RpcDesc.new(name, input, output, - marshal_class_method, - unmarshal_class_method) - end - - def inherited(subclass) - # Each subclass should have a distinct class variable with its own - # rpc_descs - subclass.rpc_descs.merge!(rpc_descs) - subclass.service_name = service_name - end - - # the name of the instance method used to marshal events to a byte stream. - def marshal_class_method - @marshal_class_method ||= :marshal - end + # Each 'rpc' adds an RpcDesc to classes including this module, and + # #assert_rpc_descs_have_methods is used to ensure the including class + # provides methods with signatures that support all the descriptors. + module Dsl + # This configures the method names that the serializable message + # implementation uses to marshal and unmarshal messages. + # + # - unmarshal_class method must be a class method on the serializable + # message type that takes a string (byte stream) and produces and object + # + # - marshal_class_method is called on a serializable message instance + # and produces a serialized string. + # + # The Dsl verifies that the types in the descriptor have both the + # unmarshal and marshal methods. + attr_writer(:marshal_class_method, :unmarshal_class_method) + + # This allows configuration of the service name. + attr_accessor(:service_name) + + # Adds an RPC spec. + # + # Takes the RPC name and the classes representing the types to be + # serialized, and adds them to the including classes rpc_desc hash. + # + # input and output should both have the methods #marshal and #unmarshal + # that are responsible for writing and reading an object instance from a + # byte buffer respectively. + # + # @param name [String] the name of the rpc + # @param input [Object] the input parameter's class + # @param output [Object] the output parameter's class + def rpc(name, input, output) + fail(DuplicateRpcName, name) if rpc_descs.key? name + assert_can_marshal(input) + assert_can_marshal(output) + rpc_descs[name] = RpcDesc.new(name, input, output, + marshal_class_method, + unmarshal_class_method) + end - # the name of the class method used to unmarshal from a byte stream. - def unmarshal_class_method - @unmarshal_class_method ||= :unmarshal - end + def inherited(subclass) + # Each subclass should have a distinct class variable with its own + # rpc_descs + subclass.rpc_descs.merge!(rpc_descs) + subclass.service_name = service_name + end - def assert_can_marshal(cls) - if cls.is_a?RpcDesc::Stream - cls = cls.type + # the name of the instance method used to marshal events to a byte + # stream. + def marshal_class_method + @marshal_class_method ||= :marshal end - mth = unmarshal_class_method - if !cls.methods.include?(mth) - raise ArgumentError, "#{cls} needs #{cls}.#{mth}" + # the name of the class method used to unmarshal from a byte stream. + def unmarshal_class_method + @unmarshal_class_method ||= :unmarshal end - mth = marshal_class_method - if !cls.methods.include?(mth) - raise ArgumentError, "#{cls} needs #{cls}.#{mth}" + def assert_can_marshal(cls) + cls = cls.type if cls.is_a? RpcDesc::Stream + mth = unmarshal_class_method + unless cls.methods.include? mth + fail(ArgumentError, "#{cls} needs #{cls}.#{mth}") + end + mth = marshal_class_method + return if cls.methods.include? mth + fail(ArgumentError, "#{cls} needs #{cls}.#{mth}") end - end - # @param cls [Class] the class of a serializable type - # @return cls wrapped in a RpcDesc::Stream - def stream(cls) - assert_can_marshal(cls) - RpcDesc::Stream.new(cls) - end + # @param cls [Class] the class of a serializable type + # @return cls wrapped in a RpcDesc::Stream + def stream(cls) + assert_can_marshal(cls) + RpcDesc::Stream.new(cls) + end - # the RpcDescs defined for this GenericService, keyed by name. - def rpc_descs - @rpc_descs ||= {} - end + # the RpcDescs defined for this GenericService, keyed by name. + def rpc_descs + @rpc_descs ||= {} + end - # Creates a rpc client class with methods for accessing the methods - # currently in rpc_descs. - def rpc_stub_class - descs = rpc_descs - route_prefix = service_name - Class.new(ClientStub) do - - # @param host [String] the host the stub connects to - # @param kw [KeywordArgs] the channel arguments, plus any optional - # args for configuring the client's channel - def initialize(host, **kw) - super(host, Core::CompletionQueue.new, **kw) - end + # Creates a rpc client class with methods for accessing the methods + # currently in rpc_descs. + def rpc_stub_class + descs = rpc_descs + route_prefix = service_name + Class.new(ClientStub) do + # @param host [String] the host the stub connects to + # @param kw [KeywordArgs] the channel arguments, plus any optional + # args for configuring the client's channel + def initialize(host, **kw) + super(host, Core::CompletionQueue.new, **kw) + end - # Used define_method to add a method for each rpc_desc. Each method - # calls the base class method for the given descriptor. - descs.each_pair do |name,desc| - mth_name = name.to_s.underscore.to_sym - marshal = desc.marshal_proc - unmarshal = desc.unmarshal_proc(:output) - route = "/#{route_prefix}/#{name}" - if desc.is_request_response? - define_method(mth_name) do |req,deadline=nil| - logger.debug("calling #{@host}:#{route}") - request_response(route, req, marshal, unmarshal, deadline) - end - elsif desc.is_client_streamer? - define_method(mth_name) do |reqs,deadline=nil| - logger.debug("calling #{@host}:#{route}") - client_streamer(route, reqs, marshal, unmarshal, deadline) - end - elsif desc.is_server_streamer? - define_method(mth_name) do |req,deadline=nil,&blk| - logger.debug("calling #{@host}:#{route}") - server_streamer(route, req, marshal, unmarshal, deadline, &blk) - end - else # is a bidi_stream - define_method(mth_name) do |reqs, deadline=nil,&blk| - logger.debug("calling #{@host}:#{route}") - bidi_streamer(route, reqs, marshal, unmarshal, deadline, &blk) + # Used define_method to add a method for each rpc_desc. Each method + # calls the base class method for the given descriptor. + descs.each_pair do |name, desc| + mth_name = name.to_s.underscore.to_sym + marshal = desc.marshal_proc + unmarshal = desc.unmarshal_proc(:output) + route = "/#{route_prefix}/#{name}" + if desc.request_response? + define_method(mth_name) do |req, deadline = nil| + logger.debug("calling #{@host}:#{route}") + request_response(route, req, marshal, unmarshal, deadline) + end + elsif desc.client_streamer? + define_method(mth_name) do |reqs, deadline = nil| + logger.debug("calling #{@host}:#{route}") + client_streamer(route, reqs, marshal, unmarshal, deadline) + end + elsif desc.server_streamer? + define_method(mth_name) do |req, deadline = nil, &blk| + logger.debug("calling #{@host}:#{route}") + server_streamer(route, req, marshal, unmarshal, deadline, + &blk) + end + else # is a bidi_stream + define_method(mth_name) do |reqs, deadline = nil, &blk| + logger.debug("calling #{@host}:#{route}") + bidi_streamer(route, reqs, marshal, unmarshal, deadline, &blk) + end end end end - end - end - - # Asserts that the appropriate methods are defined for each added rpc - # spec. Is intended to aid verifying that server classes are correctly - # implemented. - def assert_rpc_descs_have_methods - rpc_descs.each_pair do |m,spec| - mth_name = m.to_s.underscore.to_sym - if !self.instance_methods.include?(mth_name) - raise "#{self} does not provide instance method '#{mth_name}'" + # Asserts that the appropriate methods are defined for each added rpc + # spec. Is intended to aid verifying that server classes are correctly + # implemented. + def assert_rpc_descs_have_methods + rpc_descs.each_pair do |m, spec| + mth_name = m.to_s.underscore.to_sym + unless instance_methods.include?(mth_name) + fail "#{self} does not provide instance method '#{mth_name}'" + end + spec.assert_arity_matches(instance_method(mth_name)) end - spec.assert_arity_matches(self.instance_method(mth_name)) end end - end - - def self.included(o) - o.extend(Dsl) - - # Update to the use the service name including module. Proivde a default - # that can be nil e,g. when modules are declared dynamically. - return unless o.service_name.nil? - if o.name.nil? - o.service_name = 'GenericService' - else - modules = o.name.split('::') - if modules.length > 2 - o.service_name = modules[modules.length - 2] + def self.included(o) + o.extend(Dsl) + # Update to the use the service name including module. Proivde a default + # that can be nil e,g. when modules are declared dynamically. + return unless o.service_name.nil? + if o.name.nil? + o.service_name = 'GenericService' else - o.service_name = modules.first + modules = o.name.split('::') + if modules.length > 2 + o.service_name = modules[modules.length - 2] + else + o.service_name = modules.first + end end end end - end - end diff --git a/src/ruby/lib/grpc/version.rb b/src/ruby/lib/grpc/version.rb index 0a84f4c3a75cb3f87191b09f7d440f3bdfd27061..dd526e583a6e3611c075dc6ee77051fb68583428 100644 --- a/src/ruby/lib/grpc/version.rb +++ b/src/ruby/lib/grpc/version.rb @@ -28,6 +28,7 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. module Google + # Google::RPC contains the General RPC module. module RPC VERSION = '0.0.1' end diff --git a/src/ruby/spec/alloc_spec.rb b/src/ruby/spec/alloc_spec.rb index 305405e9bd17bc65437c140542df6f68190fbb3f..6dd59ab9fcebf310822dc2e790428ad26ebad4c8 100644 --- a/src/ruby/spec/alloc_spec.rb +++ b/src/ruby/spec/alloc_spec.rb @@ -30,7 +30,6 @@ require 'grpc' describe 'Wrapped classes where .new cannot create an instance' do - describe GRPC::Core::Event do it 'should fail .new fail with a runtime error' do expect { GRPC::Core::Event.new }.to raise_error(TypeError) @@ -42,5 +41,4 @@ describe 'Wrapped classes where .new cannot create an instance' do expect { GRPC::Core::Event.new }.to raise_error(TypeError) end end - end diff --git a/src/ruby/spec/byte_buffer_spec.rb b/src/ruby/spec/byte_buffer_spec.rb index b89d7f36403960f36e6437668241f178873e965d..3a65f45c7ed2c9ab76ab417d04ed315f856b9bbd 100644 --- a/src/ruby/spec/byte_buffer_spec.rb +++ b/src/ruby/spec/byte_buffer_spec.rb @@ -30,9 +30,7 @@ require 'grpc' describe GRPC::Core::ByteBuffer do - describe '#new' do - it 'is constructed from a string' do expect { GRPC::Core::ByteBuffer.new('#new') }.not_to raise_error end @@ -50,7 +48,6 @@ describe GRPC::Core::ByteBuffer do expect { GRPC::Core::ByteBuffer.new(x) }.to raise_error TypeError end end - end describe '#to_s' do @@ -67,5 +64,4 @@ describe GRPC::Core::ByteBuffer do expect(a_copy.dup.to_s).to eq('#dup') end end - end diff --git a/src/ruby/spec/call_spec.rb b/src/ruby/spec/call_spec.rb index 8e8e3d3ae2f48889c98064002727e61158a930cc..b8ecd64f393cb9af31b6d25b1ec7e6a7896b7f6b 100644 --- a/src/ruby/spec/call_spec.rb +++ b/src/ruby/spec/call_spec.rb @@ -33,30 +33,29 @@ require 'port_picker' include GRPC::Core::StatusCodes describe GRPC::Core::RpcErrors do - before(:each) do @known_types = { - :OK => 0, - :ERROR => 1, - :NOT_ON_SERVER => 2, - :NOT_ON_CLIENT => 3, - :ALREADY_ACCEPTED => 4, - :ALREADY_INVOKED => 5, - :NOT_INVOKED => 6, - :ALREADY_FINISHED => 7, - :TOO_MANY_OPERATIONS => 8, - :INVALID_FLAGS => 9, - :ErrorMessages => { - 0=>'ok', - 1=>'unknown error', - 2=>'not available on a server', - 3=>'not available on a client', - 4=>'call is already accepted', - 5=>'call is already invoked', - 6=>'call is not yet invoked', - 7=>'call is already finished', - 8=>'outstanding read or write present', - 9=>'a bad flag was given', + OK: 0, + ERROR: 1, + NOT_ON_SERVER: 2, + NOT_ON_CLIENT: 3, + ALREADY_ACCEPTED: 4, + ALREADY_INVOKED: 5, + NOT_INVOKED: 6, + ALREADY_FINISHED: 7, + TOO_MANY_OPERATIONS: 8, + INVALID_FLAGS: 9, + ErrorMessages: { + 0 => 'ok', + 1 => 'unknown error', + 2 => 'not available on a server', + 3 => 'not available on a client', + 4 => 'call is already accepted', + 5 => 'call is already invoked', + 6 => 'call is not yet invoked', + 7 => 'call is already finished', + 8 => 'outstanding read or write present', + 9 => 'a bad flag was given' } } end @@ -66,11 +65,9 @@ describe GRPC::Core::RpcErrors do syms_and_codes = m.constants.collect { |c| [c, m.const_get(c)] } expect(Hash[syms_and_codes]).to eq(@known_types) end - end describe GRPC::Core::Call do - before(:each) do @tag = Object.new @client_queue = GRPC::Core::CompletionQueue.new @@ -88,7 +85,7 @@ describe GRPC::Core::Call do describe '#start_read' do it 'should fail if called immediately' do - blk = Proc.new { make_test_call.start_read(@tag) } + blk = proc { make_test_call.start_read(@tag) } expect(&blk).to raise_error GRPC::Core::CallError end end @@ -96,21 +93,21 @@ describe GRPC::Core::Call do describe '#start_write' do it 'should fail if called immediately' do bytes = GRPC::Core::ByteBuffer.new('test string') - blk = Proc.new { make_test_call.start_write(bytes, @tag) } + blk = proc { make_test_call.start_write(bytes, @tag) } expect(&blk).to raise_error GRPC::Core::CallError end end describe '#start_write_status' do it 'should fail if called immediately' do - blk = Proc.new { make_test_call.start_write_status(153, 'x', @tag) } + blk = proc { make_test_call.start_write_status(153, 'x', @tag) } expect(&blk).to raise_error GRPC::Core::CallError end end describe '#writes_done' do it 'should fail if called immediately' do - blk = Proc.new { make_test_call.writes_done(Object.new) } + blk = proc { make_test_call.writes_done(Object.new) } expect(&blk).to raise_error GRPC::Core::CallError end end @@ -119,7 +116,8 @@ describe GRPC::Core::Call do it 'adds metadata to a call without fail' do call = make_test_call n = 37 - metadata = Hash[n.times.collect { |i| ["key%d" % i, "value%d" %i] } ] + one_md = proc { |x| [sprintf('key%d', x), sprintf('value%d', x)] } + metadata = Hash[n.times.collect { |i| one_md.call i }] expect { call.add_metadata(metadata) }.to_not raise_error end end @@ -174,7 +172,7 @@ describe GRPC::Core::Call do describe '#metadata' do it 'can save the metadata hash and read it back' do call = make_test_call - md = {'k1' => 'v1', 'k2' => 'v2'} + md = { 'k1' => 'v1', 'k2' => 'v2' } expect { call.metadata = md }.not_to raise_error expect(call.metadata).to be(md) end @@ -191,7 +189,6 @@ describe GRPC::Core::Call do end end - def make_test_call @ch.create_call('dummy_method', 'dummy_host', deadline) end @@ -199,5 +196,4 @@ describe GRPC::Core::Call do def deadline Time.now + 2 # in 2 seconds; arbitrary end - end diff --git a/src/ruby/spec/channel_spec.rb b/src/ruby/spec/channel_spec.rb index d2686127bb6a5ce3d21802ea77a0f10d0b4e13cc..820dbd39e98a9a0904b3b80589af6a062effdc58 100644 --- a/src/ruby/spec/channel_spec.rb +++ b/src/ruby/spec/channel_spec.rb @@ -37,8 +37,6 @@ def load_test_certs end describe GRPC::Core::Channel do - - def create_test_cert GRPC::Core::Credentials.new(load_test_certs[0]) end @@ -48,7 +46,6 @@ describe GRPC::Core::Channel do end shared_examples '#new' do - it 'take a host name without channel args' do expect { GRPC::Core::Channel.new('dummy_host', nil) }.not_to raise_error end @@ -61,14 +58,14 @@ describe GRPC::Core::Channel do end it 'does not take a hash with bad values as channel args' do - blk = construct_with_args(:symbol => Object.new) + blk = construct_with_args(symbol: Object.new) expect(&blk).to raise_error TypeError blk = construct_with_args('1' => Hash.new) expect(&blk).to raise_error TypeError end it 'can take a hash with a symbol key as channel args' do - blk = construct_with_args(:a_symbol => 1) + blk = construct_with_args(a_symbol: 1) expect(&blk).to_not raise_error end @@ -78,32 +75,30 @@ describe GRPC::Core::Channel do end it 'can take a hash with a string value as channel args' do - blk = construct_with_args(:a_symbol => '1') + blk = construct_with_args(a_symbol: '1') expect(&blk).to_not raise_error end it 'can take a hash with a symbol value as channel args' do - blk = construct_with_args(:a_symbol => :another_symbol) + blk = construct_with_args(a_symbol: :another_symbol) expect(&blk).to_not raise_error end it 'can take a hash with a numeric value as channel args' do - blk = construct_with_args(:a_symbol => 1) + blk = construct_with_args(a_symbol: 1) expect(&blk).to_not raise_error end it 'can take a hash with many args as channel args' do - args = Hash[127.times.collect { |x| [x.to_s, x] } ] + args = Hash[127.times.collect { |x| [x.to_s, x] }] blk = construct_with_args(args) expect(&blk).to_not raise_error end - end describe '#new for secure channels' do - def construct_with_args(a) - Proc.new { GRPC::Core::Channel.new('dummy_host', a, create_test_cert) } + proc { GRPC::Core::Channel.new('dummy_host', a, create_test_cert) } end it_behaves_like '#new' @@ -113,7 +108,7 @@ describe GRPC::Core::Channel do it_behaves_like '#new' def construct_with_args(a) - Proc.new { GRPC::Core::Channel.new('dummy_host', a) } + proc { GRPC::Core::Channel.new('dummy_host', a) } end end @@ -125,7 +120,7 @@ describe GRPC::Core::Channel do deadline = Time.now + 5 - blk = Proc.new do + blk = proc do ch.create_call('dummy_method', 'dummy_host', deadline) end expect(&blk).to_not raise_error @@ -138,12 +133,11 @@ describe GRPC::Core::Channel do ch.close deadline = Time.now + 5 - blk = Proc.new do + blk = proc do ch.create_call('dummy_method', 'dummy_host', deadline) end expect(&blk).to raise_error(RuntimeError) end - end describe '#destroy' do @@ -151,7 +145,7 @@ describe GRPC::Core::Channel do port = find_unused_tcp_port host = "localhost:#{port}" ch = GRPC::Core::Channel.new(host, nil) - blk = Proc.new { ch.destroy } + blk = proc { ch.destroy } expect(&blk).to_not raise_error end @@ -159,18 +153,16 @@ describe GRPC::Core::Channel do port = find_unused_tcp_port host = "localhost:#{port}" ch = GRPC::Core::Channel.new(host, nil) - blk = Proc.new { ch.destroy } + blk = proc { ch.destroy } blk.call expect(&blk).to_not raise_error end end describe '::SSL_TARGET' do - it 'is a symbol' do expect(GRPC::Core::Channel::SSL_TARGET).to be_a(Symbol) end - end describe '#close' do @@ -178,7 +170,7 @@ describe GRPC::Core::Channel do port = find_unused_tcp_port host = "localhost:#{port}" ch = GRPC::Core::Channel.new(host, nil) - blk = Proc.new { ch.close } + blk = proc { ch.close } expect(&blk).to_not raise_error end @@ -186,10 +178,9 @@ describe GRPC::Core::Channel do port = find_unused_tcp_port host = "localhost:#{port}" ch = GRPC::Core::Channel.new(host, nil) - blk = Proc.new { ch.close } + blk = proc { ch.close } blk.call expect(&blk).to_not raise_error end end - end diff --git a/src/ruby/spec/client_server_spec.rb b/src/ruby/spec/client_server_spec.rb index 5e68f524d66637b42fa8c413cc08e1714f0bebc9..1bcbc66446c78e649623bde74a5b3999919c43bc 100644 --- a/src/ruby/spec/client_server_spec.rb +++ b/src/ruby/spec/client_server_spec.rb @@ -41,7 +41,6 @@ def load_test_certs end shared_context 'setup: tags' do - before(:example) do @server_finished_tag = Object.new @client_finished_tag = Object.new @@ -71,7 +70,7 @@ shared_context 'setup: tags' do expect(ev).not_to be_nil expect(ev.type).to be(SERVER_RPC_NEW) ev.call.server_accept(@server_queue, @server_finished_tag) - ev.call.server_end_initial_metadata() + ev.call.server_end_initial_metadata ev.call.start_read(@server_tag) ev = @server_queue.pluck(@server_tag, TimeConsts::INFINITE_FUTURE) expect(ev.type).to be(READ) @@ -79,10 +78,10 @@ shared_context 'setup: tags' do ev = @server_queue.pluck(@server_tag, TimeConsts::INFINITE_FUTURE) expect(ev).not_to be_nil expect(ev.type).to be(WRITE_ACCEPTED) - return ev.call + ev.call end - def client_sends(call, sent='a message') + def client_sends(call, sent = 'a message') req = ByteBuffer.new(sent) call.start_invoke(@client_queue, @tag, @tag, @client_finished_tag) ev = @client_queue.pluck(@tag, TimeConsts::INFINITE_FUTURE) @@ -92,17 +91,15 @@ shared_context 'setup: tags' do ev = @client_queue.pluck(@tag, TimeConsts::INFINITE_FUTURE) expect(ev).not_to be_nil expect(ev.type).to be(WRITE_ACCEPTED) - return sent + sent end def new_client_call @ch.create_call('/method', 'localhost', deadline) end - end shared_examples 'basic GRPC message delivery is OK' do - include_context 'setup: tags' it 'servers receive requests from clients and start responding' do @@ -126,7 +123,7 @@ shared_examples 'basic GRPC message delivery is OK' do # the server response server_call.start_write(reply, @server_tag) - ev = expect_next_event_on(@server_queue, WRITE_ACCEPTED, @server_tag) + expect_next_event_on(@server_queue, WRITE_ACCEPTED, @server_tag) end it 'responses written by servers are received by the client' do @@ -135,15 +132,14 @@ shared_examples 'basic GRPC message delivery is OK' do server_receives_and_responds_with('server_response') call.start_read(@tag) - ev = expect_next_event_on(@client_queue, CLIENT_METADATA_READ, @tag) + expect_next_event_on(@client_queue, CLIENT_METADATA_READ, @tag) ev = expect_next_event_on(@client_queue, READ, @tag) expect(ev.result.to_s).to eq('server_response') end it 'servers can ignore a client write and send a status' do - reply = ByteBuffer.new('the server payload') call = new_client_call - msg = client_sends(call) + client_sends(call) # check the server rpc new was received @server.request_call(@server_tag) @@ -153,20 +149,20 @@ shared_examples 'basic GRPC message delivery is OK' do # accept the call - need to do this to sent status. server_call = ev.call server_call.server_accept(@server_queue, @server_finished_tag) - server_call.server_end_initial_metadata() + server_call.server_end_initial_metadata server_call.start_write_status(StatusCodes::NOT_FOUND, 'not found', @server_tag) # client gets an empty response for the read, preceeded by some metadata. call.start_read(@tag) - ev = expect_next_event_on(@client_queue, CLIENT_METADATA_READ, @tag) + expect_next_event_on(@client_queue, CLIENT_METADATA_READ, @tag) ev = expect_next_event_on(@client_queue, READ, @tag) expect(ev.tag).to be(@tag) expect(ev.result.to_s).to eq('') # finally, after client sends writes_done, they get the finished. call.writes_done(@tag) - ev = expect_next_event_on(@client_queue, FINISH_ACCEPTED, @tag) + expect_next_event_on(@client_queue, FINISH_ACCEPTED, @tag) ev = expect_next_event_on(@client_queue, FINISHED, @client_finished_tag) expect(ev.result.code).to eq(StatusCodes::NOT_FOUND) end @@ -175,12 +171,12 @@ shared_examples 'basic GRPC message delivery is OK' do call = new_client_call client_sends(call) server_call = server_receives_and_responds_with('server_response') - server_call.start_write_status(10101, 'status code is 10101', @server_tag) + server_call.start_write_status(10_101, 'status code is 10101', @server_tag) # first the client says writes are done call.start_read(@tag) - ev = expect_next_event_on(@client_queue, CLIENT_METADATA_READ, @tag) - ev = expect_next_event_on(@client_queue, READ, @tag) + expect_next_event_on(@client_queue, CLIENT_METADATA_READ, @tag) + expect_next_event_on(@client_queue, READ, @tag) call.writes_done(@tag) # but nothing happens until the server sends a status @@ -192,24 +188,23 @@ shared_examples 'basic GRPC message delivery is OK' do expect_next_event_on(@client_queue, FINISH_ACCEPTED, @tag) ev = expect_next_event_on(@client_queue, FINISHED, @client_finished_tag) expect(ev.result.details).to eq('status code is 10101') - expect(ev.result.code).to eq(10101) + expect(ev.result.code).to eq(10_101) end - end - shared_examples 'GRPC metadata delivery works OK' do - include_context 'setup: tags' describe 'from client => server' do - before(:example) do n = 7 # arbitrary number of metadata - diff_keys = Hash[n.times.collect { |i| ['k%d' % i, 'v%d' % i] }] - null_vals = Hash[n.times.collect { |i| ['k%d' % i, 'v\0%d' % i] }] - same_keys = Hash[n.times.collect { |i| ['k%d' % i, ['v%d' % i] * n] }] - symbol_key = {:a_key => 'a val'} + diff_keys_fn = proc { |i| [sprintf('k%d', i), sprintf('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 = 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 = 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] @bad_keys = [] @bad_keys << { Object.new => 'a value' } @@ -239,28 +234,29 @@ shared_examples 'GRPC metadata delivery works OK' do # Client begins a call OK call.start_invoke(@client_queue, @tag, @tag, @client_finished_tag) - ev = expect_next_event_on(@client_queue, INVOKE_ACCEPTED, @tag) + expect_next_event_on(@client_queue, INVOKE_ACCEPTED, @tag) # ... server has all metadata available even though the client did not # send a write @server.request_call(@server_tag) ev = expect_next_event_on(@server_queue, SERVER_RPC_NEW, @server_tag) - replace_symbols = Hash[md.each_pair.collect { |x,y| [x.to_s, y] }] + replace_symbols = Hash[md.each_pair.collect { |x, y| [x.to_s, y] }] result = ev.result.metadata expect(result.merge(replace_symbols)).to eq(result) end end - end describe 'from server => client' do - before(:example) do n = 7 # arbitrary number of metadata - diff_keys = Hash[n.times.collect { |i| ['k%d' % i, 'v%d' % i] }] - null_vals = Hash[n.times.collect { |i| ['k%d' % i, 'v\0%d' % i] }] - same_keys = Hash[n.times.collect { |i| ['k%d' % i, ['v%d' % i] * n] }] - symbol_key = {:a_key => 'a val'} + diff_keys_fn = proc { |i| [sprintf('k%d', i), sprintf('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 = 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 = 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] @bad_keys = [] @bad_keys << { Object.new => 'a value' } @@ -290,7 +286,7 @@ shared_examples 'GRPC metadata delivery works OK' do # ... server accepts the call without adding metadata server_call.server_accept(@server_queue, @server_finished_tag) - server_call.server_end_initial_metadata() + server_call.server_end_initial_metadata # ... these server sends some data, allowing the metadata read server_call.start_write(ByteBuffer.new('reply with metadata'), @@ -300,7 +296,7 @@ shared_examples 'GRPC metadata delivery works OK' do # there is the HTTP status metadata, though there should not be any # TODO(temiola): update this with the bug number to be resolved ev = expect_next_event_on(@client_queue, CLIENT_METADATA_READ, @tag) - expect(ev.result).to eq({':status' => '200'}) + expect(ev.result).to eq(':status' => '200') end it 'sends all the pairs and status:200 when keys and values are valid' do @@ -316,24 +312,19 @@ shared_examples 'GRPC metadata delivery works OK' do # ... server adds metadata and accepts the call server_call.add_metadata(md) server_call.server_accept(@server_queue, @server_finished_tag) - server_call.server_end_initial_metadata() + server_call.server_end_initial_metadata # Now the client can read the metadata ev = expect_next_event_on(@client_queue, CLIENT_METADATA_READ, @tag) - replace_symbols = Hash[md.each_pair.collect { |x,y| [x.to_s, y] }] + replace_symbols = Hash[md.each_pair.collect { |x, y| [x.to_s, y] }] replace_symbols[':status'] = '200' expect(ev.result).to eq(replace_symbols) end - end - end - end - describe 'the http client/server' do - before(:example) do port = find_unused_tcp_port host = "localhost:#{port}" @@ -354,11 +345,9 @@ describe 'the http client/server' do it_behaves_like 'GRPC metadata delivery works OK' do end - end describe 'the secure http client/server' do - before(:example) do certs = load_test_certs port = find_unused_tcp_port @@ -369,7 +358,7 @@ describe 'the secure http client/server' do @server = GRPC::Core::Server.new(@server_queue, nil, server_creds) @server.add_http2_port(host, true) @server.start - args = {Channel::SSL_TARGET => 'foo.test.google.com'} + args = { Channel::SSL_TARGET => 'foo.test.google.com' } @ch = Channel.new(host, args, GRPC::Core::Credentials.new(certs[0], nil, nil)) end @@ -383,5 +372,4 @@ describe 'the secure http client/server' do it_behaves_like 'GRPC metadata delivery works OK' do end - end diff --git a/src/ruby/spec/completion_queue_spec.rb b/src/ruby/spec/completion_queue_spec.rb index 50f74b58263c6bbc5cbc3bae225f9f4c45a5021e..022a066e8e7a97a32931a7b265d0dbf76c6d9604 100644 --- a/src/ruby/spec/completion_queue_spec.rb +++ b/src/ruby/spec/completion_queue_spec.rb @@ -30,7 +30,6 @@ require 'grpc' describe GRPC::Core::CompletionQueue do - describe '#new' do it 'is constructed successufully' do expect { GRPC::Core::CompletionQueue.new }.not_to raise_error @@ -53,7 +52,6 @@ describe GRPC::Core::CompletionQueue do expect { ch.next(a_time) }.not_to raise_error end end - end describe '#pluck' do @@ -74,8 +72,5 @@ describe GRPC::Core::CompletionQueue do expect { ch.pluck(tag, a_time) }.not_to raise_error end end - end - - end diff --git a/src/ruby/spec/credentials_spec.rb b/src/ruby/spec/credentials_spec.rb index 4d932db937d2fd58a664abe3227e8893be288292..47b42aed29b7610efd2b2c05c78b634c6e3d30a4 100644 --- a/src/ruby/spec/credentials_spec.rb +++ b/src/ruby/spec/credentials_spec.rb @@ -29,7 +29,6 @@ require 'grpc' - def load_test_certs test_root = File.join(File.dirname(__FILE__), 'testdata') files = ['ca.pem', 'server1.pem', 'server1.key'] @@ -39,9 +38,7 @@ end Credentials = GRPC::Core::Credentials describe Credentials do - describe '#new' do - it 'can be constructed with fake inputs' do expect { Credentials.new('root_certs', 'key', 'cert') }.not_to raise_error end @@ -58,30 +55,23 @@ describe Credentials do it 'cannot be constructed with a nil server roots' do _, client_key, client_chain = load_test_certs - blk = Proc.new { Credentials.new(nil, client_key, client_chain) } + blk = proc { Credentials.new(nil, client_key, client_chain) } expect(&blk).to raise_error end - end describe '#compose' do - it 'can be completed OK' do certs = load_test_certs cred1 = Credentials.new(*certs) cred2 = Credentials.new(*certs) expect { cred1.compose(cred2) }.to_not raise_error end - end describe 'Credentials#default' do - it 'is not implemented yet' do - expect { Credentials.default() }.to raise_error RuntimeError + expect { Credentials.default }.to raise_error RuntimeError end - end - - end diff --git a/src/ruby/spec/event_spec.rb b/src/ruby/spec/event_spec.rb index a61b926dea5edd7bb6a76fc67ab9f839fcff87c9..5dec07e1edf1d583b92c9b30cda2a7f037c1303b 100644 --- a/src/ruby/spec/event_spec.rb +++ b/src/ruby/spec/event_spec.rb @@ -30,25 +30,23 @@ require 'grpc' describe GRPC::Core::CompletionType do - before(:each) do @known_types = { - :QUEUE_SHUTDOWN => 0, - :READ => 1, - :INVOKE_ACCEPTED => 2, - :WRITE_ACCEPTED => 3, - :FINISH_ACCEPTED => 4, - :CLIENT_METADATA_READ => 5, - :FINISHED => 6, - :SERVER_RPC_NEW => 7, - :RESERVED => 8 + QUEUE_SHUTDOWN: 0, + READ: 1, + INVOKE_ACCEPTED: 2, + WRITE_ACCEPTED: 3, + FINISH_ACCEPTED: 4, + CLIENT_METADATA_READ: 5, + FINISHED: 6, + SERVER_RPC_NEW: 7, + RESERVED: 8 } end it 'should have all the known types' do mod = GRPC::Core::CompletionType - blk = Proc.new { Hash[mod.constants.collect { |c| [c, mod.const_get(c)] }] } + blk = proc { Hash[mod.constants.collect { |c| [c, mod.const_get(c)] }] } expect(blk.call).to eq(@known_types) end - end diff --git a/src/ruby/spec/generic/active_call_spec.rb b/src/ruby/spec/generic/active_call_spec.rb index bb73eef47c21cd1521f0d922103b5a0f9e09c52e..898022f1859930b403f739f52612851b13a4ce8e 100644 --- a/src/ruby/spec/generic/active_call_spec.rb +++ b/src/ruby/spec/generic/active_call_spec.rb @@ -38,9 +38,9 @@ describe GRPC::ActiveCall do CompletionType = GRPC::Core::CompletionType before(:each) do - @pass_through = Proc.new { |x| x } + @pass_through = proc { |x| x } @server_tag = Object.new - @server_done_tag, meta_tag = Object.new + @server_done_tag = Object.new @tag = Object.new @client_queue = GRPC::Core::CompletionQueue.new @@ -70,7 +70,7 @@ describe GRPC::ActiveCall do describe '#multi_req_view' do it 'exposes a fixed subset of the ActiveCall methods' do - want = ['cancelled', 'deadline', 'each_remote_read', 'shutdown'] + want = %w(cancelled, deadline, each_remote_read, shutdown) v = @client_call.multi_req_view want.each do |w| expect(v.methods.include?(w)) @@ -80,7 +80,7 @@ describe GRPC::ActiveCall do describe '#single_req_view' do it 'exposes a fixed subset of the ActiveCall methods' do - want = ['cancelled', 'deadline', 'shutdown'] + want = %w(cancelled, deadline, shutdown) v = @client_call.single_req_view want.each do |w| expect(v.methods.include?(w)) @@ -110,7 +110,7 @@ describe GRPC::ActiveCall do # Accept the call, and verify that the server reads the response ok. ev.call.server_accept(@client_queue, @server_tag) - ev.call.server_end_initial_metadata() + ev.call.server_end_initial_metadata server_call = ActiveCall.new(ev.call, @client_queue, @pass_through, @pass_through, deadline) expect(server_call.remote_read).to eq(msg) @@ -120,7 +120,7 @@ describe GRPC::ActiveCall do call = make_test_call done_tag, meta_tag = ActiveCall.client_start_invoke(call, @client_queue, deadline) - marshal = Proc.new { |x| 'marshalled:' + x } + marshal = proc { |x| 'marshalled:' + x } client_call = ActiveCall.new(call, @client_queue, marshal, @pass_through, deadline, finished_tag: done_tag, @@ -132,33 +132,29 @@ describe GRPC::ActiveCall do @server.request_call(@server_tag) ev = @server_queue.next(deadline) ev.call.server_accept(@client_queue, @server_tag) - ev.call.server_end_initial_metadata() + ev.call.server_end_initial_metadata server_call = ActiveCall.new(ev.call, @client_queue, @pass_through, @pass_through, deadline) expect(server_call.remote_read).to eq('marshalled:' + msg) end - end describe '#client_start_invoke' do - it 'sends keywords as metadata to the server when the are present' do - call, pass_through = make_test_call, Proc.new { |x| x } - done_tag, meta_tag = ActiveCall.client_start_invoke(call, @client_queue, - deadline, k1: 'v1', - k2: 'v2') + call = make_test_call + ActiveCall.client_start_invoke(call, @client_queue, deadline, + k1: 'v1', k2: 'v2') @server.request_call(@server_tag) ev = @server_queue.next(deadline) expect(ev).to_not be_nil expect(ev.result.metadata['k1']).to eq('v1') expect(ev.result.metadata['k2']).to eq('v2') end - end describe '#remote_read' do it 'reads the response sent by a server' do - call, pass_through = make_test_call, Proc.new { |x| x } + call = make_test_call done_tag, meta_tag = ActiveCall.client_start_invoke(call, @client_queue, deadline) client_call = ActiveCall.new(call, @client_queue, @pass_through, @@ -173,7 +169,7 @@ describe GRPC::ActiveCall do end it 'saves metadata { status=200 } when the server adds no metadata' do - call, pass_through = make_test_call, Proc.new { |x| x } + call = make_test_call done_tag, meta_tag = ActiveCall.client_start_invoke(call, @client_queue, deadline) client_call = ActiveCall.new(call, @client_queue, @pass_through, @@ -186,11 +182,11 @@ describe GRPC::ActiveCall do server_call.remote_send('ignore me') expect(client_call.metadata).to be_nil client_call.remote_read - expect(client_call.metadata).to eq({':status' => '200'}) + expect(client_call.metadata).to eq(':status' => '200') end it 'saves metadata add by the server' do - call, pass_through = make_test_call, Proc.new { |x| x } + call = make_test_call done_tag, meta_tag = ActiveCall.client_start_invoke(call, @client_queue, deadline) client_call = ActiveCall.new(call, @client_queue, @pass_through, @@ -203,13 +199,12 @@ describe GRPC::ActiveCall do server_call.remote_send('ignore me') expect(client_call.metadata).to be_nil client_call.remote_read - expect(client_call.metadata).to eq({':status' => '200', 'k1' => 'v1', - 'k2' => 'v2'}) + expected = { ':status' => '200', 'k1' => 'v1', 'k2' => 'v2' } + expect(client_call.metadata).to eq(expected) end - it 'get a nil msg before a status when an OK status is sent' do - call, pass_through = make_test_call, Proc.new { |x| x } + call = make_test_call done_tag, meta_tag = ActiveCall.client_start_invoke(call, @client_queue, deadline) client_call = ActiveCall.new(call, @client_queue, @pass_through, @@ -227,12 +222,11 @@ describe GRPC::ActiveCall do expect(res).to be_nil end - it 'unmarshals the response using the unmarshal func' do call = make_test_call done_tag, meta_tag = ActiveCall.client_start_invoke(call, @client_queue, deadline) - unmarshal = Proc.new { |x| 'unmarshalled:' + x } + unmarshal = proc { |x| 'unmarshalled:' + x } client_call = ActiveCall.new(call, @client_queue, @pass_through, unmarshal, deadline, finished_tag: done_tag, @@ -245,7 +239,6 @@ describe GRPC::ActiveCall do server_call.remote_send('server_response') expect(client_call.remote_read).to eq('unmarshalled:server_response') end - end describe '#each_remote_read' do @@ -298,7 +291,6 @@ describe GRPC::ActiveCall do server_call.send_status(OK, 'OK') expect { e.next }.to raise_error(StopIteration) end - end describe '#writes_done' do @@ -357,7 +349,6 @@ describe GRPC::ActiveCall do expect { client_call.writes_done(true) }.to_not raise_error expect { server_call.finished }.to_not raise_error end - end def expect_server_to_receive(sent_text, **kw) @@ -371,7 +362,7 @@ describe GRPC::ActiveCall do ev = @server_queue.next(deadline) ev.call.add_metadata(kw) ev.call.server_accept(@client_queue, @server_done_tag) - ev.call.server_end_initial_metadata() + ev.call.server_end_initial_metadata ActiveCall.new(ev.call, @client_queue, @pass_through, @pass_through, deadline, finished_tag: @server_done_tag) @@ -384,5 +375,4 @@ describe GRPC::ActiveCall do def deadline Time.now + 0.25 # in 0.25 seconds; arbitrary end - end diff --git a/src/ruby/spec/generic/client_stub_spec.rb b/src/ruby/spec/generic/client_stub_spec.rb index 2db8718d1a5ecebbf901214086e774c73d139f16..8ebe48bc4c5722ecdbed5065f25d5b2e94b53215 100644 --- a/src/ruby/spec/generic/client_stub_spec.rb +++ b/src/ruby/spec/generic/client_stub_spec.rb @@ -31,7 +31,7 @@ require 'grpc' require 'xray/thread_dump_signal_handler' require_relative '../port_picker' -NOOP = Proc.new { |x| x } +NOOP = proc { |x| x } def wakey_thread(&blk) awake_mutex, awake_cond = Mutex.new, ConditionVariable.new @@ -52,7 +52,6 @@ include GRPC::Core::StatusCodes include GRPC::Core::TimeConsts describe 'ClientStub' do - before(:each) do Thread.abort_on_exception = true @server = nil @@ -67,11 +66,10 @@ describe 'ClientStub' do end describe '#new' do - it 'can be created from a host and args' do host = new_test_host - opts = {:a_channel_arg => 'an_arg'} - blk = Proc.new do + opts = { a_channel_arg: 'an_arg' } + blk = proc do GRPC::ClientStub.new(host, @cq, **opts) end expect(&blk).not_to raise_error @@ -79,8 +77,8 @@ describe 'ClientStub' do it 'can be created with a default deadline' do host = new_test_host - opts = {:a_channel_arg => 'an_arg', :deadline => 5} - blk = Proc.new do + opts = { a_channel_arg: 'an_arg', deadline: 5 } + blk = proc do GRPC::ClientStub.new(host, @cq, **opts) end expect(&blk).not_to raise_error @@ -88,8 +86,8 @@ describe 'ClientStub' do it 'can be created with an channel override' do host = new_test_host - opts = {:a_channel_arg => 'an_arg', :channel_override => @ch} - blk = Proc.new do + opts = { a_channel_arg: 'an_arg', channel_override: @ch } + blk = proc do GRPC::ClientStub.new(host, @cq, **opts) end expect(&blk).not_to raise_error @@ -97,8 +95,8 @@ describe 'ClientStub' do it 'cannot be created with a bad channel override' do host = new_test_host - blk = Proc.new do - opts = {:a_channel_arg => 'an_arg', :channel_override => Object.new} + blk = proc do + opts = { a_channel_arg: 'an_arg', channel_override: Object.new } GRPC::ClientStub.new(host, @cq, **opts) end expect(&blk).to raise_error @@ -106,8 +104,8 @@ describe 'ClientStub' do it 'cannot be created with bad credentials' do host = new_test_host - blk = Proc.new do - opts = {:a_channel_arg => 'an_arg', :creds => Object.new} + blk = proc do + opts = { a_channel_arg: 'an_arg', creds: Object.new } GRPC::ClientStub.new(host, @cq, **opts) end expect(&blk).to raise_error @@ -116,17 +114,16 @@ describe 'ClientStub' do it 'can be created with test test credentials' do certs = load_test_certs host = new_test_host - blk = Proc.new do + blk = proc do opts = { GRPC::Core::Channel::SSL_TARGET => 'foo.test.google.com', - :a_channel_arg => 'an_arg', - :creds => GRPC::Core::Credentials.new(certs[0], nil, nil) + a_channel_arg: 'an_arg', + creds: GRPC::Core::Credentials.new(certs[0], nil, nil) } GRPC::ClientStub.new(host, @cq, **opts) end expect(&blk).to_not raise_error end - end describe '#request_response' do @@ -135,7 +132,6 @@ describe 'ClientStub' do end shared_examples 'request response' do - it 'should send a request to/receive a reply from a server' do host = new_test_host th = run_request_response(host, @sent_msg, @resp, @pass) @@ -146,8 +142,8 @@ describe 'ClientStub' do it 'should send metadata to the server ok' do host = new_test_host - th = run_request_response(host, @sent_msg, @resp, @pass, k1: 'v1', - k2: 'v2') + th = run_request_response(host, @sent_msg, @resp, @pass, + k1: 'v1', k2: 'v2') stub = GRPC::ClientStub.new(host, @cq) expect(get_response(stub)).to eq(@resp) th.join @@ -157,7 +153,10 @@ describe 'ClientStub' do host = new_test_host th = run_request_response(host, @sent_msg, @resp, @pass, k1: 'updated-v1', k2: 'v2') - update_md = Proc.new { |md| md[:k1] = 'updated-v1'; md } + update_md = proc do |md| + md[:k1] = 'updated-v1' + md + end stub = GRPC::ClientStub.new(host, @cq, update_metadata: update_md) expect(get_response(stub)).to eq(@resp) th.join @@ -167,7 +166,7 @@ describe 'ClientStub' do alt_host = new_test_host th = run_request_response(alt_host, @sent_msg, @resp, @pass) ch = GRPC::Core::Channel.new(alt_host, nil) - stub = GRPC::ClientStub.new('ignored-host', @cq, channel_override:ch) + stub = GRPC::ClientStub.new('ignored-host', @cq, channel_override: ch) expect(get_response(stub)).to eq(@resp) th.join end @@ -176,45 +175,37 @@ describe 'ClientStub' do host = new_test_host th = run_request_response(host, @sent_msg, @resp, @fail) stub = GRPC::ClientStub.new(host, @cq) - blk = Proc.new { get_response(stub) } + blk = proc { get_response(stub) } expect(&blk).to raise_error(GRPC::BadStatus) th.join end - end describe 'without a call operation' do - def get_response(stub) - stub.request_response(@method, @sent_msg, NOOP, NOOP, k1: 'v1', - k2: 'v2') + stub.request_response(@method, @sent_msg, NOOP, NOOP, + k1: 'v1', k2: 'v2') end it_behaves_like 'request response' - end describe 'via a call operation' do - def get_response(stub) op = stub.request_response(@method, @sent_msg, NOOP, NOOP, - return_op:true, k1: 'v1', k2: 'v2') + return_op: true, k1: 'v1', k2: 'v2') expect(op).to be_a(GRPC::ActiveCall::Operation) - op.execute() + op.execute end it_behaves_like 'request response' - end - end describe '#client_streamer' do - shared_examples 'client streaming' do - before(:each) do - @sent_msgs = Array.new(3) { |i| 'msg_' + (i+1).to_s } + @sent_msgs = Array.new(3) { |i| 'msg_' + (i + 1).to_s } @resp = 'a_reply' end @@ -228,19 +219,21 @@ describe 'ClientStub' do it 'should send metadata to the server ok' do host = new_test_host - th = run_client_streamer(host, @sent_msgs, @resp, @pass, k1: 'v1', - k2: 'v2') + th = run_client_streamer(host, @sent_msgs, @resp, @pass, + k1: 'v1', k2: 'v2') stub = GRPC::ClientStub.new(host, @cq) expect(get_response(stub)).to eq(@resp) th.join end - it 'should update the sent metadata with a provided metadata updater' do host = new_test_host th = run_client_streamer(host, @sent_msgs, @resp, @pass, k1: 'updated-v1', k2: 'v2') - update_md = Proc.new { |md| md[:k1] = 'updated-v1'; md } + update_md = proc do |md| + md[:k1] = 'updated-v1' + md + end stub = GRPC::ClientStub.new(host, @cq, update_metadata: update_md) expect(get_response(stub)).to eq(@resp) th.join @@ -250,46 +243,38 @@ describe 'ClientStub' do host = new_test_host th = run_client_streamer(host, @sent_msgs, @resp, @fail) stub = GRPC::ClientStub.new(host, @cq) - blk = Proc.new { get_response(stub) } + blk = proc { get_response(stub) } expect(&blk).to raise_error(GRPC::BadStatus) th.join end - end describe 'without a call operation' do - def get_response(stub) - stub.client_streamer(@method, @sent_msgs, NOOP, NOOP, k1: 'v1', - k2: 'v2') + stub.client_streamer(@method, @sent_msgs, NOOP, NOOP, + k1: 'v1', k2: 'v2') end it_behaves_like 'client streaming' - end describe 'via a call operation' do - def get_response(stub) op = stub.client_streamer(@method, @sent_msgs, NOOP, NOOP, - return_op:true, k1: 'v1', k2: 'v2') + return_op: true, k1: 'v1', k2: 'v2') expect(op).to be_a(GRPC::ActiveCall::Operation) - resp = op.execute() + op.execute end it_behaves_like 'client streaming' - end - end describe '#server_streamer' do - shared_examples 'server streaming' do - before(:each) do @sent_msg = 'a_msg' - @replys = Array.new(3) { |i| 'reply_' + (i+1).to_s } + @replys = Array.new(3) { |i| 'reply_' + (i + 1).to_s } end it 'should send a request to/receive replies from a server' do @@ -311,8 +296,8 @@ describe 'ClientStub' do it 'should send metadata to the server ok' do host = new_test_host - th = run_server_streamer(host, @sent_msg, @replys, @fail, k1: 'v1', - k2: 'v2') + th = run_server_streamer(host, @sent_msg, @replys, @fail, + k1: 'v1', k2: 'v2') stub = GRPC::ClientStub.new(host, @cq) e = get_responses(stub) expect { e.collect { |r| r } }.to raise_error(GRPC::BadStatus) @@ -323,55 +308,50 @@ describe 'ClientStub' do host = new_test_host th = run_server_streamer(host, @sent_msg, @replys, @pass, k1: 'updated-v1', k2: 'v2') - update_md = Proc.new { |md| md[:k1] = 'updated-v1'; md } + update_md = proc do |md| + md[:k1] = 'updated-v1' + md + end stub = GRPC::ClientStub.new(host, @cq, update_metadata: update_md) e = get_responses(stub) expect(e.collect { |r| r }).to eq(@replys) th.join end - end describe 'without a call operation' do - def get_responses(stub) - e = stub.server_streamer(@method, @sent_msg, NOOP, NOOP, k1: 'v1', - k2: 'v2') + e = stub.server_streamer(@method, @sent_msg, NOOP, NOOP, + k1: 'v1', k2: 'v2') expect(e).to be_a(Enumerator) e end it_behaves_like 'server streaming' - end describe 'via a call operation' do - def get_responses(stub) op = stub.server_streamer(@method, @sent_msg, NOOP, NOOP, - return_op:true, k1: 'v1', k2: 'v2') + return_op: true, k1: 'v1', k2: 'v2') expect(op).to be_a(GRPC::ActiveCall::Operation) - e = op.execute() + e = op.execute expect(e).to be_a(Enumerator) e end it_behaves_like 'server streaming' - end - end describe '#bidi_streamer' do - shared_examples 'bidi streaming' do - before(:each) do - @sent_msgs = Array.new(3) { |i| 'msg_' + (i+1).to_s } - @replys = Array.new(3) { |i| 'reply_' + (i+1).to_s } + @sent_msgs = Array.new(3) { |i| 'msg_' + (i + 1).to_s } + @replys = Array.new(3) { |i| 'reply_' + (i + 1).to_s } end - it 'supports sending all the requests first', :bidi => true do + it 'supports sending all the requests first', bidi: true do host = new_test_host th = run_bidi_streamer_handle_inputs_first(host, @sent_msgs, @replys, @pass) @@ -381,7 +361,7 @@ describe 'ClientStub' do th.join end - it 'supports client-initiated ping pong', :bidi => true do + it 'supports client-initiated ping pong', bidi: true do host = new_test_host th = run_bidi_streamer_echo_ping_pong(host, @sent_msgs, @pass, true) stub = GRPC::ClientStub.new(host, @cq) @@ -396,7 +376,7 @@ describe 'ClientStub' do # servers don't know if all the client metadata has been sent until # they receive a message from the client. Without receiving all the # metadata, the server does not accept the call, so this test hangs. - xit 'supports a server-initiated ping pong', :bidi => true do + xit 'supports a server-initiated ping pong', bidi: true do host = new_test_host th = run_bidi_streamer_echo_ping_pong(host, @sent_msgs, @pass, false) stub = GRPC::ClientStub.new(host, @cq) @@ -404,11 +384,9 @@ describe 'ClientStub' do expect(e.collect { |r| r }).to eq(@sent_msgs) th.join end - end describe 'without a call operation' do - def get_responses(stub) e = stub.bidi_streamer(@method, @sent_msgs, NOOP, NOOP) expect(e).to be_a(Enumerator) @@ -416,13 +394,12 @@ describe 'ClientStub' do end it_behaves_like 'bidi streaming' - end describe 'via a call operation' do - def get_responses(stub) - op = stub.bidi_streamer(@method, @sent_msgs, NOOP, NOOP, return_op:true) + op = stub.bidi_streamer(@method, @sent_msgs, NOOP, NOOP, + return_op: true) expect(op).to be_a(GRPC::ActiveCall::Operation) e = op.execute expect(e).to be_a(Enumerator) @@ -430,9 +407,7 @@ describe 'ClientStub' do end it_behaves_like 'bidi streaming' - end - end def run_server_streamer(hostname, expected_input, replys, status, **kw) @@ -514,14 +489,13 @@ describe 'ClientStub' do def expect_server_to_be_invoked(hostname, awake_mutex, awake_cond) server_queue = start_test_server(hostname, awake_mutex, awake_cond) - test_deadline = Time.now + 10 # fail tests after 10 seconds ev = server_queue.pluck(@server_tag, INFINITE_FUTURE) - raise OutOfTime if ev.nil? + fail OutOfTime if ev.nil? server_call = ev.call server_call.metadata = ev.result.metadata finished_tag = Object.new server_call.server_accept(server_queue, finished_tag) - server_call.server_end_initial_metadata() + server_call.server_end_initial_metadata GRPC::ActiveCall.new(server_call, server_queue, NOOP, NOOP, INFINITE_FUTURE, finished_tag: finished_tag) end @@ -530,5 +504,4 @@ describe 'ClientStub' do port = find_unused_tcp_port "localhost:#{port}" end - end diff --git a/src/ruby/spec/generic/rpc_desc_spec.rb b/src/ruby/spec/generic/rpc_desc_spec.rb index efef7e4686f61d7f1a0ae04577618f3a569026e3..ac0b5c51f401e0363cee889d1614a4957d37cb39 100644 --- a/src/ruby/spec/generic/rpc_desc_spec.rb +++ b/src/ruby/spec/generic/rpc_desc_spec.rb @@ -30,9 +30,7 @@ require 'grpc' require 'grpc/generic/rpc_desc' - describe GRPC::RpcDesc do - RpcDesc = GRPC::RpcDesc Stream = RpcDesc::Stream OK = GRPC::Core::StatusCodes::OK @@ -56,7 +54,6 @@ describe GRPC::RpcDesc do end describe '#run_server_method' do - describe 'for request responses' do before(:each) do @call = double('active_call') @@ -78,7 +75,7 @@ describe GRPC::RpcDesc do it 'absorbs EventError with no further action' do expect(@call).to receive(:remote_read).once.and_raise(EventError) - blk = Proc.new do + blk = proc do @request_response.run_server_method(@call, method(:fake_reqresp)) end expect(&blk).to_not raise_error @@ -86,7 +83,7 @@ describe GRPC::RpcDesc do it 'absorbs CallError with no further action' do expect(@call).to receive(:remote_read).once.and_raise(CallError) - blk = Proc.new do + blk = proc do @request_response.run_server_method(@call, method(:fake_reqresp)) end expect(&blk).to_not raise_error @@ -100,7 +97,6 @@ describe GRPC::RpcDesc do expect(@call).to receive(:finished).once @request_response.run_server_method(@call, method(:fake_reqresp)) end - end describe 'for client streamers' do @@ -122,7 +118,7 @@ describe GRPC::RpcDesc do it 'absorbs EventError with no further action' do expect(@call).to receive(:remote_send).once.and_raise(EventError) - blk = Proc.new do + blk = proc do @client_streamer.run_server_method(@call, method(:fake_clstream)) end expect(&blk).to_not raise_error @@ -130,20 +126,18 @@ describe GRPC::RpcDesc do it 'absorbs CallError with no further action' do expect(@call).to receive(:remote_send).once.and_raise(CallError) - blk = Proc.new do + blk = proc do @client_streamer.run_server_method(@call, method(:fake_clstream)) end expect(&blk).to_not raise_error end it 'sends a response and closes the stream if there no errors' do - req = Object.new expect(@call).to receive(:remote_send).once.with(@ok_response) expect(@call).to receive(:send_status).once.with(OK, 'OK') expect(@call).to receive(:finished).once @client_streamer.run_server_method(@call, method(:fake_clstream)) end - end describe 'for server streaming' do @@ -167,7 +161,7 @@ describe GRPC::RpcDesc do it 'absorbs EventError with no further action' do expect(@call).to receive(:remote_read).once.and_raise(EventError) - blk = Proc.new do + blk = proc do @server_streamer.run_server_method(@call, method(:fake_svstream)) end expect(&blk).to_not raise_error @@ -175,7 +169,7 @@ describe GRPC::RpcDesc do it 'absorbs CallError with no further action' do expect(@call).to receive(:remote_read).once.and_raise(CallError) - blk = Proc.new do + blk = proc do @server_streamer.run_server_method(@call, method(:fake_svstream)) end expect(&blk).to_not raise_error @@ -189,7 +183,6 @@ describe GRPC::RpcDesc do expect(@call).to receive(:finished).once @server_streamer.run_server_method(@call, method(:fake_svstream)) end - end describe 'for bidi streamers' do @@ -215,30 +208,27 @@ describe GRPC::RpcDesc do end it 'closes the stream if there no errors' do - req = Object.new expect(@call).to receive(:run_server_bidi) expect(@call).to receive(:send_status).once.with(OK, 'OK') expect(@call).to receive(:finished).once @bidi_streamer.run_server_method(@call, method(:fake_bidistream)) end - end - end describe '#assert_arity_matches' do def no_arg end - def fake_clstream(arg) + def fake_clstream(_arg) end - def fake_svstream(arg1, arg2) + def fake_svstream(_arg1, _arg2) end it 'raises when a request_response does not have 2 args' do [:fake_clstream, :no_arg].each do |mth| - blk = Proc.new do + blk = proc do @request_response.assert_arity_matches(method(mth)) end expect(&blk).to raise_error @@ -246,7 +236,7 @@ describe GRPC::RpcDesc do end it 'passes when a request_response has 2 args' do - blk = Proc.new do + blk = proc do @request_response.assert_arity_matches(method(:fake_svstream)) end expect(&blk).to_not raise_error @@ -254,7 +244,7 @@ describe GRPC::RpcDesc do it 'raises when a server_streamer does not have 2 args' do [:fake_clstream, :no_arg].each do |mth| - blk = Proc.new do + blk = proc do @server_streamer.assert_arity_matches(method(mth)) end expect(&blk).to raise_error @@ -262,7 +252,7 @@ describe GRPC::RpcDesc do end it 'passes when a server_streamer has 2 args' do - blk = Proc.new do + blk = proc do @server_streamer.assert_arity_matches(method(:fake_svstream)) end expect(&blk).to_not raise_error @@ -270,7 +260,7 @@ describe GRPC::RpcDesc do it 'raises when a client streamer does not have 1 arg' do [:fake_svstream, :no_arg].each do |mth| - blk = Proc.new do + blk = proc do @client_streamer.assert_arity_matches(method(mth)) end expect(&blk).to raise_error @@ -278,16 +268,15 @@ describe GRPC::RpcDesc do end it 'passes when a client_streamer has 1 arg' do - blk = Proc.new do + blk = proc do @client_streamer.assert_arity_matches(method(:fake_clstream)) end expect(&blk).to_not raise_error end - it 'raises when a bidi streamer does not have 1 arg' do [:fake_svstream, :no_arg].each do |mth| - blk = Proc.new do + blk = proc do @bidi_streamer.assert_arity_matches(method(mth)) end expect(&blk).to raise_error @@ -295,88 +284,78 @@ describe GRPC::RpcDesc do end it 'passes when a bidi streamer has 1 arg' do - blk = Proc.new do + blk = proc do @bidi_streamer.assert_arity_matches(method(:fake_clstream)) end expect(&blk).to_not raise_error end - end - describe '#is_request_response?' do - + describe '#request_response?' do it 'is true only input and output are both not Streams' do - expect(@request_response.is_request_response?).to be(true) - expect(@client_streamer.is_request_response?).to be(false) - expect(@bidi_streamer.is_request_response?).to be(false) - expect(@server_streamer.is_request_response?).to be(false) + expect(@request_response.request_response?).to be(true) + expect(@client_streamer.request_response?).to be(false) + expect(@bidi_streamer.request_response?).to be(false) + expect(@server_streamer.request_response?).to be(false) end - end - describe '#is_client_streamer?' do - + describe '#client_streamer?' do it 'is true only when input is a Stream and output is not a Stream' do - expect(@client_streamer.is_client_streamer?).to be(true) - expect(@request_response.is_client_streamer?).to be(false) - expect(@server_streamer.is_client_streamer?).to be(false) - expect(@bidi_streamer.is_client_streamer?).to be(false) + expect(@client_streamer.client_streamer?).to be(true) + expect(@request_response.client_streamer?).to be(false) + expect(@server_streamer.client_streamer?).to be(false) + expect(@bidi_streamer.client_streamer?).to be(false) end - end - describe '#is_server_streamer?' do - + describe '#server_streamer?' do it 'is true only when output is a Stream and input is not a Stream' do - expect(@server_streamer.is_server_streamer?).to be(true) - expect(@client_streamer.is_server_streamer?).to be(false) - expect(@request_response.is_server_streamer?).to be(false) - expect(@bidi_streamer.is_server_streamer?).to be(false) + expect(@server_streamer.server_streamer?).to be(true) + expect(@client_streamer.server_streamer?).to be(false) + expect(@request_response.server_streamer?).to be(false) + expect(@bidi_streamer.server_streamer?).to be(false) end - end - describe '#is_bidi_streamer?' do - + describe '#bidi_streamer?' do it 'is true only when output is a Stream and input is a Stream' do - expect(@bidi_streamer.is_bidi_streamer?).to be(true) - expect(@server_streamer.is_bidi_streamer?).to be(false) - expect(@client_streamer.is_bidi_streamer?).to be(false) - expect(@request_response.is_bidi_streamer?).to be(false) + expect(@bidi_streamer.bidi_streamer?).to be(true) + expect(@server_streamer.bidi_streamer?).to be(false) + expect(@client_streamer.bidi_streamer?).to be(false) + expect(@request_response.bidi_streamer?).to be(false) end - end - def fake_reqresp(req, call) + def fake_reqresp(_req, _call) @ok_response end - def fake_clstream(call) + def fake_clstream(_call) @ok_response end - def fake_svstream(req, call) + def fake_svstream(_req, _call) [@ok_response, @ok_response] end def fake_bidistream(an_array) - return an_array + an_array end - def bad_status(req, call) - raise GRPC::BadStatus.new(@bs_code, 'NOK') + def bad_status(_req, _call) + fail GRPC::BadStatus.new(@bs_code, 'NOK') end - def other_error(req, call) - raise ArgumentError.new('other error') + def other_error(_req, _call) + fail(ArgumentError, 'other error') end - def bad_status_alt(call) - raise GRPC::BadStatus.new(@bs_code, 'NOK') + def bad_status_alt(_call) + fail GRPC::BadStatus.new(@bs_code, 'NOK') end - def other_error_alt(call) - raise ArgumentError.new('other error') + def other_error_alt(_call) + fail(ArgumentError, 'other error') end - end diff --git a/src/ruby/spec/generic/rpc_server_pool_spec.rb b/src/ruby/spec/generic/rpc_server_pool_spec.rb index 83979ec1643e3694fa1a9b97ed739fe37d7b8b57..27fabd9c312280e1afbdbb02657e7647337cf4cb 100644 --- a/src/ruby/spec/generic/rpc_server_pool_spec.rb +++ b/src/ruby/spec/generic/rpc_server_pool_spec.rb @@ -33,9 +33,7 @@ require 'xray/thread_dump_signal_handler' Pool = GRPC::RpcServer::Pool describe Pool do - describe '#new' do - it 'raises if a non-positive size is used' do expect { Pool.new(0) }.to raise_error expect { Pool.new(-1) }.to raise_error @@ -45,11 +43,9 @@ describe Pool do it 'is constructed OK with a positive size' do expect { Pool.new(1) }.not_to raise_error end - end describe '#jobs_waiting' do - it 'at start, it is zero' do p = Pool.new(1) expect(p.jobs_waiting).to be(0) @@ -57,74 +53,67 @@ describe Pool do it 'it increases, with each scheduled job if the pool is not running' do p = Pool.new(1) - job = Proc.new { } + job = proc {} expect(p.jobs_waiting).to be(0) 5.times do |i| p.schedule(&job) expect(p.jobs_waiting).to be(i + 1) end - end it 'it decreases as jobs are run' do p = Pool.new(1) - job = Proc.new { } + job = proc {} expect(p.jobs_waiting).to be(0) - 3.times do |i| + 3.times do p.schedule(&job) end p.start sleep 2 expect(p.jobs_waiting).to be(0) end - end describe '#schedule' do - it 'throws if the pool is already stopped' do p = Pool.new(1) - p.stop() - job = Proc.new { } + p.stop + job = proc {} expect { p.schedule(&job) }.to raise_error end it 'adds jobs that get run by the pool' do p = Pool.new(1) - p.start() + p.start o, q = Object.new, Queue.new - job = Proc.new { q.push(o) } + job = proc { q.push(o) } p.schedule(&job) expect(q.pop).to be(o) p.stop end - end describe '#stop' do - it 'works when there are no scheduled tasks' do p = Pool.new(1) - expect { p.stop() }.not_to raise_error + expect { p.stop }.not_to raise_error end it 'stops jobs when there are long running jobs' do p = Pool.new(1) - p.start() + p.start o, q = Object.new, Queue.new - job = Proc.new do + job = proc do sleep(5) # long running q.push(o) end p.schedule(&job) sleep(1) # should ensure the long job gets scheduled - expect { p.stop() }.not_to raise_error + expect { p.stop }.not_to raise_error end - end describe '#start' do - it 'runs pre-scheduled jobs' do p = Pool.new(2) o, q = Object.new, Queue.new @@ -146,7 +135,5 @@ describe Pool do end p.stop end - end - end diff --git a/src/ruby/spec/generic/rpc_server_spec.rb b/src/ruby/spec/generic/rpc_server_spec.rb index 5997fdb3637698bd4b4ed5e19fbe8da5a5ed8f49..cd4888a3b4b65bdee78c566354f79598e67152c9 100644 --- a/src/ruby/spec/generic/rpc_server_spec.rb +++ b/src/ruby/spec/generic/rpc_server_spec.rb @@ -37,33 +37,37 @@ def load_test_certs files.map { |f| File.open(File.join(test_root, f)).read } end +# A test message class EchoMsg - def self.marshal(o) + def self.marshal(_o) '' end - def self.unmarshal(o) + def self.unmarshal(_o) EchoMsg.new end end +# A test service with no methods. class EmptyService include GRPC::GenericService end +# A test service without an implementation. class NoRpcImplementation include GRPC::GenericService rpc :an_rpc, EchoMsg, EchoMsg end +# A test service with an implementation. class EchoService include GRPC::GenericService rpc :an_rpc, EchoMsg, EchoMsg - def initialize(default_var='ignored') + def initialize(_default_var = 'ignored') end - def an_rpc(req, call) + def an_rpc(req, _call) logger.info('echo service received a request') req end @@ -71,14 +75,15 @@ end EchoStub = EchoService.rpc_stub_class +# A slow test service. class SlowService include GRPC::GenericService rpc :an_rpc, EchoMsg, EchoMsg - def initialize(default_var='ignored') + def initialize(_default_var = 'ignored') end - def an_rpc(req, call) + def an_rpc(req, _call) delay = 0.25 logger.info("starting a slow #{delay} rpc") sleep delay @@ -89,7 +94,6 @@ end SlowStub = SlowService.rpc_stub_class describe GRPC::RpcServer do - RpcServer = GRPC::RpcServer StatusCodes = GRPC::Core::StatusCodes @@ -97,7 +101,7 @@ describe GRPC::RpcServer do @method = 'an_rpc_method' @pass = 0 @fail = 1 - @noop = Proc.new { |x| x } + @noop = proc { |x| x } @server_queue = GRPC::Core::CompletionQueue.new port = find_unused_tcp_port @@ -112,18 +116,17 @@ describe GRPC::RpcServer do end describe '#new' do - it 'can be created with just some args' do - opts = {:a_channel_arg => 'an_arg'} - blk = Proc.new do + opts = { a_channel_arg: 'an_arg' } + blk = proc do RpcServer.new(**opts) end expect(&blk).not_to raise_error end it 'can be created with a default deadline' do - opts = {:a_channel_arg => 'an_arg', :deadline => 5} - blk = Proc.new do + opts = { a_channel_arg: 'an_arg', deadline: 5 } + blk = proc do RpcServer.new(**opts) end expect(&blk).not_to raise_error @@ -131,20 +134,20 @@ describe GRPC::RpcServer do it 'can be created with a completion queue override' do opts = { - :a_channel_arg => 'an_arg', - :completion_queue_override => @server_queue + a_channel_arg: 'an_arg', + completion_queue_override: @server_queue } - blk = Proc.new do + blk = proc do RpcServer.new(**opts) end expect(&blk).not_to raise_error end it 'cannot be created with a bad completion queue override' do - blk = Proc.new do + blk = proc do opts = { - :a_channel_arg => 'an_arg', - :completion_queue_override => Object.new + a_channel_arg: 'an_arg', + completion_queue_override: Object.new } RpcServer.new(**opts) end @@ -152,10 +155,10 @@ describe GRPC::RpcServer do end it 'cannot be created with invalid ServerCredentials' do - blk = Proc.new do + blk = proc do opts = { - :a_channel_arg => 'an_arg', - :creds => Object.new + a_channel_arg: 'an_arg', + creds: Object.new } RpcServer.new(**opts) end @@ -165,10 +168,10 @@ describe GRPC::RpcServer do it 'can be created with the creds as valid ServerCedentials' do certs = load_test_certs server_creds = GRPC::Core::ServerCredentials.new(nil, certs[1], certs[2]) - blk = Proc.new do + blk = proc do opts = { - :a_channel_arg => 'an_arg', - :creds => server_creds + a_channel_arg: 'an_arg', + creds: server_creds } RpcServer.new(**opts) end @@ -176,30 +179,28 @@ describe GRPC::RpcServer do end it 'can be created with a server override' do - opts = {:a_channel_arg => 'an_arg', :server_override => @server} - blk = Proc.new do + opts = { a_channel_arg: 'an_arg', server_override: @server } + blk = proc do RpcServer.new(**opts) end expect(&blk).not_to raise_error end it 'cannot be created with a bad server override' do - blk = Proc.new do + blk = proc do opts = { - :a_channel_arg => 'an_arg', - :server_override => Object.new + a_channel_arg: 'an_arg', + server_override: Object.new } RpcServer.new(**opts) end expect(&blk).to raise_error end - end describe '#stopped?' do - before(:each) do - opts = {:a_channel_arg => 'an_arg', :poll_period => 1} + opts = { a_channel_arg: 'an_arg', poll_period: 1 } @srv = RpcServer.new(**opts) end @@ -229,33 +230,31 @@ describe GRPC::RpcServer do expect(@srv.stopped?).to be(true) t.join end - end describe '#running?' do - it 'starts out false' do - opts = {:a_channel_arg => 'an_arg', :server_override => @server} + opts = { a_channel_arg: 'an_arg', server_override: @server } r = RpcServer.new(**opts) expect(r.running?).to be(false) end it 'is false after run is called with no services registered' do opts = { - :a_channel_arg => 'an_arg', - :poll_period => 1, - :server_override => @server + a_channel_arg: 'an_arg', + poll_period: 1, + server_override: @server } r = RpcServer.new(**opts) - r.run() + r.run expect(r.running?).to be(false) end it 'is true after run is called with a registered service' do opts = { - :a_channel_arg => 'an_arg', - :poll_period => 1, - :server_override => @server + a_channel_arg: 'an_arg', + poll_period: 1, + server_override: @server } r = RpcServer.new(**opts) r.handle(EchoService) @@ -265,13 +264,11 @@ describe GRPC::RpcServer do r.stop t.join end - end describe '#handle' do - before(:each) do - @opts = {:a_channel_arg => 'an_arg', :poll_period => 1} + @opts = { a_channel_arg: 'an_arg', poll_period: 1 } @srv = RpcServer.new(**@opts) end @@ -309,33 +306,30 @@ describe GRPC::RpcServer do @srv.handle(EchoService) expect { r.handle(EchoService) }.to raise_error end - end describe '#run' do - before(:each) do @client_opts = { - :channel_override => @ch + channel_override: @ch } @marshal = EchoService.rpc_descs[:an_rpc].marshal_proc @unmarshal = EchoService.rpc_descs[:an_rpc].unmarshal_proc(:output) server_opts = { - :server_override => @server, - :completion_queue_override => @server_queue, - :poll_period => 1 + server_override: @server, + completion_queue_override: @server_queue, + poll_period: 1 } @srv = RpcServer.new(**server_opts) end describe 'when running' do - it 'should return NOT_FOUND status for requests on unknown methods' do @srv.handle(EchoService) t = Thread.new { @srv.run } @srv.wait_till_running req = EchoMsg.new - blk = Proc.new do + blk = proc do cq = GRPC::Core::CompletionQueue.new stub = GRPC::ClientStub.new(@host, cq, **@client_opts) stub.request_response('/unknown', req, @marshal, @unmarshal) @@ -352,20 +346,19 @@ describe GRPC::RpcServer do req = EchoMsg.new n = 5 # arbitrary stub = EchoStub.new(@host, **@client_opts) - n.times { |x| expect(stub.an_rpc(req)).to be_a(EchoMsg) } + n.times { expect(stub.an_rpc(req)).to be_a(EchoMsg) } @srv.stop t.join end it 'should obtain responses for multiple parallel requests' do @srv.handle(EchoService) - t = Thread.new { @srv.run } + Thread.new { @srv.run } @srv.wait_till_running req, q = EchoMsg.new, Queue.new n = 5 # arbitrary threads = [] - n.times do |x| - cq = GRPC::Core::CompletionQueue.new + n.times do threads << Thread.new do stub = EchoStub.new(@host, **@client_opts) q << stub.an_rpc(req) @@ -373,44 +366,40 @@ describe GRPC::RpcServer do end n.times { expect(q.pop).to be_a(EchoMsg) } @srv.stop - threads.each { |t| t.join } + threads.each(&:join) end it 'should return UNAVAILABLE status if there too many jobs' do opts = { - :a_channel_arg => 'an_arg', - :server_override => @server, - :completion_queue_override => @server_queue, - :pool_size => 1, - :poll_period => 1, - :max_waiting_requests => 0 + a_channel_arg: 'an_arg', + server_override: @server, + completion_queue_override: @server_queue, + pool_size: 1, + poll_period: 1, + max_waiting_requests: 0 } alt_srv = RpcServer.new(**opts) alt_srv.handle(SlowService) - t = Thread.new { alt_srv.run } + Thread.new { alt_srv.run } alt_srv.wait_till_running req = EchoMsg.new n = 5 # arbitrary, use as many to ensure the server pool is exceeded threads = [] - _1_failed_as_unavailable = false - n.times do |x| + one_failed_as_unavailable = false + n.times do threads << Thread.new do - cq = GRPC::Core::CompletionQueue.new stub = SlowStub.new(@host, **@client_opts) begin stub.an_rpc(req) rescue GRPC::BadStatus => e - _1_failed_as_unavailable = e.code == StatusCodes::UNAVAILABLE + one_failed_as_unavailable = e.code == StatusCodes::UNAVAILABLE end end end - threads.each { |t| t.join } + threads.each(&:join) alt_srv.stop - expect(_1_failed_as_unavailable).to be(true) + expect(one_failed_as_unavailable).to be(true) end - end - end - end diff --git a/src/ruby/spec/generic/service_spec.rb b/src/ruby/spec/generic/service_spec.rb index a8e0c6f52fee7849b070ef8471f6dc244f2900e3..29f2412631990483128b84c27a32c7660589c8e3 100644 --- a/src/ruby/spec/generic/service_spec.rb +++ b/src/ruby/spec/generic/service_spec.rb @@ -31,23 +31,24 @@ require 'grpc' require 'grpc/generic/rpc_desc' require 'grpc/generic/service' - +# A test message that encodes/decodes using marshal/marshal. class GoodMsg - def self.marshal(o) + def self.marshal(_o) '' end - def self.unmarshal(o) + def self.unmarshal(_o) GoodMsg.new end end +# A test message that encodes/decodes using encode/decode. class EncodeDecodeMsg - def self.encode(o) + def self.encode(_o) '' end - def self.decode(o) + def self.decode(_o) GoodMsg.new end end @@ -55,7 +56,6 @@ end GenericService = GRPC::GenericService Dsl = GenericService::Dsl - describe 'String#underscore' do it 'should convert CamelCase to underscore separated' do expect('AnRPC'.underscore).to eq('an_rpc') @@ -66,20 +66,14 @@ describe 'String#underscore' do end describe Dsl do - it 'can be included in new classes' do - blk = Proc.new do - c = Class.new { include Dsl } - end + blk = proc { Class.new { include Dsl } } expect(&blk).to_not raise_error end - end describe GenericService do - describe 'including it' do - it 'adds a class method, rpc' do c = Class.new do include GenericService @@ -144,9 +138,8 @@ describe GenericService do end describe '#include' do - it 'raises if #rpc is missing an arg' do - blk = Proc.new do + blk = proc do Class.new do include GenericService rpc :AnRpc, GoodMsg @@ -154,7 +147,7 @@ describe GenericService do end expect(&blk).to raise_error ArgumentError - blk = Proc.new do + blk = proc do Class.new do include GenericService rpc :AnRpc @@ -164,9 +157,8 @@ describe GenericService do end describe 'when #rpc args are incorrect' do - it 'raises if an arg does not have the marshal or unmarshal methods' do - blk = Proc.new do + blk = proc do Class.new do include GenericService rpc :AnRpc, GoodMsg, Object @@ -176,13 +168,14 @@ describe GenericService do end it 'raises if a type arg only has the marshal method' do + # a bad message type with only a marshal method class OnlyMarshal def marshal(o) o end end - blk = Proc.new do + blk = proc do Class.new do include GenericService rpc :AnRpc, OnlyMarshal, GoodMsg @@ -192,12 +185,13 @@ describe GenericService do end it 'raises if a type arg only has the unmarshal method' do + # a bad message type with only an unmarshal method class OnlyUnmarshal def self.ummarshal(o) o end end - blk = Proc.new do + blk = proc do Class.new do include GenericService rpc :AnRpc, GoodMsg, OnlyUnmarshal @@ -208,7 +202,7 @@ describe GenericService do end it 'is ok for services that expect the default {un,}marshal methods' do - blk = Proc.new do + blk = proc do Class.new do include GenericService rpc :AnRpc, GoodMsg, GoodMsg @@ -218,7 +212,7 @@ describe GenericService do end it 'is ok for services that override the default {un,}marshal methods' do - blk = Proc.new do + blk = proc do Class.new do include GenericService self.marshal_class_method = :encode @@ -228,11 +222,9 @@ describe GenericService do end expect(&blk).not_to raise_error end - end describe '#rpc_stub_class' do - it 'generates a client class that defines any of the rpc methods' do s = Class.new do include GenericService @@ -249,7 +241,6 @@ describe GenericService do end describe 'the generated instances' do - it 'can be instanciated with just a hostname' do s = Class.new do include GenericService @@ -277,13 +268,10 @@ describe GenericService do expect(o.methods).to include(:a_client_streamer) expect(o.methods).to include(:a_bidi_streamer) end - end - end describe '#assert_rpc_descs_have_methods' do - it 'fails if there is no instance method for an rpc descriptor' do c1 = Class.new do include GenericService @@ -310,16 +298,16 @@ describe GenericService do rpc :AClientStreamer, stream(GoodMsg), GoodMsg rpc :ABidiStreamer, stream(GoodMsg), stream(GoodMsg) - def an_rpc(req, call) + def an_rpc(_req, _call) end - def a_server_streamer(req, call) + def a_server_streamer(_req, _call) end - def a_client_streamer(call) + def a_client_streamer(_call) end - def a_bidi_streamer(call) + def a_bidi_streamer(_call) end end expect { c.assert_rpc_descs_have_methods }.to_not raise_error @@ -330,7 +318,7 @@ describe GenericService do include GenericService rpc :AnRpc, GoodMsg, GoodMsg - def an_rpc(req, call) + def an_rpc(_req, _call) end end c = Class.new(base) @@ -344,13 +332,11 @@ describe GenericService do rpc :AnRpc, GoodMsg, GoodMsg end c = Class.new(base) do - def an_rpc(req, call) + def an_rpc(_req, _call) end end expect { c.assert_rpc_descs_have_methods }.to_not raise_error expect(c.include?(GenericService)).to be(true) end - end - end diff --git a/src/ruby/spec/metadata_spec.rb b/src/ruby/spec/metadata_spec.rb index d5dc8b233863730a6b9ef5fb45c2876e1f41b2b0..9cdce6b40d59ed1e7409b01351d66061e469d417 100644 --- a/src/ruby/spec/metadata_spec.rb +++ b/src/ruby/spec/metadata_spec.rb @@ -30,7 +30,6 @@ require 'grpc' describe GRPC::Core::Metadata do - describe '#new' do it 'should create instances' do expect { GRPC::Core::Metadata.new('a key', 'a value') }.to_not raise_error @@ -62,5 +61,4 @@ describe GRPC::Core::Metadata do expect(md.dup.value).to eq('a value') end end - end diff --git a/src/ruby/spec/port_picker.rb b/src/ruby/spec/port_picker.rb index 1b52113e1079f7cb80b69285331cb346a42a216b..98ffbacc1bcfee074fbde8769b8ff631a6bff9c7 100644 --- a/src/ruby/spec/port_picker.rb +++ b/src/ruby/spec/port_picker.rb @@ -32,7 +32,7 @@ require 'socket' # @param [Fixnum] the minimum port number to accept # @param [Fixnum] the maximum port number to accept # @return [Fixnum ]a free tcp port -def find_unused_tcp_port(min=32768, max=60000) +def find_unused_tcp_port(min = 32_768, max = 60_000) # Allow the system to assign a port, by specifying 0. # Loop until a port is assigned in the required range loop do @@ -40,6 +40,6 @@ def find_unused_tcp_port(min=32768, max=60000) socket.bind(Addrinfo.tcp('127.0.0.1', 0)) p = socket.local_address.ip_port socket.close - return p if p > min and p < 60000 + return p if p > min && p < max end end diff --git a/src/ruby/spec/server_credentials_spec.rb b/src/ruby/spec/server_credentials_spec.rb index bcc2cae4dd8992de53299c7cff7e47adcb738c3e..faa713d562c968bf27702d4dab9be6b354189968 100644 --- a/src/ruby/spec/server_credentials_spec.rb +++ b/src/ruby/spec/server_credentials_spec.rb @@ -35,13 +35,10 @@ def load_test_certs files.map { |f| File.open(File.join(test_root, f)).read } end - describe GRPC::Core::ServerCredentials do - Creds = GRPC::Core::ServerCredentials describe '#new' do - it 'can be constructed from a fake CA PEM, server PEM and a server key' do expect { Creds.new('a', 'b', 'c') }.not_to raise_error end @@ -53,22 +50,20 @@ describe GRPC::Core::ServerCredentials do it 'cannot be constructed without a server cert chain' do root_cert, server_key, _ = load_test_certs - blk = Proc.new { Creds.new(root_cert, server_key, nil) } + blk = proc { Creds.new(root_cert, server_key, nil) } expect(&blk).to raise_error end it 'cannot be constructed without a server key' do - root_cert, server_key, _ = load_test_certs - blk = Proc.new { Creds.new(root_cert, _, cert_chain) } + root_cert, _, _ = load_test_certs + blk = proc { Creds.new(root_cert, nil, cert_chain) } expect(&blk).to raise_error end it 'can be constructed without a root_cret' do _, server_key, cert_chain = load_test_certs - blk = Proc.new { Creds.new(_, server_key, cert_chain) } + blk = proc { Creds.new(nil, server_key, cert_chain) } expect(&blk).to_not raise_error end - end - end diff --git a/src/ruby/spec/server_spec.rb b/src/ruby/spec/server_spec.rb index 28f520a2f6811f81113d90382e2e803e37ed3896..6e5bb523de03c2d1319bc79763ce4d3158d401b2 100644 --- a/src/ruby/spec/server_spec.rb +++ b/src/ruby/spec/server_spec.rb @@ -39,7 +39,6 @@ end Server = GRPC::Core::Server describe Server do - def create_test_cert GRPC::Core::ServerCredentials.new(*load_test_certs) end @@ -49,11 +48,8 @@ describe Server do end describe '#start' do - it 'runs without failing' do - blk = Proc.new do - s = Server.new(@cq, nil).start - end + blk = proc { Server.new(@cq, nil).start } expect(&blk).to_not raise_error end @@ -62,20 +58,19 @@ describe Server do s.close expect { s.start }.to raise_error(RuntimeError) end - end describe '#destroy' do it 'destroys a server ok' do s = start_a_server - blk = Proc.new { s.destroy } + blk = proc { s.destroy } expect(&blk).to_not raise_error end it 'can be called more than once without error' do s = start_a_server begin - blk = Proc.new { s.destroy } + blk = proc { s.destroy } expect(&blk).to_not raise_error blk.call expect(&blk).to_not raise_error @@ -89,7 +84,7 @@ describe Server do it 'closes a server ok' do s = start_a_server begin - blk = Proc.new { s.close } + blk = proc { s.close } expect(&blk).to_not raise_error ensure s.close @@ -98,7 +93,7 @@ describe Server do it 'can be called more than once without error' do s = start_a_server - blk = Proc.new { s.close } + blk = proc { s.close } expect(&blk).to_not raise_error blk.call expect(&blk).to_not raise_error @@ -106,11 +101,9 @@ describe Server do end describe '#add_http_port' do - describe 'for insecure servers' do - it 'runs without failing' do - blk = Proc.new do + blk = proc do s = Server.new(@cq, nil) s.add_http2_port('localhost:0') s.close @@ -123,13 +116,11 @@ describe Server do s.close expect { s.add_http2_port('localhost:0') }.to raise_error(RuntimeError) end - end describe 'for secure servers' do - it 'runs without failing' do - blk = Proc.new do + blk = proc do s = Server.new(@cq, nil) s.add_http2_port('localhost:0', true) s.close @@ -140,16 +131,13 @@ describe Server do it 'fails if the server is closed' do s = Server.new(@cq, nil) s.close - blk = Proc.new { s.add_http2_port('localhost:0', true) } + blk = proc { s.add_http2_port('localhost:0', true) } expect(&blk).to raise_error(RuntimeError) end - end - end shared_examples '#new' do - it 'takes a completion queue with nil channel args' do expect { Server.new(@cq, nil, create_test_cert) }.to_not raise_error end @@ -162,14 +150,14 @@ describe Server do end it 'does not take a hash with bad values as channel args' do - blk = construct_with_args(:symbol => Object.new) + blk = construct_with_args(symbol: Object.new) expect(&blk).to raise_error TypeError blk = construct_with_args('1' => Hash.new) expect(&blk).to raise_error TypeError end it 'can take a hash with a symbol key as channel args' do - blk = construct_with_args(:a_symbol => 1) + blk = construct_with_args(a_symbol: 1) expect(&blk).to_not raise_error end @@ -179,46 +167,41 @@ describe Server do end it 'can take a hash with a string value as channel args' do - blk = construct_with_args(:a_symbol => '1') + blk = construct_with_args(a_symbol: '1') expect(&blk).to_not raise_error end it 'can take a hash with a symbol value as channel args' do - blk = construct_with_args(:a_symbol => :another_symbol) + blk = construct_with_args(a_symbol: :another_symbol) expect(&blk).to_not raise_error end it 'can take a hash with a numeric value as channel args' do - blk = construct_with_args(:a_symbol => 1) + blk = construct_with_args(a_symbol: 1) expect(&blk).to_not raise_error end it 'can take a hash with many args as channel args' do - args = Hash[127.times.collect { |x| [x.to_s, x] } ] + args = Hash[127.times.collect { |x| [x.to_s, x] }] blk = construct_with_args(args) expect(&blk).to_not raise_error end - end describe '#new with an insecure channel' do - def construct_with_args(a) - Proc.new { Server.new(@cq, a) } + proc { Server.new(@cq, a) } end it_behaves_like '#new' - end describe '#new with a secure channel' do - def construct_with_args(a) - Proc.new { Server.new(@cq, a, create_test_cert) } + proc { Server.new(@cq, a, create_test_cert) } end it_behaves_like '#new' - end def start_a_server @@ -229,5 +212,4 @@ describe Server do s.start s end - end diff --git a/src/ruby/spec/time_consts_spec.rb b/src/ruby/spec/time_consts_spec.rb index 27755075a9d5b7ee8e6cc00585921f3ac7fb00be..b01027ce2678d30104091dfcd5cb705302ffc207 100644 --- a/src/ruby/spec/time_consts_spec.rb +++ b/src/ruby/spec/time_consts_spec.rb @@ -32,7 +32,6 @@ require 'grpc' TimeConsts = GRPC::Core::TimeConsts describe TimeConsts do - before(:each) do @known_consts = [:ZERO, :INFINITE_FUTURE, :INFINITE_PAST].sort end @@ -49,11 +48,9 @@ describe TimeConsts do end end end - end describe '#from_relative_time' do - it 'cannot handle arbitrary objects' do expect { TimeConsts.from_relative_time(Object.new) }.to raise_error end @@ -89,5 +86,4 @@ describe '#from_relative_time' do expect(abs.to_f).to be_within(epsilon).of(want.to_f) end end - end diff --git a/templates/Makefile.template b/templates/Makefile.template index 256380c2ddc1d51a1a1d501fb0364297d0171c0e..b80e80ca8187e95c7fc4986c4dc038d203c4cca0 100644 --- a/templates/Makefile.template +++ b/templates/Makefile.template @@ -19,6 +19,14 @@ return 'gens/' + m.group(1) + '.pb.cc' %> + +# Basic platform detection +HOST_SYSTEM = $(shell uname | cut -f 1 -d_) +ifeq ($(SYSTEM),) +SYSTEM = $(HOST_SYSTEM) +endif + + # Configurations VALID_CONFIG_opt = 1 @@ -39,30 +47,48 @@ CPPFLAGS_dbg = -O0 LDFLAGS_dbg = DEFINES_dbg = _DEBUG DEBUG +VALID_CONFIG_valgrind = 1 +REQUIRE_CUSTOM_LIBRARIES_valgrind = 1 +CC_valgrind = gcc +CXX_valgrind = g++ +LD_valgrind = gcc +LDXX_valgrind = g++ +CPPFLAGS_valgrind = -O0 +OPENSSL_CFLAGS_valgrind = -DPURIFY +LDFLAGS_valgrind = +DEFINES_valgrind = _DEBUG DEBUG + VALID_CONFIG_tsan = 1 +REQUIRE_CUSTOM_LIBRARIES_tsan = 1 CC_tsan = clang CXX_tsan = clang++ LD_tsan = clang LDXX_tsan = clang++ CPPFLAGS_tsan = -O1 -fsanitize=thread -fno-omit-frame-pointer +OPENSSL_CONFIG_tsan = no-asm LDFLAGS_tsan = -fsanitize=thread DEFINES_tsan = NDEBUG VALID_CONFIG_asan = 1 +REQUIRE_CUSTOM_LIBRARIES_asan = 1 CC_asan = clang CXX_asan = clang++ LD_asan = clang LDXX_asan = clang++ CPPFLAGS_asan = -O1 -fsanitize=address -fno-omit-frame-pointer +OPENSSL_CONFIG_asan = no-asm LDFLAGS_asan = -fsanitize=address DEFINES_asan = NDEBUG VALID_CONFIG_msan = 1 +REQUIRE_CUSTOM_LIBRARIES_msan = 1 CC_msan = clang CXX_msan = clang++ LD_msan = clang LDXX_msan = clang++ CPPFLAGS_msan = -O1 -fsanitize=memory -fno-omit-frame-pointer +OPENSSL_CFLAGS_msan = -DPURIFY +OPENSSL_CONFIG_msan = no-asm LDFLAGS_msan = -fsanitize=memory DEFINES_msan = NDEBUG @@ -75,6 +101,7 @@ CPPFLAGS_gcov = -O0 -fprofile-arcs -ftest-coverage LDFLAGS_gcov = -fprofile-arcs -ftest-coverage DEFINES_gcov = NDEBUG + # General settings. # You may want to change these depending on your system. @@ -95,6 +122,12 @@ ifndef VALID_CONFIG_$(CONFIG) $(error Invalid CONFIG value '$(CONFIG)') endif + +# The HOST compiler settings are used to compile the protoc plugins. +# In most cases, you won't have to change anything, but if you are +# cross-compiling, you can override these variables from GNU make's +# command line: make CC=cross-gcc HOST_CC=gcc + HOST_CC = $(CC) HOST_CXX = $(CXX) HOST_LD = $(LD) @@ -107,10 +140,15 @@ LDFLAGS += $(LDFLAGS_$(CONFIG)) CFLAGS += -std=c89 -pedantic CXXFLAGS += -std=c++11 CPPFLAGS += -g -fPIC -Wall -Werror -Wno-long-long -LDFLAGS += -g -pthread -fPIC +LDFLAGS += -g -fPIC INCLUDES = . include gens +ifeq ($(SYSTEM),Darwin) +LIBS = m z +else LIBS = rt m z pthread +LDFLAGS += -pthread +endif LIBSXX = protobuf LIBS_PROTOC = protoc protobuf @@ -148,11 +186,6 @@ HOST_LDLIBS = $(LDLIBS) # These are automatically computed variables. # There shouldn't be any need to change anything from now on. -HOST_SYSTEM = $(shell uname | cut -f 1 -d_) -ifeq ($(SYSTEM),) -SYSTEM = $(HOST_SYSTEM) -endif - ifeq ($(SYSTEM),MINGW32) SHARED_EXT = dll endif @@ -171,9 +204,22 @@ endif OPENSSL_ALPN_CHECK_CMD = $(CC) $(CFLAGS) $(CPPFLAGS) -o /dev/null test/build/openssl-alpn.c -lssl -lcrypto -ldl $(LDFLAGS) ZLIB_CHECK_CMD = $(CC) $(CFLAGS) $(CPPFLAGS) -o /dev/null test/build/zlib.c -lz $(LDFLAGS) +PERFTOOLS_CHECK_CMD = $(CC) $(CFLAGS) $(CPPFLAGS) -o /dev/null test/build/perftools.c -lprofiler $(LDFLAGS) + +HAS_SYSTEM_PERFTOOLS = $(shell $(PERFTOOLS_CHECK_CMD) 2> /dev/null && echo true || echo false) +ifeq ($(HAS_SYSTEM_PERFTOOLS),true) +DEFINES += GRPC_HAVE_PERFTOOLS +LIBS += profiler +endif +ifndef REQUIRE_CUSTOM_LIBRARIES_$(CONFIG) HAS_SYSTEM_OPENSSL_ALPN = $(shell $(OPENSSL_ALPN_CHECK_CMD) 2> /dev/null && echo true || echo false) HAS_SYSTEM_ZLIB = $(shell $(ZLIB_CHECK_CMD) 2> /dev/null && echo true || echo false) +else +# override system libraries if the config requires a custom compiled library +HAS_SYSTEM_OPENSSL_ALPN = false +HAS_SYSTEM_ZLIB = false +endif ifeq ($(wildcard third_party/openssl/ssl/ssl.h),) HAS_EMBEDDED_OPENSSL_ALPN = false @@ -189,7 +235,7 @@ endif ifeq ($(HAS_SYSTEM_ZLIB),false) ifeq ($(HAS_EMBEDDED_ZLIB),true) -ZLIB_DEP = third_party/zlib/libz.a +ZLIB_DEP = libs/$(CONFIG)/zlib/libz.a CPPFLAGS += -Ithird_party/zlib LDFLAGS += -Lthird_party/zlib else @@ -199,10 +245,10 @@ endif ifeq ($(HAS_SYSTEM_OPENSSL_ALPN),false) ifeq ($(HAS_EMBEDDED_OPENSSL_ALPN),true) -OPENSSL_DEP = third_party/openssl/libssl.a -OPENSSL_MERGE_LIBS += third_party/openssl/libssl.a third_party/openssl/libcrypto.a +OPENSSL_DEP = libs/$(CONFIG)/openssl/libssl.a +OPENSSL_MERGE_LIBS += libs/$(CONFIG)/openssl/libssl.a libs/$(CONFIG)/openssl/libcrypto.a CPPFLAGS += -Ithird_party/openssl/include -LDFLAGS += -Lthird_party/openssl +LDFLAGS += -Llibs/$(CONFIG)/openssl LIBS_SECURE = dl else NO_SECURE = true @@ -213,16 +259,19 @@ endif LDLIBS_SECURE += $(addprefix -l, $(LIBS_SECURE)) -ifneq ($(DEP_MISSING),) -NO_DEPS = true -endif - -ifneq ($(MAKECMDGOALS),clean) +ifeq ($(MAKECMDGOALS),clean) NO_DEPS = true endif .SECONDARY = %.pb.h %.pb.cc +PROTOC_PLUGINS=\ +% for tgt in targets: +% if tgt.build == 'protoc': + bins/$(CONFIG)/${tgt.name}\ +% endif +% endfor + ifeq ($(DEP_MISSING),) all: static shared\ % for tgt in targets: @@ -290,27 +339,39 @@ run_dep_checks: $(OPENSSL_ALPN_CHECK_CMD) || true $(ZLIB_CHECK_CMD) || true -third_party/zlib/libz.a: - (cd third_party/zlib ; CFLAGS="-fPIC -fvisibility=hidden" ./configure --static) - $(MAKE) -C third_party/zlib +libs/$(CONFIG)/zlib/libz.a: + $(E) "[MAKE] Building zlib" + $(Q)(cd third_party/zlib ; CC="$(CC)" CFLAGS="-fPIC -fvisibility=hidden $(CPPFLAGS_$(CONFIG))" ./configure --static) + $(Q)$(MAKE) -C third_party/zlib clean + $(Q)$(MAKE) -C third_party/zlib + $(Q)mkdir -p libs/$(CONFIG)/zlib + $(Q)cp third_party/zlib/libz.a libs/$(CONFIG)/zlib -third_party/openssl/libssl.a: - (cd third_party/openssl ; CC="$(CC) -fPIC -fvisibility=hidden" ./config) - $(MAKE) -C third_party/openssl build_crypto build_ssl +libs/$(CONFIG)/openssl/libssl.a: + $(E) "[MAKE] Building openssl for $(SYSTEM)" +ifeq ($(SYSTEM),Darwin) + $(Q)(cd third_party/openssl ; CC="$(CC) -fPIC -fvisibility=hidden $(CPPFLAGS_$(CONFIG)) $(OPENSSL_CFLAGS_$(CONFIG))" ./Configure darwin64-x86_64-cc $(OPENSSL_CONFIG_$(CONFIG))) +else + $(Q)(cd third_party/openssl ; CC="$(CC) -fPIC -fvisibility=hidden $(CPPFLAGS_$(CONFIG)) $(OPENSSL_CFLAGS_$(CONFIG))" ./config $(OPENSSL_CONFIG_$(CONFIG))) +endif + $(Q)$(MAKE) -C third_party/openssl clean + $(Q)$(MAKE) -C third_party/openssl build_crypto build_ssl + $(Q)mkdir -p libs/$(CONFIG)/openssl + $(Q)cp third_party/openssl/libssl.a third_party/openssl/libcrypto.a libs/$(CONFIG)/openssl static: static_c static_cxx -static_c: dep_c\ +static_c: \ % for lib in libs: -% if lib.build == 'all' and not lib.get('c++', False): +% if lib.build == 'all' and lib.language == 'c': libs/$(CONFIG)/lib${lib.name}.a\ % endif % endfor -static_cxx: dep_cxx\ +static_cxx: \ % for lib in libs: -% if lib.build == 'all' and lib.get('c++', False): +% if lib.build == 'all' and lib.language == 'c++': libs/$(CONFIG)/lib${lib.name}.a\ % endif % endfor @@ -318,17 +379,17 @@ static_cxx: dep_cxx\ shared: shared_c shared_cxx -shared_c: dep_c\ +shared_c: \ % for lib in libs: -% if lib.build == 'all' and not lib.get('c++', False): +% if lib.build == 'all' and lib.language == 'c': libs/$(CONFIG)/lib${lib.name}.$(SHARED_EXT)\ % endif % endfor -shared_cxx: dep_cxx\ +shared_cxx: \ % for lib in libs: -% if lib.build == 'all' and lib.get('c++', False): +% if lib.build == 'all' and lib.language == 'c++': libs/$(CONFIG)/lib${lib.name}.$(SHARED_EXT)\ % endif % endfor @@ -336,17 +397,17 @@ shared_cxx: dep_cxx\ privatelibs: privatelibs_c privatelibs_cxx -privatelibs_c: dep_c\ +privatelibs_c: \ % for lib in libs: -% if lib.build == 'private' and not lib.get('c++', False): +% if lib.build == 'private' and lib.language == 'c': libs/$(CONFIG)/lib${lib.name}.a\ % endif % endfor -privatelibs_cxx: dep_cxx\ +privatelibs_cxx: \ % for lib in libs: -% if lib.build == 'private' and lib.get('c++', False): +% if lib.build == 'private' and lib.language == 'c++': libs/$(CONFIG)/lib${lib.name}.a\ % endif % endfor @@ -354,17 +415,17 @@ privatelibs_cxx: dep_cxx\ buildtests: buildtests_c buildtests_cxx -buildtests_c: bins_dep_c privatelibs_c\ +buildtests_c: privatelibs_c\ % for tgt in targets: -% if tgt.build == 'test' and not tgt.get('c++', False): +% if tgt.build == 'test' and not tgt.language == 'c++': bins/$(CONFIG)/${tgt.name}\ % endif % endfor -buildtests_cxx: bins_dep_cxx privatelibs_cxx\ +buildtests_cxx: privatelibs_cxx\ % for tgt in targets: -% if tgt.build == 'test' and tgt.get('c++', False): +% if tgt.build == 'test' and tgt.language == 'c++': bins/$(CONFIG)/${tgt.name}\ % endif % endfor @@ -374,7 +435,7 @@ test: test_c test_cxx test_c: buildtests_c % for tgt in targets: -% if tgt.build == 'test' and tgt.get('run', True) and not tgt.get('c++', False): +% if tgt.build == 'test' and tgt.get('run', True) and not tgt.language == 'c++': $(E) "[RUN] Testing ${tgt.name}" $(Q) ./bins/$(CONFIG)/${tgt.name} || ( echo test ${tgt.name} failed ; exit 1 ) % endif @@ -383,7 +444,7 @@ test_c: buildtests_c test_cxx: buildtests_cxx % for tgt in targets: -% if tgt.build == 'test' and tgt.get('run', True) and tgt.get('c++', False): +% if tgt.build == 'test' and tgt.get('run', True) and tgt.language == 'c++': $(E) "[RUN] Testing ${tgt.name}" $(Q) ./bins/$(CONFIG)/${tgt.name} || ( echo test ${tgt.name} failed ; exit 1 ) % endif @@ -398,14 +459,6 @@ tools: privatelibs\ % endfor -protoc_plugins:\ -% for tgt in targets: -% if tgt.build == 'protoc': - bins/$(CONFIG)/${tgt.name}\ -% endif -% endfor - - buildbenchmarks: privatelibs\ % for tgt in targets: % if tgt.build == 'benchmark': @@ -422,9 +475,14 @@ strip-static: strip-static_c strip-static_cxx strip-shared: strip-shared_c strip-shared_cxx + +# TODO(nnoble): the strip target is stripping in-place, instead +# of copying files in a temporary folder. +# This prevents proper debugging after running make install. + strip-static_c: static_c % for lib in libs: -% if not lib.get("c++", False): +% if lib.language == "c": % if lib.build == "all": $(E) "[STRIP] Stripping lib${lib.name}.a" $(Q) $(STRIP) libs/$(CONFIG)/lib${lib.name}.a @@ -434,7 +492,7 @@ strip-static_c: static_c strip-static_cxx: static_cxx % for lib in libs: -% if lib.get("c++", False): +% if lib.language == "c++": % if lib.build == "all": $(E) "[STRIP] Stripping lib${lib.name}.a" $(Q) $(STRIP) libs/$(CONFIG)/lib${lib.name}.a @@ -444,7 +502,7 @@ strip-static_cxx: static_cxx strip-shared_c: shared_c % for lib in libs: -% if not lib.get("c++", False): +% if lib.language == "c": % if lib.build == "all": $(E) "[STRIP] Stripping lib${lib.name}.so" $(Q) $(STRIP) libs/$(CONFIG)/lib${lib.name}.$(SHARED_EXT) @@ -454,7 +512,7 @@ strip-shared_c: shared_c strip-shared_cxx: shared_cxx % for lib in libs: -% if lib.get("c++", False): +% if lib.language == "c++": % if lib.build == "all": $(E) "[STRIP] Stripping lib${lib.name}.so" $(Q) $(STRIP) libs/$(CONFIG)/lib${lib.name}.$(SHARED_EXT) @@ -463,79 +521,32 @@ strip-shared_cxx: shared_cxx % endfor % for p in protos: -deps/$(CONFIG)/gens/${p}.pb.dep: - $(Q) mkdir -p `dirname $@` - $(Q) touch $@ - -gens/${p}.pb.cc: ${p}.proto protoc_plugins +gens/${p}.pb.cc: ${p}.proto $(PROTOC_PLUGINS) $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` $(Q) $(PROTOC) --cpp_out=gens --grpc_out=gens --plugin=protoc-gen-grpc=bins/$(CONFIG)/cpp_plugin $< % endfor -deps/$(CONFIG)/%.dep : %.c - $(E) "[DEP] Generating dependencies for $<" - $(Q) mkdir -p `dirname $@` - $(Q) $(CC) $(CFLAGS) $(CPPFLAGS_NO_ARCH) -MG -M $< > $@ - -deps/$(CONFIG)/%.dep : %.cc - $(E) "[DEP] Generating dependencies for $<" - $(Q) mkdir -p `dirname $@` - $(Q) $(CXX) $(CXXFLAGS) $(CPPFLAGS_NO_ARCH) -MG -M $< > $@ - objs/$(CONFIG)/%.o : %.c $(E) "[C] Compiling $<" $(Q) mkdir -p `dirname $@` - $(Q) $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $< + $(Q) $(CC) $(CFLAGS) $(CPPFLAGS) -MMD -MF $(addsuffix .dep, $(basename $@)) -c -o $@ $< objs/$(CONFIG)/%.o : gens/%.pb.cc $(E) "[CXX] Compiling $<" $(Q) mkdir -p `dirname $@` - $(Q) $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -o $@ $< + $(Q) $(CXX) $(CXXFLAGS) $(CPPFLAGS) -MMD -MF $(addsuffix .dep, $(basename $@)) -c -o $@ $< objs/$(CONFIG)/src/compiler/%.o : src/compiler/%.cc $(E) "[HOSTCXX] Compiling $<" $(Q) mkdir -p `dirname $@` - $(Q) $(HOST_CXX) $(HOST_CXXFLAGS) $(HOST_CPPFLAGS) -c -o $@ $< + $(Q) $(HOST_CXX) $(HOST_CXXFLAGS) $(HOST_CPPFLAGS) -MMD -MF $(addsuffix .dep, $(basename $@)) -c -o $@ $< objs/$(CONFIG)/%.o : %.cc $(E) "[CXX] Compiling $<" $(Q) mkdir -p `dirname $@` - $(Q) $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -o $@ $< - -dep: dep_c dep_cxx - -dep_c:\ -% for lib in libs: -% if not lib.get('c++', False): - deps_lib${lib.name}\ -% endif -% endfor - - -bins_dep_c:\ -% for tgt in targets: -% if not tgt.get('c++', False): - deps_${tgt.name}\ -% endif -% endfor - - -dep_cxx:\ -% for lib in libs: -% if lib.get('c++', False): - deps_lib${lib.name}\ -% endif -% endfor - - -bins_dep_cxx:\ -% for tgt in targets: -% if tgt.get('c++', False): - deps_${tgt.name}\ -% endif -% endfor + $(Q) $(CXX) $(CXXFLAGS) $(CPPFLAGS) -MMD -MF $(addsuffix .dep, $(basename $@)) -c -o $@ $< install: install_c install_cxx @@ -558,7 +569,7 @@ install-static: install-static_c install-static_cxx install-static_c: static_c strip-static_c % for lib in libs: -% if not lib.get("c++", False): +% if lib.language == "c": % if lib.build == "all": $(E) "[INSTALL] Installing lib${lib.name}.a" $(Q) $(INSTALL) libs/$(CONFIG)/lib${lib.name}.a $(prefix)/lib/lib${lib.name}.a @@ -568,7 +579,7 @@ install-static_c: static_c strip-static_c install-static_cxx: static_cxx strip-static_cxx % for lib in libs: -% if lib.get("c++", False): +% if lib.language == "c++": % if lib.build == "all": $(E) "[INSTALL] Installing lib${lib.name}.a" $(Q) $(INSTALL) libs/$(CONFIG)/lib${lib.name}.a $(prefix)/lib/lib${lib.name}.a @@ -578,7 +589,7 @@ install-static_cxx: static_cxx strip-static_cxx install-shared_c: shared_c strip-shared_c % for lib in libs: -% if not lib.get("c++", False): +% if lib.language == "c": % if lib.build == "all": ifeq ($(SYSTEM),MINGW32) $(E) "[INSTALL] Installing ${lib.name}.$(SHARED_EXT)" @@ -602,7 +613,7 @@ endif install-shared_cxx: shared_cxx strip-shared_cxx % for lib in libs: -% if lib.get("c++", False): +% if lib.language == "c++": % if lib.build == "all": ifeq ($(SYSTEM),MINGW32) $(E) "[INSTALL] Installing ${lib.name}.$(SHARED_EXT)" @@ -624,15 +635,8 @@ ifneq ($(SYSTEM),Darwin) endif endif -clean:\ -% for lib in libs: - clean_lib${lib.name}\ -% endfor -% for tgt in targets: - clean_${tgt.name}\ -% endfor - - $(Q) $(RM) -r deps objs libs bins gens +clean: + $(Q) $(RM) -rf objs libs bins gens # The various libraries @@ -657,7 +661,7 @@ LIB${lib.name.upper()}_SRC = \\ % endfor % if "public_headers" in lib: -% if lib.get("c++", False): +% if lib.language == "c++": PUBLIC_HEADERS_CXX += \\ % else: @@ -671,11 +675,13 @@ PUBLIC_HEADERS_C += \\ % endif LIB${lib.name.upper()}_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIB${lib.name.upper()}_SRC)))) -LIB${lib.name.upper()}_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(LIB${lib.name.upper()}_SRC)))) +## If the library requires OpenSSL with ALPN, let's add some restrictions. % if lib.get('secure', True): ifeq ($(NO_SECURE),true) +# You can't build secure libraries if you don't have OpenSSL with ALPN. + libs/$(CONFIG)/lib${lib.name}.a: openssl_dep_error % if lib.build == "all": @@ -688,12 +694,20 @@ endif else -libs/$(CONFIG)/lib${lib.name}.a: $(OPENSSL_DEP) $(LIB${lib.name.upper()}_OBJS) +ifneq ($(OPENSSL_DEP),) +% for src in lib.src: +${src}: $(OPENSSL_DEP) +% endfor +endif + +libs/$(CONFIG)/lib${lib.name}.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIB${lib.name.upper()}_OBJS) +## The else here corresponds to the if secure earlier. % else: -libs/$(CONFIG)/lib${lib.name}.a: $(LIB${lib.name.upper()}_OBJS) +libs/$(CONFIG)/lib${lib.name}.a: $(ZLIB_DEP) $(LIB${lib.name.upper()}_OBJS) % endif $(E) "[AR] Creating $@" $(Q) mkdir -p `dirname $@` + $(Q) rm -f libs/$(CONFIG)/lib${lib.name}.a $(Q) $(AR) rcs libs/$(CONFIG)/lib${lib.name}.a $(LIB${lib.name.upper()}_OBJS) % if lib.get('baselib', False): % if lib.get('secure', True): @@ -706,9 +720,12 @@ libs/$(CONFIG)/lib${lib.name}.a: $(LIB${lib.name.upper()}_OBJS) $(Q) rm -rf tmp-merge % endif % endif +ifeq ($(SYSTEM),Darwin) + $(Q) ranlib libs/$(CONFIG)/lib${lib.name}.a +endif <% - if lib.get('c++', False): + if lib.language == 'c++': ld = '$(LDXX)' else: ld = '$(LD)' @@ -719,12 +736,12 @@ libs/$(CONFIG)/lib${lib.name}.a: $(LIB${lib.name.upper()}_OBJS) common = '$(LIB' + lib.name.upper() + '_OBJS) $(LDLIBS)' libs = '' - lib_deps = '' + lib_deps = ' $(ZLIB_DEP)' mingw_libs = '' - mingw_lib_deps = '' + mingw_lib_deps = ' $(ZLIB_DEP)' for dep in lib.get('deps', []): libs = libs + ' -l' + dep - lib_deps = lib_deps + 'libs/$(CONFIG)/lib' + dep + '.$(SHARED_EXT)' + lib_deps = lib_deps + ' libs/$(CONFIG)/lib' + dep + '.$(SHARED_EXT)' mingw_libs = mingw_libs + ' -l' + dep + '-imp' mingw_lib_deps = mingw_lib_deps + 'libs/$(CONFIG)/' + dep + '.$(SHARED_EXT)' @@ -732,7 +749,6 @@ libs/$(CONFIG)/lib${lib.name}.a: $(LIB${lib.name.upper()}_OBJS) common = common + ' $(LDLIBS_SECURE) $(OPENSSL_MERGE_LIBS)' lib_deps = lib_deps + ' $(OPENSSL_DEP)' mingw_lib_deps = mingw_lib_deps + ' $(OPENSSL_DEP)' - %> % if lib.build == "all": @@ -754,18 +770,18 @@ endif endif % endif +## If the lib was secure, we have to close the Makefile's if that tested +## the presence of an ALPN-capable OpenSSL. % if lib.get('secure', True): endif % endif -deps_lib${lib.name}: $(LIB${lib.name.upper()}_DEPS) - % if lib.get('secure', True): ifneq ($(NO_SECURE),true) % endif ifneq ($(NO_DEPS),true) --include $(LIB${lib.name.upper()}_DEPS) +-include $(LIB${lib.name.upper()}_OBJS:.o=.dep) endif % if lib.get('secure', True): endif @@ -782,13 +798,6 @@ objs/$(CONFIG)/${os.path.splitext(src)[0]}.o: \ % endif % endfor - -clean_lib${lib.name}: - $(E) "[CLEAN] Cleaning lib${lib.name} files" - $(Q) $(RM) $(LIB${lib.name.upper()}_OBJS) - $(Q) $(RM) $(LIB${lib.name.upper()}_DEPS) - $(Q) $(RM) libs/$(CONFIG)/lib${lib.name}.a - $(Q) $(RM) libs/$(CONFIG)/lib${lib.name}.$(SHARED_EXT) </%def> <%def name="maketarget(tgt)"> @@ -800,22 +809,33 @@ ${tgt.name.upper()}_SRC = \\ % endfor ${tgt.name.upper()}_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(${tgt.name.upper()}_SRC)))) -${tgt.name.upper()}_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(${tgt.name.upper()}_SRC)))) % if tgt.get('secure', True): ifeq ($(NO_SECURE),true) +# You can't build secure targets if you don't have OpenSSL with ALPN. + bins/$(CONFIG)/${tgt.name}: openssl_dep_error else % endif +## +## We're not trying to add a dependency on building zlib and openssl here, +## as it's already done in the libraries. We're assuming that the build +## trickles down, and that a secure target requires a secure version of +## a library. +## +## That simplifies the codegen a bit, but prevents a fully defined Makefile. +## I can live with that. +## bins/$(CONFIG)/${tgt.name}: $(${tgt.name.upper()}_OBJS)\ % for dep in tgt.deps: libs/$(CONFIG)/lib${dep}.a\ % endfor -% if tgt.get("c++", False): +% if tgt.language == "c++": +## C++ targets specificies. % if tgt.build == 'protoc': $(E) "[HOSTLD] Linking $@" $(Q) mkdir -p `dirname $@` @@ -829,6 +849,7 @@ bins/$(CONFIG)/${tgt.name}: $(${tgt.name.upper()}_OBJS)\ $(GTEST_LIB)\ % endif % else: +## C-only targets specificities. $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` $(Q) $(LD) $(LDFLAGS) $(${tgt.name.upper()}_OBJS)\ @@ -836,7 +857,7 @@ bins/$(CONFIG)/${tgt.name}: $(${tgt.name.upper()}_OBJS)\ % for dep in tgt.deps: libs/$(CONFIG)/lib${dep}.a\ % endfor -% if tgt.get("c++", False): +% if tgt.language == "c++": % if tgt.build == 'protoc': $(HOST_LDLIBSXX)\ % else: @@ -867,23 +888,17 @@ objs/$(CONFIG)/${os.path.splitext(src)[0]}.o: \ % endfor -deps_${tgt.name}: $(${tgt.name.upper()}_DEPS) +deps_${tgt.name}: $(${tgt.name.upper()}_OBJS:.o=.dep) % if tgt.get('secure', True): ifneq ($(NO_SECURE),true) % endif ifneq ($(NO_DEPS),true) --include $(${tgt.name.upper()}_DEPS) +-include $(${tgt.name.upper()}_OBJS:.o=.dep) endif % if tgt.get('secure', True): endif % endif - -clean_${tgt.name}: - $(E) "[CLEAN] Cleaning ${tgt.name} files" - $(Q) $(RM) $(${tgt.name.upper()}_OBJS) - $(Q) $(RM) $(${tgt.name.upper()}_DEPS) - $(Q) $(RM) bins/$(CONFIG)/${tgt.name} </%def> .PHONY: all strip tools \ @@ -897,12 +912,6 @@ install-static install-static_c install-static_cxx \ strip strip-shared strip-static \ strip_c strip-shared_c strip-static_c \ strip_cxx strip-shared_cxx strip-static_cxx \ -clean \ -dep_c dep_cxx bins_dep_c bins_dep_cxx\ -% for lib in libs: - deps_lib${lib.name} clean_lib${lib.name}\ -% endfor -% for tgt in targets: - deps_${tgt.name} clean_${tgt.name}\ -% endfor +dep_c dep_cxx bins_dep_c bins_dep_cxx \ +clean diff --git a/templates/tools/run_tests/tests.json.template b/templates/tools/run_tests/tests.json.template new file mode 100644 index 0000000000000000000000000000000000000000..04a5137f39d669f210ce4848da78fbb36ff6a018 --- /dev/null +++ b/templates/tools/run_tests/tests.json.template @@ -0,0 +1,9 @@ +<%! +import json +%> + +${json.dumps([{"name": tgt.name, "language": tgt.language} + for tgt in targets + if tgt.build == "test" and tgt.name[-5:] == "_test"], + sort_keys=True, indent=2)} + diff --git a/test/build/perftools.c b/test/build/perftools.c new file mode 100644 index 0000000000000000000000000000000000000000..03548b4c7ef198cc5a5b1eaa597360805c33a501 --- /dev/null +++ b/test/build/perftools.c @@ -0,0 +1,7 @@ +#include <gperftools/profiler.h> + +int main() { + ProfilerStart("/dev/null"); + ProfilerStop(); + return 0; +} diff --git a/test/core/channel/channel_stack_test.c b/test/core/channel/channel_stack_test.c index 9bc1f738bc70b6e50868d145e3ac73451a06142f..d0ea79c34eb522c95a3cc52f811abc7951baa995 100644 --- a/test/core/channel/channel_stack_test.c +++ b/test/core/channel/channel_stack_test.c @@ -76,11 +76,11 @@ static void channel_func(grpc_channel_element *elem, ++*(int *)(elem->channel_data); } -static void test_create_channel_stack() { +static void test_create_channel_stack(void) { const grpc_channel_filter filter = { - call_func, channel_func, + call_func, channel_func, - sizeof(int), call_init_func, call_destroy_func, + sizeof(int), call_init_func, call_destroy_func, sizeof(int), channel_init_func, channel_destroy_func, }; diff --git a/test/core/channel/metadata_buffer_test.c b/test/core/channel/metadata_buffer_test.c index 5604e2570592a9fbe742dc5d914b102a5fccef06..aa2399272f7a35be286c45b346c75edda7d17813 100644 --- a/test/core/channel/metadata_buffer_test.c +++ b/test/core/channel/metadata_buffer_test.c @@ -78,7 +78,7 @@ static void expect_call_op(grpc_call_element *elem, GPR_ASSERT(op->dir == GRPC_CALL_DOWN); GPR_ASSERT(op->flags == *n); GPR_ASSERT(op->done_cb == do_nothing); - GPR_ASSERT(op->user_data == (void *)(gpr_uintptr)*n); + GPR_ASSERT(op->user_data == (void *)(gpr_uintptr) * n); GPR_ASSERT(0 == gpr_slice_cmp(op->data.metadata->key->slice, key)); GPR_ASSERT(0 == gpr_slice_cmp(op->data.metadata->value->slice, value)); @@ -148,7 +148,7 @@ static void test_case(size_t key_prefix_len, size_t value_prefix_len, op.flags = i; op.data.metadata = grpc_mdelem_from_slices(mdctx, key, value); op.done_cb = do_nothing; - op.user_data = (void *)(gpr_uintptr)i; + op.user_data = (void *)(gpr_uintptr) i; grpc_metadata_buffer_queue(&buffer, &op); } diff --git a/test/core/compression/message_compress_test.c b/test/core/compression/message_compress_test.c index 583f187a23cc750eb91d91ea9539b1d7540d7072..d1e593564f4b42de7163049dfe661ba0221f440d 100644 --- a/test/core/compression/message_compress_test.c +++ b/test/core/compression/message_compress_test.c @@ -145,7 +145,7 @@ static gpr_slice create_test_value(test_value id) { return gpr_slice_from_copied_string("bad value"); } -static void test_bad_data() { +static void test_bad_data(void) { gpr_slice_buffer input; gpr_slice_buffer output; int i; diff --git a/test/core/echo/server.c b/test/core/echo/server.c index e70743af221fc5c37565697b542bf6a26e8900bf..35f118dc9b131c8bb7757b3d6523e15d698ea5ce 100644 --- a/test/core/echo/server.c +++ b/test/core/echo/server.c @@ -56,7 +56,7 @@ typedef struct { gpr_intmax bytes_read; } call_state; -static void request_call() { +static void request_call(void) { call_state *tag = gpr_malloc(sizeof(*tag)); gpr_ref_init(&tag->pending_ops, 2); tag->bytes_read = 0; @@ -124,7 +124,9 @@ int main(int argc, char **argv) { case GRPC_SERVER_RPC_NEW: if (ev->call != NULL) { /* initial ops are already started in request_call */ - grpc_call_accept(ev->call, cq, s, GRPC_WRITE_BUFFER_HINT); + grpc_call_server_accept(ev->call, cq, s); + grpc_call_server_end_initial_metadata(ev->call, + GRPC_WRITE_BUFFER_HINT); GPR_ASSERT(grpc_call_start_read(ev->call, s) == GRPC_CALL_OK); request_call(); } else { diff --git a/test/core/end2end/cq_verifier.c b/test/core/end2end/cq_verifier.c index e5b7304743f2d4fec71a708b8b8292b4df833cdc..9fa513126f6b07b190caacb144a3bec1df8556c5 100644 --- a/test/core/end2end/cq_verifier.c +++ b/test/core/end2end/cq_verifier.c @@ -223,6 +223,8 @@ static void verify_matches(expectation *e, grpc_event *ev) { GPR_ASSERT(ev->data.read == NULL); } break; + case GRPC_SERVER_SHUTDOWN: + break; case GRPC_COMPLETION_DO_NOT_USE: gpr_log(GPR_ERROR, "not implemented"); abort(); @@ -295,6 +297,8 @@ static size_t expectation_to_string(char *out, expectation *e) { len = sprintf(out, "GRPC_READ data=%s", str); gpr_free(str); return len; + case GRPC_SERVER_SHUTDOWN: + return sprintf(out, "GRPC_SERVER_SHUTDOWN"); case GRPC_COMPLETION_DO_NOT_USE: case GRPC_QUEUE_SHUTDOWN: gpr_log(GPR_ERROR, "not implemented"); @@ -487,3 +491,7 @@ void cq_expect_finished(cq_verifier *v, void *tag, ...) { finished_internal(v, tag, GRPC_STATUS__DO_NOT_USE, NULL, args); va_end(args); } + +void cq_expect_server_shutdown(cq_verifier *v, void *tag) { + add(v, GRPC_SERVER_SHUTDOWN, tag); +} diff --git a/test/core/end2end/cq_verifier.h b/test/core/end2end/cq_verifier.h index 034aefdd5c44332149dd1abb4f4fb8b4c3ead968..a1966c14c55642befd9407e095750da8890f779b 100644 --- a/test/core/end2end/cq_verifier.h +++ b/test/core/end2end/cq_verifier.h @@ -70,5 +70,6 @@ void cq_expect_finished_with_status(cq_verifier *v, void *tag, grpc_status_code status_code, const char *details, ...); void cq_expect_finished(cq_verifier *v, void *tag, ...); +void cq_expect_server_shutdown(cq_verifier *v, void *tag); #endif /* __GRPC_TEST_END2END_CQ_VERIFIER_H__ */ diff --git a/test/core/end2end/data/prod_roots_certs.c b/test/core/end2end/data/prod_roots_certs.c index 21a199ce3750213b95cb4c2657487db2f63da67c..3b66d236c368e7a7df10f8008bfd28118bb8ed74 100644 --- a/test/core/end2end/data/prod_roots_certs.c +++ b/test/core/end2end/data/prod_roots_certs.c @@ -31,7 +31,7 @@ * */ -unsigned char prod_roots_certs[] = { +const char prod_roots_certs[] = { 0x23, 0x20, 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x3a, 0x20, 0x43, 0x4e, 0x3d, 0x47, 0x54, 0x45, 0x20, 0x43, 0x79, 0x62, 0x65, 0x72, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x52, @@ -11270,5 +11270,4 @@ unsigned char prod_roots_certs[] = { 0x33, 0x50, 0x59, 0x74, 0x6c, 0x4e, 0x58, 0x4c, 0x66, 0x62, 0x51, 0x34, 0x64, 0x64, 0x49, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x45, 0x4e, 0x44, 0x20, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, - 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a}; -unsigned int prod_roots_certs_size = 134862; + 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x00}; diff --git a/test/core/end2end/data/server1_cert.c b/test/core/end2end/data/server1_cert.c index da1d36653c9f9e4d1e0b98c4988f7d6de4cd9ba9..134b9cb98e4799e91f464383e999ffd137502bcd 100644 --- a/test/core/end2end/data/server1_cert.c +++ b/test/core/end2end/data/server1_cert.c @@ -31,7 +31,7 @@ * */ -unsigned char test_server1_cert[] = { +const char test_server1_cert[] = { 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x42, 0x45, 0x47, 0x49, 0x4e, 0x20, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x4d, 0x49, 0x49, 0x43, 0x6d, 0x7a, 0x43, 0x43, @@ -112,5 +112,4 @@ unsigned char test_server1_cert[] = { 0x32, 0x77, 0x65, 0x2f, 0x4b, 0x44, 0x34, 0x6f, 0x6a, 0x66, 0x39, 0x73, 0x3d, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x45, 0x4e, 0x44, 0x20, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x2d, 0x2d, - 0x2d, 0x2d, 0x2d, 0x0a}; -unsigned int test_server1_cert_size = 964; + 0x2d, 0x2d, 0x2d, 0x0a, 0x00}; diff --git a/test/core/end2end/data/server1_key.c b/test/core/end2end/data/server1_key.c index 3540505467435b9caad8045a8ded0526e9722e10..992d3c032a9c3a4c71339b949bbeef8bf58ad8cf 100644 --- a/test/core/end2end/data/server1_key.c +++ b/test/core/end2end/data/server1_key.c @@ -31,7 +31,7 @@ * */ -unsigned char test_server1_key[] = { +const char test_server1_key[] = { 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x42, 0x45, 0x47, 0x49, 0x4e, 0x20, 0x52, 0x53, 0x41, 0x20, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x20, 0x4b, 0x45, 0x59, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x4d, 0x49, 0x49, 0x43, @@ -105,5 +105,4 @@ unsigned char test_server1_key[] = { 0x6e, 0x68, 0x66, 0x66, 0x46, 0x79, 0x65, 0x37, 0x53, 0x42, 0x58, 0x79, 0x61, 0x67, 0x3d, 0x3d, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x45, 0x4e, 0x44, 0x20, 0x52, 0x53, 0x41, 0x20, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, - 0x45, 0x20, 0x4b, 0x45, 0x59, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a}; -unsigned int test_server1_key_size = 887; + 0x45, 0x20, 0x4b, 0x45, 0x59, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x00}; diff --git a/test/core/end2end/data/ssl_test_data.h b/test/core/end2end/data/ssl_test_data.h index 6ac19945b2f734de3acf95b25f4d3b04efbd5a2d..3456ebebd4b4733e6145c51df3d8e14a227dee53 100644 --- a/test/core/end2end/data/ssl_test_data.h +++ b/test/core/end2end/data/ssl_test_data.h @@ -34,14 +34,10 @@ #ifndef __GRPC_TEST_END2END_DATA_SSL_TEST_DATA_H__ #define __GRPC_TEST_END2END_DATA_SSL_TEST_DATA_H__ -extern unsigned char test_root_cert[]; -extern unsigned int test_root_cert_size; -extern unsigned char test_server1_cert[]; -extern unsigned int test_server1_cert_size; -extern unsigned char test_server1_key[]; -extern unsigned int test_server1_key_size; +extern const char test_root_cert[]; +extern const char test_server1_cert[]; +extern const char test_server1_key[]; -extern unsigned char prod_roots_certs[]; -extern unsigned int prod_roots_certs_size; +extern const char prod_roots_certs[]; #endif /* __GRPC_TEST_END2END_DATA_SSL_TEST_DATA_H__ */ diff --git a/test/core/end2end/data/test_root_cert.c b/test/core/end2end/data/test_root_cert.c index fd01953ccbd9b4ad165cd60dbfefa6f4cbe9faa6..f358b0b79ac70133abf7c89ff5c9043031f35e58 100644 --- a/test/core/end2end/data/test_root_cert.c +++ b/test/core/end2end/data/test_root_cert.c @@ -31,7 +31,7 @@ * */ -unsigned char test_root_cert[] = { +const char test_root_cert[] = { 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x42, 0x45, 0x47, 0x49, 0x4e, 0x20, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x4d, 0x49, 0x49, 0x43, 0x49, 0x7a, 0x43, 0x43, @@ -98,5 +98,4 @@ unsigned char test_root_cert[] = { 0x31, 0x59, 0x75, 0x58, 0x32, 0x72, 0x6e, 0x65, 0x78, 0x30, 0x4a, 0x68, 0x75, 0x54, 0x51, 0x66, 0x63, 0x49, 0x3d, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x45, 0x4e, 0x44, 0x20, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, - 0x43, 0x41, 0x54, 0x45, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a}; -unsigned int test_root_cert_size = 802; + 0x43, 0x41, 0x54, 0x45, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x00}; diff --git a/test/core/end2end/dualstack_socket_test.c b/test/core/end2end/dualstack_socket_test.c index d718a314d930f68304a3f00f42df1c9852475845..4327b9129873d7eb1ab5b8354c6ef4ef962efd40 100644 --- a/test/core/end2end/dualstack_socket_test.c +++ b/test/core/end2end/dualstack_socket_test.c @@ -131,7 +131,8 @@ void test_connect(const char *server_host, const char *client_host, int port, deadline, NULL); cq_verify(v_server); - GPR_ASSERT(GRPC_CALL_OK == grpc_call_accept(s, server_cq, tag(102), 0)); + GPR_ASSERT(GRPC_CALL_OK == grpc_call_server_accept(s, server_cq, tag(102))); + GPR_ASSERT(GRPC_CALL_OK == grpc_call_server_end_initial_metadata(s, 0)); cq_expect_client_metadata_read(v_client, tag(2), NULL); cq_verify(v_client); @@ -153,8 +154,9 @@ void test_connect(const char *server_host, const char *client_host, int port, /* Check for a failed connection. */ cq_expect_invoke_accepted(v_client, tag(1), GRPC_OP_ERROR); cq_expect_client_metadata_read(v_client, tag(2), NULL); - cq_expect_finished_with_status(v_client, tag(3), GRPC_STATUS_CANCELLED, - NULL, NULL); + cq_expect_finished_with_status(v_client, tag(3), + GRPC_STATUS_DEADLINE_EXCEEDED, + "Deadline Exceeded", NULL); cq_verify(v_client); grpc_call_destroy(c); diff --git a/test/core/end2end/fixtures/chttp2_simple_ssl_fullstack.c b/test/core/end2end/fixtures/chttp2_simple_ssl_fullstack.c index 7718d30b3e6a061fcfa0115c7284c666adcdc9a9..e5cdec8ea759e0b2ecce969576adb3294429e6d1 100644 --- a/test/core/end2end/fixtures/chttp2_simple_ssl_fullstack.c +++ b/test/core/end2end/fixtures/chttp2_simple_ssl_fullstack.c @@ -98,8 +98,8 @@ void chttp2_tear_down_secure_fullstack(grpc_end2end_test_fixture *f) { static void chttp2_init_client_simple_ssl_secure_fullstack( grpc_end2end_test_fixture *f, grpc_channel_args *client_args) { - grpc_credentials *ssl_creds = grpc_ssl_credentials_create( - test_root_cert, test_root_cert_size, NULL, 0, NULL, 0); + grpc_credentials *ssl_creds = + grpc_ssl_credentials_create(test_root_cert, NULL); grpc_arg ssl_name_override = {GRPC_ARG_STRING, GRPC_SSL_TARGET_NAME_OVERRIDE_ARG, {"foo.test.google.com"}}; @@ -111,9 +111,10 @@ static void chttp2_init_client_simple_ssl_secure_fullstack( static void chttp2_init_server_simple_ssl_secure_fullstack( grpc_end2end_test_fixture *f, grpc_channel_args *server_args) { - grpc_server_credentials *ssl_creds = grpc_ssl_server_credentials_create( - NULL, 0, test_server1_key, test_server1_key_size, test_server1_cert, - test_server1_cert_size); + grpc_ssl_pem_key_cert_pair pem_cert_key_pair = {test_server1_key, + test_server1_cert}; + grpc_server_credentials *ssl_creds = + grpc_ssl_server_credentials_create(NULL, &pem_cert_key_pair, 1); chttp2_init_server_secure_fullstack(f, server_args, ssl_creds); } diff --git a/test/core/end2end/fixtures/chttp2_simple_ssl_with_oauth2_fullstack.c b/test/core/end2end/fixtures/chttp2_simple_ssl_with_oauth2_fullstack.c index bb8af88c54fb33204a1a7c71de12ec79011b068a..8bfa465696f9003b29c695e41d13d02ed3a372e8 100644 --- a/test/core/end2end/fixtures/chttp2_simple_ssl_with_oauth2_fullstack.c +++ b/test/core/end2end/fixtures/chttp2_simple_ssl_with_oauth2_fullstack.c @@ -99,8 +99,7 @@ void chttp2_tear_down_secure_fullstack(grpc_end2end_test_fixture *f) { static void chttp2_init_client_simple_ssl_with_oauth2_secure_fullstack( grpc_end2end_test_fixture *f, grpc_channel_args *client_args) { - grpc_credentials *ssl_creds = grpc_ssl_credentials_create( - test_root_cert, test_root_cert_size, NULL, 0, NULL, 0); + grpc_credentials *ssl_creds = grpc_ssl_credentials_create(test_root_cert, NULL); grpc_credentials *oauth2_creds = grpc_fake_oauth2_credentials_create("Bearer aaslkfjs424535asdf", 1); grpc_credentials *ssl_oauth2_creds = @@ -118,9 +117,10 @@ static void chttp2_init_client_simple_ssl_with_oauth2_secure_fullstack( static void chttp2_init_server_simple_ssl_secure_fullstack( grpc_end2end_test_fixture *f, grpc_channel_args *server_args) { - grpc_server_credentials *ssl_creds = grpc_ssl_server_credentials_create( - NULL, 0, test_server1_key, test_server1_key_size, test_server1_cert, - test_server1_cert_size); + grpc_ssl_pem_key_cert_pair pem_key_cert_pair = {test_server1_key, + test_server1_cert}; + grpc_server_credentials *ssl_creds = + grpc_ssl_server_credentials_create(NULL, &pem_key_cert_pair, 1); chttp2_init_server_secure_fullstack(f, server_args, ssl_creds); } diff --git a/test/core/end2end/gen_build_json.py b/test/core/end2end/gen_build_json.py index b91995bc76d6625416531b7a2bdc0f5d9dcebecc..2c4368fe767f66e500b8ec525d253c346cb00a3a 100755 --- a/test/core/end2end/gen_build_json.py +++ b/test/core/end2end/gen_build_json.py @@ -25,6 +25,7 @@ END2END_TESTS = [ 'disappearing_server', 'early_server_shutdown_finishes_inflight_calls', 'early_server_shutdown_finishes_tags', + 'graceful_server_shutdown', 'invoke_large_request', 'max_concurrent_streams', 'no_op', @@ -47,6 +48,7 @@ def main(): { 'name': 'end2end_fixture_%s' % f, 'build': 'private', + 'language': 'c', 'secure': True, 'src': ['test/core/end2end/fixtures/%s.c' % f] } @@ -54,13 +56,16 @@ def main(): { 'name': 'end2end_test_%s' % t, 'build': 'private', + 'language': 'c', 'secure': False, - 'src': ['test/core/end2end/tests/%s.c' % t] + 'src': ['test/core/end2end/tests/%s.c' % t], + 'headers': ['test/core/end2end/tests/cancel_test_helpers.h'] } for t in END2END_TESTS] + [ { 'name': 'end2end_certs', 'build': 'private', + 'language': 'c', 'src': [ "test/core/end2end/data/test_root_cert.c", "test/core/end2end/data/prod_roots_certs.c", @@ -73,6 +78,7 @@ def main(): { 'name': '%s_%s_test' % (f, t), 'build': 'test', + 'language': 'c', 'src': [], 'deps': [ 'end2end_fixture_%s' % f, diff --git a/test/core/end2end/no_server_test.c b/test/core/end2end/no_server_test.c index ba6349c109b470d8bda94f83fe09be03ec7ac015..b9660f14b3007fd6fb4217f87fd275e5596a1130 100644 --- a/test/core/end2end/no_server_test.c +++ b/test/core/end2end/no_server_test.c @@ -62,8 +62,8 @@ int main(int argc, char **argv) { /* verify that all tags get completed */ cq_expect_invoke_accepted(cqv, tag(1), GRPC_OP_ERROR); cq_expect_client_metadata_read(cqv, tag(2), NULL); - cq_expect_finished_with_status(cqv, tag(3), GRPC_STATUS_CANCELLED, NULL, - NULL); + cq_expect_finished_with_status(cqv, tag(3), GRPC_STATUS_DEADLINE_EXCEEDED, + "Deadline Exceeded", NULL); cq_verify(cqv); grpc_completion_queue_shutdown(cq); diff --git a/test/core/end2end/tests/cancel_after_accept.c b/test/core/end2end/tests/cancel_after_accept.c index 5339161f02c2197a7a12ea5eceb1acf26255b732..cfbb4796aaee1d38365fc6a64f877e0010899632 100644 --- a/test/core/end2end/tests/cancel_after_accept.c +++ b/test/core/end2end/tests/cancel_after_accept.c @@ -43,14 +43,7 @@ #include <grpc/support/time.h> #include <grpc/support/useful.h> #include "test/core/end2end/cq_verifier.h" - -/* allow cancellation by either grpc_call_cancel, or by wait_for_deadline (which - * does nothing) */ -typedef grpc_call_error (*canceller)(grpc_call *call); - -static grpc_call_error wait_for_deadline(grpc_call *call) { - return GRPC_CALL_OK; -} +#include "test/core/end2end/tests/cancel_test_helpers.h" enum { TIMEOUT = 200000 }; @@ -72,7 +65,7 @@ static gpr_timespec n_seconds_time(int n) { return gpr_time_add(gpr_now(), gpr_time_from_micros(GPR_US_PER_SEC * n)); } -static gpr_timespec five_seconds_time() { return n_seconds_time(5); } +static gpr_timespec five_seconds_time(void) { return n_seconds_time(5); } static void drain_cq(grpc_completion_queue *cq) { grpc_event *ev; @@ -112,7 +105,7 @@ static void end_test(grpc_end2end_test_fixture *f) { /* Cancel after accept, no payload */ static void test_cancel_after_accept(grpc_end2end_test_config config, - canceller call_cancel) { + cancellation_mode mode) { grpc_call *c; grpc_call *s; grpc_end2end_test_fixture f = begin_test(config, __FUNCTION__, NULL, NULL); @@ -133,14 +126,15 @@ static void test_cancel_after_accept(grpc_end2end_test_config config, deadline, NULL); cq_verify(v_server); - GPR_ASSERT(GRPC_CALL_OK == grpc_call_accept(s, f.server_cq, tag(102), 0)); + GPR_ASSERT(GRPC_CALL_OK == grpc_call_server_accept(s, f.server_cq, tag(102))); + GPR_ASSERT(GRPC_CALL_OK == grpc_call_server_end_initial_metadata(s, 0)); cq_expect_client_metadata_read(v_client, tag(2), NULL); cq_verify(v_client); - GPR_ASSERT(GRPC_CALL_OK == call_cancel(c)); + GPR_ASSERT(GRPC_CALL_OK == mode.initiate_cancel(c)); - cq_expect_finished_with_status(v_client, tag(3), GRPC_STATUS_CANCELLED, NULL, - NULL); + cq_expect_finished_with_status(v_client, tag(3), mode.expect_status, + mode.expect_details, NULL); cq_verify(v_client); cq_expect_finished_with_status(v_server, tag(102), GRPC_STATUS_CANCELLED, @@ -158,9 +152,8 @@ static void test_cancel_after_accept(grpc_end2end_test_config config, void grpc_end2end_tests(grpc_end2end_test_config config) { int i; - canceller cancellers[2] = {grpc_call_cancel, wait_for_deadline}; - for (i = 0; i < GPR_ARRAY_SIZE(cancellers); i++) { - test_cancel_after_accept(config, cancellers[i]); + for (i = 0; i < GPR_ARRAY_SIZE(cancellation_modes); i++) { + test_cancel_after_accept(config, cancellation_modes[i]); } } diff --git a/test/core/end2end/tests/cancel_after_accept_and_writes_closed.c b/test/core/end2end/tests/cancel_after_accept_and_writes_closed.c index e20b0ec0b246f8f98fc203f379ce84c4868b625e..74670bdc91672e416fb556e3df9f97f4d89e2d57 100644 --- a/test/core/end2end/tests/cancel_after_accept_and_writes_closed.c +++ b/test/core/end2end/tests/cancel_after_accept_and_writes_closed.c @@ -43,14 +43,7 @@ #include <grpc/support/time.h> #include <grpc/support/useful.h> #include "test/core/end2end/cq_verifier.h" - -/* allow cancellation by either grpc_call_cancel, or by wait_for_deadline (which - * does nothing) */ -typedef grpc_call_error (*canceller)(grpc_call *call); - -static grpc_call_error wait_for_deadline(grpc_call *call) { - return GRPC_CALL_OK; -} +#include "test/core/end2end/tests/cancel_test_helpers.h" enum { TIMEOUT = 200000 }; @@ -72,7 +65,7 @@ static gpr_timespec n_seconds_time(int n) { return gpr_time_add(gpr_now(), gpr_time_from_micros(GPR_US_PER_SEC * n)); } -static gpr_timespec five_seconds_time() { return n_seconds_time(5); } +static gpr_timespec five_seconds_time(void) { return n_seconds_time(5); } static void drain_cq(grpc_completion_queue *cq) { grpc_event *ev; @@ -112,7 +105,7 @@ static void end_test(grpc_end2end_test_fixture *f) { /* Cancel after accept with a writes closed, no payload */ static void test_cancel_after_accept_and_writes_closed( - grpc_end2end_test_config config, canceller call_cancel) { + grpc_end2end_test_config config, cancellation_mode mode) { grpc_call *c; grpc_call *s; grpc_end2end_test_fixture f = begin_test(config, __FUNCTION__, NULL, NULL); @@ -133,7 +126,8 @@ static void test_cancel_after_accept_and_writes_closed( deadline, NULL); cq_verify(v_server); - GPR_ASSERT(GRPC_CALL_OK == grpc_call_accept(s, f.server_cq, tag(102), 0)); + GPR_ASSERT(GRPC_CALL_OK == grpc_call_server_accept(s, f.server_cq, tag(102))); + GPR_ASSERT(GRPC_CALL_OK == grpc_call_server_end_initial_metadata(s, 0)); cq_expect_client_metadata_read(v_client, tag(2), NULL); cq_verify(v_client); @@ -145,10 +139,10 @@ static void test_cancel_after_accept_and_writes_closed( cq_expect_empty_read(v_server, tag(101)); cq_verify(v_server); - GPR_ASSERT(GRPC_CALL_OK == call_cancel(c)); + GPR_ASSERT(GRPC_CALL_OK == mode.initiate_cancel(c)); - cq_expect_finished_with_status(v_client, tag(3), GRPC_STATUS_CANCELLED, NULL, - NULL); + cq_expect_finished_with_status(v_client, tag(3), mode.expect_status, + mode.expect_details, NULL); cq_verify(v_client); cq_expect_finished_with_status(v_server, tag(102), GRPC_STATUS_CANCELLED, @@ -166,9 +160,8 @@ static void test_cancel_after_accept_and_writes_closed( void grpc_end2end_tests(grpc_end2end_test_config config) { int i; - canceller cancellers[2] = {grpc_call_cancel, wait_for_deadline}; - for (i = 0; i < GPR_ARRAY_SIZE(cancellers); i++) { - test_cancel_after_accept_and_writes_closed(config, cancellers[i]); + for (i = 0; i < GPR_ARRAY_SIZE(cancellation_modes); i++) { + test_cancel_after_accept_and_writes_closed(config, cancellation_modes[i]); } } diff --git a/test/core/end2end/tests/cancel_after_invoke.c b/test/core/end2end/tests/cancel_after_invoke.c index 4fab9f7effad10189cb4ac9d700d52e831a4922f..d4cb5e4f133f021fe9c76f238d792fb740c5be70 100644 --- a/test/core/end2end/tests/cancel_after_invoke.c +++ b/test/core/end2end/tests/cancel_after_invoke.c @@ -43,14 +43,7 @@ #include <grpc/support/time.h> #include <grpc/support/useful.h> #include "test/core/end2end/cq_verifier.h" - -/* allow cancellation by either grpc_call_cancel, or by wait_for_deadline (which - * does nothing) */ -typedef grpc_call_error (*canceller)(grpc_call *call); - -static grpc_call_error wait_for_deadline(grpc_call *call) { - return GRPC_CALL_OK; -} +#include "test/core/end2end/tests/cancel_test_helpers.h" enum { TIMEOUT = 200000 }; @@ -72,7 +65,7 @@ static gpr_timespec n_seconds_time(int n) { return gpr_time_add(gpr_now(), gpr_time_from_micros(GPR_US_PER_SEC * n)); } -static gpr_timespec five_seconds_time() { return n_seconds_time(5); } +static gpr_timespec five_seconds_time(void) { return n_seconds_time(5); } static void drain_cq(grpc_completion_queue *cq) { grpc_event *ev; @@ -112,7 +105,7 @@ static void end_test(grpc_end2end_test_fixture *f) { /* Cancel after invoke, no payload */ static void test_cancel_after_invoke(grpc_end2end_test_config config, - canceller call_cancel) { + cancellation_mode mode) { grpc_call *c; grpc_end2end_test_fixture f = begin_test(config, __FUNCTION__, NULL, NULL); gpr_timespec deadline = five_seconds_time(); @@ -126,11 +119,11 @@ static void test_cancel_after_invoke(grpc_end2end_test_config config, cq_expect_invoke_accepted(v_client, tag(1), GRPC_OP_OK); cq_verify(v_client); - GPR_ASSERT(GRPC_CALL_OK == call_cancel(c)); + GPR_ASSERT(GRPC_CALL_OK == mode.initiate_cancel(c)); cq_expect_client_metadata_read(v_client, tag(2), NULL); - cq_expect_finished_with_status(v_client, tag(3), GRPC_STATUS_CANCELLED, NULL, - NULL); + cq_expect_finished_with_status(v_client, tag(3), mode.expect_status, + mode.expect_details, NULL); cq_verify(v_client); grpc_call_destroy(c); @@ -142,9 +135,8 @@ static void test_cancel_after_invoke(grpc_end2end_test_config config, void grpc_end2end_tests(grpc_end2end_test_config config) { int i; - canceller cancellers[2] = {grpc_call_cancel, wait_for_deadline}; - for (i = 0; i < GPR_ARRAY_SIZE(cancellers); i++) { - test_cancel_after_invoke(config, cancellers[i]); + for (i = 0; i < GPR_ARRAY_SIZE(cancellation_modes); i++) { + test_cancel_after_invoke(config, cancellation_modes[i]); } } diff --git a/test/core/end2end/tests/cancel_before_invoke.c b/test/core/end2end/tests/cancel_before_invoke.c index 2d8d465b249312f9b82c5a93a97f7f6e25fe67ee..f799cba71d6180f9c32ca19a5b5f9bcaae360582 100644 --- a/test/core/end2end/tests/cancel_before_invoke.c +++ b/test/core/end2end/tests/cancel_before_invoke.c @@ -44,10 +44,6 @@ #include <grpc/support/useful.h> #include "test/core/end2end/cq_verifier.h" -/* allow cancellation by either grpc_call_cancel, or by wait_for_deadline (which - * does nothing) */ -typedef grpc_call_error (*canceller)(grpc_call *call); - enum { TIMEOUT = 200000 }; static void *tag(gpr_intptr t) { return (void *)t; } @@ -68,7 +64,7 @@ static gpr_timespec n_seconds_time(int n) { return gpr_time_add(gpr_now(), gpr_time_from_micros(GPR_US_PER_SEC * n)); } -static gpr_timespec five_seconds_time() { return n_seconds_time(5); } +static gpr_timespec five_seconds_time(void) { return n_seconds_time(5); } static void drain_cq(grpc_completion_queue *cq) { grpc_event *ev; diff --git a/test/core/end2end/tests/cancel_in_a_vacuum.c b/test/core/end2end/tests/cancel_in_a_vacuum.c index 1a4dfa7b73f6a83142296da325b47d1164408bb0..e4f9deecd1b948378d40fcbf872c84e4f2a68e8d 100644 --- a/test/core/end2end/tests/cancel_in_a_vacuum.c +++ b/test/core/end2end/tests/cancel_in_a_vacuum.c @@ -43,14 +43,7 @@ #include <grpc/support/time.h> #include <grpc/support/useful.h> #include "test/core/end2end/cq_verifier.h" - -/* allow cancellation by either grpc_call_cancel, or by wait_for_deadline (which - * does nothing) */ -typedef grpc_call_error (*canceller)(grpc_call *call); - -static grpc_call_error wait_for_deadline(grpc_call *call) { - return GRPC_CALL_OK; -} +#include "test/core/end2end/tests/cancel_test_helpers.h" enum { TIMEOUT = 200000 }; @@ -70,7 +63,7 @@ static gpr_timespec n_seconds_time(int n) { return gpr_time_add(gpr_now(), gpr_time_from_micros(GPR_US_PER_SEC * n)); } -static gpr_timespec five_seconds_time() { return n_seconds_time(5); } +static gpr_timespec five_seconds_time(void) { return n_seconds_time(5); } static void drain_cq(grpc_completion_queue *cq) { grpc_event *ev; @@ -110,7 +103,7 @@ static void end_test(grpc_end2end_test_fixture *f) { /* Cancel and do nothing */ static void test_cancel_in_a_vacuum(grpc_end2end_test_config config, - canceller call_cancel) { + cancellation_mode mode) { grpc_call *c; grpc_end2end_test_fixture f = begin_test(config, __FUNCTION__, NULL, NULL); gpr_timespec deadline = five_seconds_time(); @@ -119,7 +112,7 @@ static void test_cancel_in_a_vacuum(grpc_end2end_test_config config, c = grpc_channel_create_call(f.client, "/foo", "test.google.com", deadline); GPR_ASSERT(c); - GPR_ASSERT(GRPC_CALL_OK == call_cancel(c)); + GPR_ASSERT(GRPC_CALL_OK == mode.initiate_cancel(c)); grpc_call_destroy(c); @@ -130,9 +123,8 @@ static void test_cancel_in_a_vacuum(grpc_end2end_test_config config, void grpc_end2end_tests(grpc_end2end_test_config config) { int i; - canceller cancellers[2] = {grpc_call_cancel, wait_for_deadline}; - for (i = 0; i < GPR_ARRAY_SIZE(cancellers); i++) { - test_cancel_in_a_vacuum(config, cancellers[i]); + for (i = 0; i < GPR_ARRAY_SIZE(cancellation_modes); i++) { + test_cancel_in_a_vacuum(config, cancellation_modes[i]); } } diff --git a/test/core/end2end/tests/cancel_test_helpers.h b/test/core/end2end/tests/cancel_test_helpers.h new file mode 100644 index 0000000000000000000000000000000000000000..bc6bfa94248903a760f0cf267fb4b0fa3df56fdb --- /dev/null +++ b/test/core/end2end/tests/cancel_test_helpers.h @@ -0,0 +1,52 @@ +/* + * + * Copyright 2014, 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_TEST_END2END_TESTS_CANCEL_TEST_HELPERS_H__ +#define __GRPC_TEST_END2END_TESTS_CANCEL_TEST_HELPERS_H__ + +typedef struct { + grpc_call_error (*initiate_cancel)(grpc_call *call); + grpc_status_code expect_status; + const char *expect_details; +} cancellation_mode; + +static grpc_call_error wait_for_deadline(grpc_call *call) { + return GRPC_CALL_OK; +} + +static const cancellation_mode cancellation_modes[] = { + {grpc_call_cancel, GRPC_STATUS_CANCELLED, NULL}, + {wait_for_deadline, GRPC_STATUS_DEADLINE_EXCEEDED, "Deadline Exceeded"}, +}; + +#endif diff --git a/test/core/end2end/tests/census_simple_request.c b/test/core/end2end/tests/census_simple_request.c index 64c0d12ca4a112ec382085f29d128c505b869e3d..baeed5cb46f9a387043fd1be9b51f7eac7f14baa 100644 --- a/test/core/end2end/tests/census_simple_request.c +++ b/test/core/end2end/tests/census_simple_request.c @@ -122,7 +122,8 @@ static void test_body(grpc_end2end_test_fixture f) { deadline, NULL); cq_verify(v_server); - GPR_ASSERT(GRPC_CALL_OK == grpc_call_accept(s, f.server_cq, tag(102), 0)); + GPR_ASSERT(GRPC_CALL_OK == grpc_call_server_accept(s, f.server_cq, tag(102))); + GPR_ASSERT(GRPC_CALL_OK == grpc_call_server_end_initial_metadata(s, 0)); cq_expect_client_metadata_read(v_client, tag(2), NULL); cq_verify(v_client); diff --git a/test/core/end2end/tests/disappearing_server.c b/test/core/end2end/tests/disappearing_server.c index c421798fc76ffa2791649273cfbbeb167d81c02e..b27a356eaaa081d4cc16b92dfc6f4ba121ce833a 100644 --- a/test/core/end2end/tests/disappearing_server.c +++ b/test/core/end2end/tests/disappearing_server.c @@ -52,7 +52,7 @@ static gpr_timespec n_seconds_time(int n) { return gpr_time_add(gpr_now(), gpr_time_from_micros(GPR_US_PER_SEC * n)); } -static gpr_timespec five_seconds_time() { return n_seconds_time(5); } +static gpr_timespec five_seconds_time(void) { return n_seconds_time(5); } static void drain_cq(grpc_completion_queue *cq) { grpc_event *ev; @@ -115,7 +115,9 @@ static void do_request_and_shutdown_server(grpc_end2end_test_fixture *f, deadline, NULL); cq_verify(v_server); - GPR_ASSERT(GRPC_CALL_OK == grpc_call_accept(s, f->server_cq, tag(102), 0)); + GPR_ASSERT(GRPC_CALL_OK == + grpc_call_server_accept(s, f->server_cq, tag(102))); + GPR_ASSERT(GRPC_CALL_OK == grpc_call_server_end_initial_metadata(s, 0)); cq_expect_client_metadata_read(v_client, tag(2), NULL); cq_verify(v_client); diff --git a/test/core/end2end/tests/early_server_shutdown_finishes_inflight_calls.c b/test/core/end2end/tests/early_server_shutdown_finishes_inflight_calls.c index 3855a7a3de4d4987102a3f5db0f68690b263d1a0..6ed0e4e106b00d9a5f5ef16c780d10f47faf6717 100644 --- a/test/core/end2end/tests/early_server_shutdown_finishes_inflight_calls.c +++ b/test/core/end2end/tests/early_server_shutdown_finishes_inflight_calls.c @@ -64,7 +64,7 @@ static gpr_timespec n_seconds_time(int n) { return gpr_time_add(gpr_now(), gpr_time_from_micros(GPR_US_PER_SEC * n)); } -static gpr_timespec five_seconds_time() { return n_seconds_time(5); } +static gpr_timespec five_seconds_time(void) { return n_seconds_time(5); } static void drain_cq(grpc_completion_queue *cq) { grpc_event *ev; @@ -128,7 +128,8 @@ static void test_early_server_shutdown_finishes_inflight_calls( deadline, NULL); cq_verify(v_server); - GPR_ASSERT(GRPC_CALL_OK == grpc_call_accept(s, f.server_cq, tag(102), 0)); + GPR_ASSERT(GRPC_CALL_OK == grpc_call_server_accept(s, f.server_cq, tag(102))); + GPR_ASSERT(GRPC_CALL_OK == grpc_call_server_end_initial_metadata(s, 0)); cq_expect_client_metadata_read(v_client, tag(2), NULL); cq_verify(v_client); diff --git a/test/core/end2end/tests/early_server_shutdown_finishes_tags.c b/test/core/end2end/tests/early_server_shutdown_finishes_tags.c index eb3eb7c07af802755499e01d802ab1f812357cdb..88f735c8e0a12851021abd365c94efc318385c63 100644 --- a/test/core/end2end/tests/early_server_shutdown_finishes_tags.c +++ b/test/core/end2end/tests/early_server_shutdown_finishes_tags.c @@ -64,7 +64,7 @@ static gpr_timespec n_seconds_time(int n) { return gpr_time_add(gpr_now(), gpr_time_from_micros(GPR_US_PER_SEC * n)); } -static gpr_timespec five_seconds_time() { return n_seconds_time(5); } +static gpr_timespec five_seconds_time(void) { return n_seconds_time(5); } static void drain_cq(grpc_completion_queue *cq) { grpc_event *ev; diff --git a/test/core/end2end/tests/graceful_server_shutdown.c b/test/core/end2end/tests/graceful_server_shutdown.c new file mode 100644 index 0000000000000000000000000000000000000000..84ad4af119163b2e20428c6531caa25b0080e481 --- /dev/null +++ b/test/core/end2end/tests/graceful_server_shutdown.c @@ -0,0 +1,160 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "test/core/end2end/end2end_tests.h" + +#include <stdio.h> +#include <string.h> +#include <unistd.h> + +#include <grpc/byte_buffer.h> +#include <grpc/support/alloc.h> +#include <grpc/support/log.h> +#include <grpc/support/time.h> +#include <grpc/support/useful.h> +#include "test/core/end2end/cq_verifier.h" + +enum { TIMEOUT = 200000 }; + +static void *tag(gpr_intptr t) { return (void *)t; } + +static grpc_end2end_test_fixture begin_test(grpc_end2end_test_config config, + const char *test_name, + grpc_channel_args *client_args, + grpc_channel_args *server_args) { + grpc_end2end_test_fixture f; + gpr_log(GPR_INFO, "%s/%s", test_name, config.name); + f = config.create_fixture(client_args, server_args); + config.init_client(&f, client_args); + config.init_server(&f, server_args); + return f; +} + +static gpr_timespec n_seconds_time(int n) { + return gpr_time_add(gpr_now(), gpr_time_from_micros(GPR_US_PER_SEC * n)); +} + +static gpr_timespec five_seconds_time(void) { return n_seconds_time(5); } + +static void drain_cq(grpc_completion_queue *cq) { + grpc_event *ev; + grpc_completion_type type; + do { + ev = grpc_completion_queue_next(cq, five_seconds_time()); + GPR_ASSERT(ev); + type = ev->type; + grpc_event_finish(ev); + } while (type != GRPC_QUEUE_SHUTDOWN); +} + +static void shutdown_server(grpc_end2end_test_fixture *f) { + if (!f->server) return; + grpc_server_destroy(f->server); + f->server = NULL; +} + +static void shutdown_client(grpc_end2end_test_fixture *f) { + if (!f->client) return; + grpc_channel_destroy(f->client); + f->client = NULL; +} + +static void end_test(grpc_end2end_test_fixture *f) { + shutdown_server(f); + shutdown_client(f); + + grpc_completion_queue_shutdown(f->server_cq); + drain_cq(f->server_cq); + grpc_completion_queue_destroy(f->server_cq); + grpc_completion_queue_shutdown(f->client_cq); + drain_cq(f->client_cq); + grpc_completion_queue_destroy(f->client_cq); +} + +static void test_early_server_shutdown_finishes_inflight_calls( + grpc_end2end_test_config config) { + grpc_end2end_test_fixture f = begin_test(config, __FUNCTION__, NULL, NULL); + grpc_call *c; + grpc_call *s; + gpr_timespec deadline = five_seconds_time(); + cq_verifier *v_client = cq_verifier_create(f.client_cq); + cq_verifier *v_server = cq_verifier_create(f.server_cq); + + c = grpc_channel_create_call(f.client, "/foo", "test.google.com", deadline); + GPR_ASSERT(c); + + GPR_ASSERT(GRPC_CALL_OK == + grpc_call_start_invoke(c, f.client_cq, tag(1), tag(2), tag(3), 0)); + cq_expect_invoke_accepted(v_client, tag(1), GRPC_OP_OK); + cq_verify(v_client); + + GPR_ASSERT(GRPC_CALL_OK == grpc_call_writes_done(c, tag(4))); + cq_expect_finish_accepted(v_client, tag(4), GRPC_OP_OK); + cq_verify(v_client); + + GPR_ASSERT(GRPC_CALL_OK == grpc_server_request_call(f.server, tag(100))); + cq_expect_server_rpc_new(v_server, &s, tag(100), "/foo", "test.google.com", + deadline, NULL); + cq_verify(v_server); + + GPR_ASSERT(GRPC_CALL_OK == grpc_call_server_accept(s, f.server_cq, tag(102))); + GPR_ASSERT(GRPC_CALL_OK == grpc_call_server_end_initial_metadata(s, 0)); + cq_expect_client_metadata_read(v_client, tag(2), NULL); + cq_verify(v_client); + + /* shutdown the server */ + grpc_server_shutdown_and_notify(f.server, tag(0xdead)); + cq_verify_empty(v_server); + + grpc_call_start_write_status(s, GRPC_STATUS_OK, NULL, tag(103)); + grpc_call_destroy(s); + cq_expect_finish_accepted(v_server, tag(103), GRPC_OP_OK); + cq_expect_finished(v_server, tag(102), NULL); + cq_expect_server_shutdown(v_server, tag(0xdead)); + cq_verify(v_server); + + cq_expect_finished_with_status(v_client, tag(3), GRPC_STATUS_OK, NULL, NULL); + cq_verify(v_client); + + grpc_call_destroy(c); + + cq_verifier_destroy(v_client); + cq_verifier_destroy(v_server); + + end_test(&f); + config.tear_down_data(&f); +} + +void grpc_end2end_tests(grpc_end2end_test_config config) { + test_early_server_shutdown_finishes_inflight_calls(config); +} diff --git a/test/core/end2end/tests/invoke_large_request.c b/test/core/end2end/tests/invoke_large_request.c index bad86fb9dcd89b62fe373b452bc3ad86b4ddeedd..fc461250d13ea3627b1fe2312cacea0416cdd3d0 100644 --- a/test/core/end2end/tests/invoke_large_request.c +++ b/test/core/end2end/tests/invoke_large_request.c @@ -100,7 +100,7 @@ static void end_test(grpc_end2end_test_fixture *f) { grpc_completion_queue_destroy(f->client_cq); } -static gpr_slice large_slice() { +static gpr_slice large_slice(void) { gpr_slice slice = gpr_slice_malloc(1000000); memset(GPR_SLICE_START_PTR(slice), 0xab, GPR_SLICE_LENGTH(slice)); return slice; @@ -143,7 +143,8 @@ static void test_invoke_large_request(grpc_end2end_test_config config) { deadline, NULL); cq_verify(v_server); - grpc_call_accept(s, f.server_cq, tag(102), 0); + GPR_ASSERT(GRPC_CALL_OK == grpc_call_server_accept(s, f.server_cq, tag(102))); + GPR_ASSERT(GRPC_CALL_OK == grpc_call_server_end_initial_metadata(s, 0)); cq_expect_client_metadata_read(v_client, tag(2), NULL); cq_verify(v_client); diff --git a/test/core/end2end/tests/max_concurrent_streams.c b/test/core/end2end/tests/max_concurrent_streams.c index a418d1b15f3421906874a30e8c95765601180f7d..1db32b1de9ce12c9edbbe2b159d5a48e23c5b31c 100644 --- a/test/core/end2end/tests/max_concurrent_streams.c +++ b/test/core/end2end/tests/max_concurrent_streams.c @@ -64,7 +64,7 @@ static gpr_timespec n_seconds_time(int n) { return gpr_time_add(gpr_now(), gpr_time_from_micros(GPR_US_PER_SEC * n)); } -static gpr_timespec five_seconds_time() { return n_seconds_time(5); } +static gpr_timespec five_seconds_time(void) { return n_seconds_time(5); } static void drain_cq(grpc_completion_queue *cq) { grpc_event *ev; @@ -126,7 +126,8 @@ static void simple_request_body(grpc_end2end_test_fixture f) { deadline, NULL); cq_verify(v_server); - GPR_ASSERT(GRPC_CALL_OK == grpc_call_accept(s, f.server_cq, tag(102), 0)); + GPR_ASSERT(GRPC_CALL_OK == grpc_call_server_accept(s, f.server_cq, tag(102))); + GPR_ASSERT(GRPC_CALL_OK == grpc_call_server_end_initial_metadata(s, 0)); cq_expect_client_metadata_read(v_client, tag(2), NULL); cq_verify(v_client); @@ -202,7 +203,7 @@ static void test_max_concurrent_streams(grpc_end2end_test_config config) { GPR_ASSERT(ev->data.invoke_accepted == GRPC_OP_OK); /* The /alpha or /beta calls started above could be invoked (but NOT both); * check this here */ - live_call = (int)(gpr_intptr)ev->tag; + live_call = (int)(gpr_intptr) ev->tag; live_call_obj = live_call == 300 ? c1 : c2; grpc_event_finish(ev); @@ -216,7 +217,9 @@ static void test_max_concurrent_streams(grpc_end2end_test_config config) { "test.google.com", deadline, NULL); cq_verify(v_server); - GPR_ASSERT(GRPC_CALL_OK == grpc_call_accept(s1, f.server_cq, tag(102), 0)); + GPR_ASSERT(GRPC_CALL_OK == + grpc_call_server_accept(s1, f.server_cq, tag(102))); + GPR_ASSERT(GRPC_CALL_OK == grpc_call_server_end_initial_metadata(s1, 0)); cq_expect_client_metadata_read(v_client, tag(live_call + 1), NULL); cq_verify(v_client); @@ -246,7 +249,9 @@ static void test_max_concurrent_streams(grpc_end2end_test_config config) { "test.google.com", deadline, NULL); cq_verify(v_server); - GPR_ASSERT(GRPC_CALL_OK == grpc_call_accept(s2, f.server_cq, tag(202), 0)); + GPR_ASSERT(GRPC_CALL_OK == + grpc_call_server_accept(s2, f.server_cq, tag(202))); + GPR_ASSERT(GRPC_CALL_OK == grpc_call_server_end_initial_metadata(s2, 0)); cq_expect_client_metadata_read(v_client, tag(live_call + 1), NULL); cq_verify(v_client); diff --git a/test/core/end2end/tests/no_op.c b/test/core/end2end/tests/no_op.c index 4039f2baf316ed34781280577dda4a7ec589cc24..bd4ff06701e99301017ea74c0108c95bdc440663 100644 --- a/test/core/end2end/tests/no_op.c +++ b/test/core/end2end/tests/no_op.c @@ -62,7 +62,7 @@ static gpr_timespec n_seconds_time(int n) { return gpr_time_add(gpr_now(), gpr_time_from_micros(GPR_US_PER_SEC * n)); } -static gpr_timespec five_seconds_time() { return n_seconds_time(5); } +static gpr_timespec five_seconds_time(void) { return n_seconds_time(5); } static void drain_cq(grpc_completion_queue *cq) { grpc_event *ev; diff --git a/test/core/end2end/tests/ping_pong_streaming.c b/test/core/end2end/tests/ping_pong_streaming.c index 02a05e8e0c7897b245a156b7751408f0ddaec995..03d549a7b44c3fdd6661d86342435adb74bb2c5f 100644 --- a/test/core/end2end/tests/ping_pong_streaming.c +++ b/test/core/end2end/tests/ping_pong_streaming.c @@ -64,7 +64,7 @@ static gpr_timespec n_seconds_time(int n) { return gpr_time_add(gpr_now(), gpr_time_from_micros(GPR_US_PER_SEC * n)); } -static gpr_timespec five_seconds_time() { return n_seconds_time(5); } +static gpr_timespec five_seconds_time(void) { return n_seconds_time(5); } static void drain_cq(grpc_completion_queue *cq) { grpc_event *ev; @@ -130,7 +130,8 @@ static void test_pingpong_streaming(grpc_end2end_test_config config, cq_expect_server_rpc_new(v_server, &s, tag(100), "/foo", "test.google.com", deadline, NULL); cq_verify(v_server); - grpc_call_accept(s, f.server_cq, tag(102), 0); + GPR_ASSERT(GRPC_CALL_OK == grpc_call_server_accept(s, f.server_cq, tag(102))); + GPR_ASSERT(GRPC_CALL_OK == grpc_call_server_end_initial_metadata(s, 0)); cq_expect_client_metadata_read(v_client, tag(2), NULL); cq_verify(v_client); diff --git a/test/core/end2end/tests/request_response_with_binary_metadata_and_payload.c b/test/core/end2end/tests/request_response_with_binary_metadata_and_payload.c index 8a0eea8072f1990b5ff1e3eb1e5b06a010d2421f..f58bf77dfd92e1bc6dd1186e717a404a536e3064 100644 --- a/test/core/end2end/tests/request_response_with_binary_metadata_and_payload.c +++ b/test/core/end2end/tests/request_response_with_binary_metadata_and_payload.c @@ -64,7 +64,7 @@ static gpr_timespec n_seconds_time(int n) { return gpr_time_add(gpr_now(), gpr_time_from_micros(GPR_US_PER_SEC * n)); } -static gpr_timespec five_seconds_time() { return n_seconds_time(5); } +static gpr_timespec five_seconds_time(void) { return n_seconds_time(5); } static void drain_cq(grpc_completion_queue *cq) { grpc_event *ev; diff --git a/test/core/end2end/tests/request_response_with_metadata_and_payload.c b/test/core/end2end/tests/request_response_with_metadata_and_payload.c index eb528dd3083469907dda40931c39c0642b1afaac..09923b2fc5babbef67a25f0b68231ae8ececd10d 100644 --- a/test/core/end2end/tests/request_response_with_metadata_and_payload.c +++ b/test/core/end2end/tests/request_response_with_metadata_and_payload.c @@ -64,7 +64,7 @@ static gpr_timespec n_seconds_time(int n) { return gpr_time_add(gpr_now(), gpr_time_from_micros(GPR_US_PER_SEC * n)); } -static gpr_timespec five_seconds_time() { return n_seconds_time(5); } +static gpr_timespec five_seconds_time(void) { return n_seconds_time(5); } static void drain_cq(grpc_completion_queue *cq) { grpc_event *ev; diff --git a/test/core/end2end/tests/request_response_with_payload.c b/test/core/end2end/tests/request_response_with_payload.c index deb61a7a8b934fe5ec529bca1490dbaae1fc0d73..be65bf1567db458444897af3e8381b85727b5d6f 100644 --- a/test/core/end2end/tests/request_response_with_payload.c +++ b/test/core/end2end/tests/request_response_with_payload.c @@ -64,7 +64,7 @@ static gpr_timespec n_seconds_time(int n) { return gpr_time_add(gpr_now(), gpr_time_from_micros(GPR_US_PER_SEC * n)); } -static gpr_timespec five_seconds_time() { return n_seconds_time(5); } +static gpr_timespec five_seconds_time(void) { return n_seconds_time(5); } static void drain_cq(grpc_completion_queue *cq) { grpc_event *ev; @@ -141,7 +141,8 @@ static void request_response_with_payload(grpc_end2end_test_fixture f) { deadline, NULL); cq_verify(v_server); - grpc_call_accept(s, f.server_cq, tag(102), 0); + GPR_ASSERT(GRPC_CALL_OK == grpc_call_server_accept(s, f.server_cq, tag(102))); + GPR_ASSERT(GRPC_CALL_OK == grpc_call_server_end_initial_metadata(s, 0)); cq_expect_client_metadata_read(v_client, tag(2), NULL); cq_verify(v_client); diff --git a/test/core/end2end/tests/request_response_with_trailing_metadata_and_payload.c b/test/core/end2end/tests/request_response_with_trailing_metadata_and_payload.c index 95e268441bad68da6dec6aaab9de302fd748ef7a..d99141e0246640fe23b591ff46ff8c7a35e0093d 100644 --- a/test/core/end2end/tests/request_response_with_trailing_metadata_and_payload.c +++ b/test/core/end2end/tests/request_response_with_trailing_metadata_and_payload.c @@ -64,7 +64,7 @@ static gpr_timespec n_seconds_time(int n) { return gpr_time_add(gpr_now(), gpr_time_from_micros(GPR_US_PER_SEC * n)); } -static gpr_timespec five_seconds_time() { return n_seconds_time(5); } +static gpr_timespec five_seconds_time(void) { return n_seconds_time(5); } static void drain_cq(grpc_completion_queue *cq) { grpc_event *ev; diff --git a/test/core/end2end/tests/request_with_large_metadata.c b/test/core/end2end/tests/request_with_large_metadata.c index 26b165625e1f3782e688a19bbea999ab3526121f..e2f554b322cc987ba648b0c5b82d02cc42c72fc5 100644 --- a/test/core/end2end/tests/request_with_large_metadata.c +++ b/test/core/end2end/tests/request_with_large_metadata.c @@ -64,7 +64,7 @@ static gpr_timespec n_seconds_time(int n) { return gpr_time_add(gpr_now(), gpr_time_from_micros(GPR_US_PER_SEC * n)); } -static gpr_timespec five_seconds_time() { return n_seconds_time(5); } +static gpr_timespec five_seconds_time(void) { return n_seconds_time(5); } static void drain_cq(grpc_completion_queue *cq) { grpc_event *ev; diff --git a/test/core/end2end/tests/request_with_payload.c b/test/core/end2end/tests/request_with_payload.c index 602ade6f9010f3a9ec9eeaed998d403cef3644bf..09b3c864fdd491f471b0159883b493843935d77c 100644 --- a/test/core/end2end/tests/request_with_payload.c +++ b/test/core/end2end/tests/request_with_payload.c @@ -64,7 +64,7 @@ static gpr_timespec n_seconds_time(int n) { return gpr_time_add(gpr_now(), gpr_time_from_micros(GPR_US_PER_SEC * n)); } -static gpr_timespec five_seconds_time() { return n_seconds_time(5); } +static gpr_timespec five_seconds_time(void) { return n_seconds_time(5); } static void drain_cq(grpc_completion_queue *cq) { grpc_event *ev; diff --git a/test/core/end2end/tests/simple_delayed_request.c b/test/core/end2end/tests/simple_delayed_request.c index b90316c32eb6ca422d1442111b023149658cbb55..90ed227749309b581ed75c30fbb8f2bf53fefe8d 100644 --- a/test/core/end2end/tests/simple_delayed_request.c +++ b/test/core/end2end/tests/simple_delayed_request.c @@ -52,7 +52,7 @@ static gpr_timespec n_seconds_time(int n) { return gpr_time_add(gpr_now(), gpr_time_from_micros(GPR_US_PER_SEC * n)); } -static gpr_timespec five_seconds_time() { return n_seconds_time(5); } +static gpr_timespec five_seconds_time(void) { return n_seconds_time(5); } static void drain_cq(grpc_completion_queue *cq) { grpc_event *ev; @@ -124,7 +124,9 @@ static void simple_delayed_request_body(grpc_end2end_test_config config, deadline, NULL); cq_verify(v_server); - GPR_ASSERT(GRPC_CALL_OK == grpc_call_accept(s, f->server_cq, tag(102), 0)); + GPR_ASSERT(GRPC_CALL_OK == + grpc_call_server_accept(s, f->server_cq, tag(102))); + GPR_ASSERT(GRPC_CALL_OK == grpc_call_server_end_initial_metadata(s, 0)); cq_expect_client_metadata_read(v_client, tag(2), NULL); cq_verify(v_client); diff --git a/test/core/end2end/tests/simple_request.c b/test/core/end2end/tests/simple_request.c index 3511f276e66f3b423e88e4fddbf5d98aab6a3d1f..93dfa1fb0a2671bb99171e59e56283ee8a760037 100644 --- a/test/core/end2end/tests/simple_request.c +++ b/test/core/end2end/tests/simple_request.c @@ -64,7 +64,7 @@ static gpr_timespec n_seconds_time(int n) { return gpr_time_add(gpr_now(), gpr_time_from_micros(GPR_US_PER_SEC * n)); } -static gpr_timespec five_seconds_time() { return n_seconds_time(5); } +static gpr_timespec five_seconds_time(void) { return n_seconds_time(5); } static void drain_cq(grpc_completion_queue *cq) { grpc_event *ev; @@ -126,7 +126,8 @@ static void simple_request_body(grpc_end2end_test_fixture f) { deadline, NULL); cq_verify(v_server); - GPR_ASSERT(GRPC_CALL_OK == grpc_call_accept(s, f.server_cq, tag(102), 0)); + GPR_ASSERT(GRPC_CALL_OK == grpc_call_server_accept(s, f.server_cq, tag(102))); + GPR_ASSERT(GRPC_CALL_OK == grpc_call_server_end_initial_metadata(s, 0)); cq_expect_client_metadata_read(v_client, tag(2), NULL); cq_verify(v_client); @@ -173,7 +174,8 @@ static void simple_request_body2(grpc_end2end_test_fixture f) { deadline, NULL); cq_verify(v_server); - GPR_ASSERT(GRPC_CALL_OK == grpc_call_accept(s, f.server_cq, tag(102), 0)); + GPR_ASSERT(GRPC_CALL_OK == grpc_call_server_accept(s, f.server_cq, tag(102))); + GPR_ASSERT(GRPC_CALL_OK == grpc_call_server_end_initial_metadata(s, 0)); GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_write_status( s, GRPC_STATUS_UNIMPLEMENTED, "xyz", tag(5))); diff --git a/test/core/end2end/tests/thread_stress.c b/test/core/end2end/tests/thread_stress.c index 4100b0e35d63cac0a4d0bed96eef3b67a57b2cd8..2de0497a7aa45598d64e10b18d93c3c02d4b1c20 100644 --- a/test/core/end2end/tests/thread_stress.c +++ b/test/core/end2end/tests/thread_stress.c @@ -56,7 +56,7 @@ static gpr_timespec n_seconds_time(int n) { return gpr_time_add(gpr_now(), gpr_time_from_micros(GPR_US_PER_SEC * n)); } -static gpr_timespec five_seconds_time() { return n_seconds_time(5); } +static gpr_timespec five_seconds_time(void) { return n_seconds_time(5); } /* Drain pending events on a completion queue until it's ready to destroy. Does some post-processing to safely release memory on some of the events. */ @@ -105,7 +105,7 @@ static void drain_cq(int client, grpc_completion_queue *cq) { } /* Kick off a new request - assumes g_mu taken */ -static void start_request() { +static void start_request(void) { grpc_call *call = grpc_channel_create_call( g_fixture.client, "/Foo", "test.google.com", g_test_end_time); g_active_requests++; @@ -180,7 +180,7 @@ static void client_thread(void *p) { /* Request a new server call. We tag them with a ref-count that starts at two, and decrements after each of: a read completes and a write completes. When it drops to zero, we write status */ -static void request_server_call() { +static void request_server_call(void) { gpr_refcount *rc = gpr_malloc(sizeof(gpr_refcount)); gpr_ref_init(rc, 2); grpc_server_request_call(g_fixture.server, rc); @@ -218,9 +218,11 @@ static void server_thread(void *p) { break; case GRPC_SERVER_RPC_NEW: if (ev->call) { - GPR_ASSERT(GRPC_CALL_OK == grpc_call_accept(ev->call, - g_fixture.server_cq, - ev->tag, 0)); + GPR_ASSERT(GRPC_CALL_OK == + grpc_call_server_accept(ev->call, g_fixture.server_cq, + ev->tag)); + GPR_ASSERT(GRPC_CALL_OK == + grpc_call_server_end_initial_metadata(ev->call, 0)); GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_read(ev->call, ev->tag)); GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_write(ev->call, buf, ev->tag, 0)); @@ -280,11 +282,11 @@ static void run_test(grpc_end2end_test_config config, int requests_in_flight) { /* kick off threads */ for (i = 0; i < CLIENT_THREADS; i++) { gpr_event_init(&g_client_done[i]); - gpr_thd_new(&thd_id, client_thread, (void *)(gpr_intptr)i, NULL); + gpr_thd_new(&thd_id, client_thread, (void *)(gpr_intptr) i, NULL); } for (i = 0; i < SERVER_THREADS; i++) { gpr_event_init(&g_server_done[i]); - gpr_thd_new(&thd_id, server_thread, (void *)(gpr_intptr)i, NULL); + gpr_thd_new(&thd_id, server_thread, (void *)(gpr_intptr) i, NULL); } /* start requests */ diff --git a/test/core/end2end/tests/writes_done_hangs_with_pending_read.c b/test/core/end2end/tests/writes_done_hangs_with_pending_read.c index 2241519e8949e916568a6405fecf62343e7f1ea5..9878b4ce9a423ffac802f573966cf52b0967c2e6 100644 --- a/test/core/end2end/tests/writes_done_hangs_with_pending_read.c +++ b/test/core/end2end/tests/writes_done_hangs_with_pending_read.c @@ -64,7 +64,7 @@ static gpr_timespec n_seconds_time(int n) { return gpr_time_add(gpr_now(), gpr_time_from_micros(GPR_US_PER_SEC * n)); } -static gpr_timespec five_seconds_time() { return n_seconds_time(5); } +static gpr_timespec five_seconds_time(void) { return n_seconds_time(5); } static void drain_cq(grpc_completion_queue *cq) { grpc_event *ev; @@ -145,7 +145,8 @@ static void test_writes_done_hangs_with_pending_read( deadline, NULL); cq_verify(v_server); - grpc_call_accept(s, f.server_cq, tag(102), 0); + GPR_ASSERT(GRPC_CALL_OK == grpc_call_server_accept(s, f.server_cq, tag(102))); + GPR_ASSERT(GRPC_CALL_OK == grpc_call_server_end_initial_metadata(s, 0)); cq_expect_client_metadata_read(v_client, tag(2), NULL); cq_verify(v_client); diff --git a/test/core/fling/client.c b/test/core/fling/client.c index cc661c34c5f900cb340613ab7d694d20d1fcef17..7e93860dc35e4e3bf9b0f1621d7fc45226abf66c 100644 --- a/test/core/fling/client.c +++ b/test/core/fling/client.c @@ -50,9 +50,9 @@ static grpc_channel *channel; static grpc_completion_queue *cq; static grpc_call *call; -static void init_ping_pong_request() {} +static void init_ping_pong_request(void) {} -static void step_ping_pong_request() { +static void step_ping_pong_request(void) { call = grpc_channel_create_call(channel, "/Reflector/reflectUnary", "localhost", gpr_inf_future); GPR_ASSERT(grpc_call_start_invoke(call, cq, (void *)1, (void *)1, (void *)1, @@ -71,7 +71,7 @@ static void step_ping_pong_request() { call = NULL; } -static void init_ping_pong_stream() { +static void init_ping_pong_stream(void) { call = grpc_channel_create_call(channel, "/Reflector/reflectStream", "localhost", gpr_inf_future); GPR_ASSERT(grpc_call_start_invoke(call, cq, (void *)1, (void *)1, (void *)1, @@ -80,7 +80,7 @@ static void init_ping_pong_stream() { grpc_event_finish(grpc_completion_queue_next(cq, gpr_inf_future)); } -static void step_ping_pong_stream() { +static void step_ping_pong_stream(void) { GPR_ASSERT(grpc_call_start_write(call, the_buffer, (void *)1, 0) == GRPC_CALL_OK); GPR_ASSERT(grpc_call_start_read(call, (void *)1) == GRPC_CALL_OK); @@ -88,7 +88,7 @@ static void step_ping_pong_stream() { grpc_event_finish(grpc_completion_queue_next(cq, gpr_inf_future)); } -static double now() { +static double now(void) { gpr_timespec tv = gpr_now(); return 1e9 * tv.tv_sec + tv.tv_nsec; } diff --git a/test/core/fling/server.c b/test/core/fling/server.c index 44dc33a461fce8d6ea4fa3aa9027d7613d5ebb16..f811aac284c0652309e00989e3077f563d4bdf7d 100644 --- a/test/core/fling/server.c +++ b/test/core/fling/server.c @@ -32,6 +32,7 @@ */ #include <grpc/grpc.h> +#include <grpc/grpc_security.h> #include <signal.h> #include <stdio.h> @@ -47,6 +48,7 @@ #include <grpc/support/log.h> #include <grpc/support/time.h> #include "test/core/util/port.h" +#include "test/core/end2end/data/ssl_test_data.h" static grpc_completion_queue *cq; static grpc_server *server; @@ -57,7 +59,7 @@ typedef struct { gpr_uint32 flags; } call_state; -static void request_call() { +static void request_call(void) { call_state *s = gpr_malloc(sizeof(call_state)); gpr_ref_init(&s->pending_ops, 2); grpc_server_request_call(server, s); @@ -98,8 +100,18 @@ int main(int argc, char **argv) { gpr_log(GPR_INFO, "creating server on: %s", addr); cq = grpc_completion_queue_create(); - server = grpc_server_create(cq, NULL); - GPR_ASSERT(grpc_server_add_http2_port(server, addr)); + if (secure) { + grpc_ssl_pem_key_cert_pair pem_key_cert_pair = {test_server1_key, + test_server1_cert}; + grpc_server_credentials *ssl_creds = + grpc_ssl_server_credentials_create(NULL, &pem_key_cert_pair, 1); + server = grpc_secure_server_create(ssl_creds, cq, NULL); + GPR_ASSERT(grpc_server_add_secure_http2_port(server, addr)); + grpc_server_credentials_release(ssl_creds); + } else { + server = grpc_server_create(cq, NULL); + GPR_ASSERT(grpc_server_add_http2_port(server, addr)); + } grpc_server_start(server); gpr_free(addr_buf); @@ -130,7 +142,8 @@ int main(int argc, char **argv) { } else { s->flags = GRPC_WRITE_BUFFER_HINT; } - grpc_call_accept(ev->call, cq, s, s->flags); + grpc_call_server_accept(ev->call, cq, s); + grpc_call_server_end_initial_metadata(ev->call, s->flags); GPR_ASSERT(grpc_call_start_read(ev->call, s) == GRPC_CALL_OK); request_call(); } else { diff --git a/test/core/httpcli/format_request_test.c b/test/core/httpcli/format_request_test.c index abda24b44b80ba73931fc67b0aaab6a757f7573a..ec66f9600421457598e31c7c501171146f1745fb 100644 --- a/test/core/httpcli/format_request_test.c +++ b/test/core/httpcli/format_request_test.c @@ -38,7 +38,7 @@ #include <grpc/support/log.h> #include "test/core/util/test_config.h" -static void test_format_get_request() { +static void test_format_get_request(void) { grpc_httpcli_header hdr = {"x-yz", "abc"}; grpc_httpcli_request req; gpr_slice slice; @@ -63,7 +63,7 @@ static void test_format_get_request() { gpr_slice_unref(slice); } -static void test_format_post_request() { +static void test_format_post_request(void) { grpc_httpcli_header hdr = {"x-yz", "abc"}; grpc_httpcli_request req; gpr_slice slice; @@ -93,7 +93,7 @@ static void test_format_post_request() { gpr_slice_unref(slice); } -static void test_format_post_request_no_body() { +static void test_format_post_request_no_body(void) { grpc_httpcli_header hdr = {"x-yz", "abc"}; grpc_httpcli_request req; gpr_slice slice; @@ -118,7 +118,7 @@ static void test_format_post_request_no_body() { gpr_slice_unref(slice); } -static void test_format_post_request_content_type_override() { +static void test_format_post_request_content_type_override(void) { grpc_httpcli_header hdrs[2]; grpc_httpcli_request req; gpr_slice slice; diff --git a/test/core/iomgr/alarm_heap_test.c b/test/core/iomgr/alarm_heap_test.c index eaaaf156f4376c5786f67dd7584644746cf83e00..abb1086a22d7e36c953b135df12730e1c2f9e4f0 100644 --- a/test/core/iomgr/alarm_heap_test.c +++ b/test/core/iomgr/alarm_heap_test.c @@ -40,7 +40,7 @@ #include <grpc/support/log.h> #include "test/core/util/test_config.h" -static gpr_timespec random_deadline() { +static gpr_timespec random_deadline(void) { gpr_timespec ts; ts.tv_sec = rand(); ts.tv_nsec = rand(); @@ -150,7 +150,7 @@ static void check_valid(grpc_alarm_heap *pq) { } } -static void test1() { +static void test1(void) { grpc_alarm_heap pq; const int num_test_elements = 200; const int num_test_operations = 10000; @@ -206,7 +206,7 @@ static void test1() { gpr_free(inpq); } -static void shrink_test() { +static void shrink_test(void) { grpc_alarm_heap pq; int i; int expected_size; diff --git a/test/core/iomgr/alarm_list_test.c b/test/core/iomgr/alarm_list_test.c index 686d21d705a6a972e234fb63a8ec3ed61f83b3a8..ce9b7f4c6632060af1caad4b0ee21700a57e3dd3 100644 --- a/test/core/iomgr/alarm_list_test.c +++ b/test/core/iomgr/alarm_list_test.c @@ -44,13 +44,13 @@ static int cb_called[MAX_CB][2]; static int kicks; -void grpc_kick_poller() { ++kicks; } +void grpc_kick_poller(void) { ++kicks; } static void cb(void *arg, int success) { cb_called[(gpr_intptr)arg][success]++; } -static void add_test() { +static void add_test(void) { gpr_timespec start = gpr_now(); int i; grpc_alarm alarms[20]; @@ -61,13 +61,13 @@ static void add_test() { /* 10 ms alarms. will expire in the current epoch */ for (i = 0; i < 10; i++) { grpc_alarm_init(&alarms[i], gpr_time_add(start, gpr_time_from_millis(10)), - cb, (void *)(gpr_intptr)i, start); + cb, (void *)(gpr_intptr) i, start); } /* 1010 ms alarms. will expire in the next epoch */ for (i = 10; i < 20; i++) { grpc_alarm_init(&alarms[i], gpr_time_add(start, gpr_time_from_millis(1010)), - cb, (void *)(gpr_intptr)i, start); + cb, (void *)(gpr_intptr) i, start); } /* collect alarms. Only the first batch should be ready. */ @@ -108,22 +108,22 @@ static void add_test() { } /* Cleaning up a list with pending alarms. */ -void destruction_test() { +void destruction_test(void) { grpc_alarm alarms[5]; grpc_alarm_list_init(gpr_time_0); memset(cb_called, 0, sizeof(cb_called)); grpc_alarm_init(&alarms[0], gpr_time_from_millis(100), cb, - (void *)(gpr_intptr)0, gpr_time_0); + (void *)(gpr_intptr) 0, gpr_time_0); grpc_alarm_init(&alarms[1], gpr_time_from_millis(3), cb, - (void *)(gpr_intptr)1, gpr_time_0); + (void *)(gpr_intptr) 1, gpr_time_0); grpc_alarm_init(&alarms[2], gpr_time_from_millis(100), cb, - (void *)(gpr_intptr)2, gpr_time_0); + (void *)(gpr_intptr) 2, gpr_time_0); grpc_alarm_init(&alarms[3], gpr_time_from_millis(3), cb, - (void *)(gpr_intptr)3, gpr_time_0); + (void *)(gpr_intptr) 3, gpr_time_0); grpc_alarm_init(&alarms[4], gpr_time_from_millis(1), cb, - (void *)(gpr_intptr)4, gpr_time_0); + (void *)(gpr_intptr) 4, gpr_time_0); GPR_ASSERT(1 == grpc_alarm_check(NULL, gpr_time_from_millis(2), NULL)); GPR_ASSERT(1 == cb_called[4][1]); grpc_alarm_cancel(&alarms[0]); diff --git a/test/core/iomgr/alarm_test.c b/test/core/iomgr/alarm_test.c index 247320de04f504828f7b711528b3252b7c21f77c..aec3a50efc63818484282b2d900b342f09f8d5e4 100644 --- a/test/core/iomgr/alarm_test.c +++ b/test/core/iomgr/alarm_test.c @@ -89,7 +89,7 @@ static void alarm_cb(void *arg /* alarm_arg */, int success) { } /* Test grpc_alarm add and cancel. */ -static void test_grpc_alarm() { +static void test_grpc_alarm(void) { grpc_alarm alarm; grpc_alarm alarm_to_cancel; /* Timeout on the alarm cond. var, so make big enough to absorb time diff --git a/test/core/iomgr/endpoint_tests.c b/test/core/iomgr/endpoint_tests.c index 125cde467853f4adac1b1e41fb8855a231bbc31e..dc5747bf57f4e887ce2702d86c1124bd7e0bc13f 100644 --- a/test/core/iomgr/endpoint_tests.c +++ b/test/core/iomgr/endpoint_tests.c @@ -290,7 +290,7 @@ static void shutdown_during_write_test_read_handler( if (error != GRPC_ENDPOINT_CB_OK) { grpc_endpoint_destroy(st->ep); - gpr_event_set(&st->ev, (void *)(gpr_intptr)error); + gpr_event_set(&st->ev, (void *)(gpr_intptr) error); } else { grpc_endpoint_notify_on_read( st->ep, shutdown_during_write_test_read_handler, user_data); @@ -309,7 +309,7 @@ static void shutdown_during_write_test_write_handler( gpr_log(GPR_ERROR, "shutdown_during_write_test_write_handler completed unexpectedly"); } - gpr_event_set(&st->ev, (void *)(gpr_intptr)1); + gpr_event_set(&st->ev, (void *)(gpr_intptr) 1); } static void shutdown_during_write_test(grpc_endpoint_test_config config, diff --git a/test/core/iomgr/fd_posix_test.c b/test/core/iomgr/fd_posix_test.c index 325c9f0221dc4fa5b15ec21ec1f4fc6aeb0d5a50..05c91ffdd4d8071085cf5bfa7cfa4280ba06c38e 100644 --- a/test/core/iomgr/fd_posix_test.c +++ b/test/core/iomgr/fd_posix_test.c @@ -37,6 +37,7 @@ #include <errno.h> #include <fcntl.h> #include <netinet/in.h> +#include <poll.h> #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -79,7 +80,7 @@ static void create_test_socket(int port, int *socket_fd, /* Use local address for test */ sin->sin_family = AF_INET; - sin->sin_addr.s_addr = 0; + sin->sin_addr.s_addr = htonl(0x7f000001); sin->sin_port = htons(port); } @@ -164,7 +165,7 @@ static void session_read_cb(void *arg, /*session*/ grpc_fd_notify_on_read(se->em_fd, session_read_cb, se); } else { gpr_log(GPR_ERROR, "Unhandled read error %s", strerror(errno)); - GPR_ASSERT(0); + abort(); } } } @@ -316,7 +317,7 @@ static void client_session_write(void *arg, /*client*/ gpr_mu_unlock(&cl->mu); } else { gpr_log(GPR_ERROR, "unknown errno %s", strerror(errno)); - GPR_ASSERT(0); + abort(); } } @@ -325,10 +326,20 @@ static void client_start(client *cl, int port) { int fd; struct sockaddr_in sin; create_test_socket(port, &fd, &sin); - if (connect(fd, (struct sockaddr *)&sin, sizeof(sin)) == -1 && - errno != EINPROGRESS) { - gpr_log(GPR_ERROR, "Failed to connect to the server"); - GPR_ASSERT(0); + if (connect(fd, (struct sockaddr *)&sin, sizeof(sin)) == -1) { + if (errno == EINPROGRESS) { + struct pollfd pfd; + pfd.fd = fd; + pfd.events = POLLOUT; + pfd.revents = 0; + if (poll(&pfd, 1, -1) == -1) { + gpr_log(GPR_ERROR, "poll() failed during connect; errno=%d", errno); + abort(); + } + } else { + gpr_log(GPR_ERROR, "Failed to connect to the server (errno=%d)", errno); + abort(); + } } cl->em_fd = grpc_fd_create(fd); @@ -349,7 +360,7 @@ static void client_wait_and_shutdown(client *cl) { /* Test grpc_fd. Start an upload server and client, upload a stream of bytes from the client to the server, and verify that the total number of sent bytes is equal to the total number of received bytes. */ -static void test_grpc_fd() { +static void test_grpc_fd(void) { server sv; client cl; int port; @@ -403,7 +414,7 @@ static void second_read_callback(void *arg /* fd_change_data */, int success) { Note that we have two different but almost identical callbacks above -- the point is to have two different function pointers and two different data pointers and make sure that changing both really works. */ -static void test_grpc_fd_change() { +static void test_grpc_fd_change(void) { grpc_fd *em_fd; fd_change_data a, b; int flags; diff --git a/test/core/iomgr/poll_kick_test.c b/test/core/iomgr/poll_kick_test.c new file mode 100644 index 0000000000000000000000000000000000000000..c30a7b9ee0af87696baff270dcbfb633c0b4cab0 --- /dev/null +++ b/test/core/iomgr/poll_kick_test.c @@ -0,0 +1,123 @@ +/* + * + * 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/iomgr/pollset_kick.h" + +#include <grpc/support/alloc.h> +#include <grpc/support/log.h> +#include "test/core/util/test_config.h" + +static void test_allocation(void) { + grpc_pollset_kick_state state; + grpc_pollset_kick_init(&state); + grpc_pollset_kick_destroy(&state); +} + +static void test_non_kick(void) { + grpc_pollset_kick_state state; + int fd; + + grpc_pollset_kick_init(&state); + fd = grpc_pollset_kick_pre_poll(&state); + GPR_ASSERT(fd >= 0); + + grpc_pollset_kick_post_poll(&state); + grpc_pollset_kick_destroy(&state); +} + +static void test_basic_kick(void) { + /* Kicked during poll */ + grpc_pollset_kick_state state; + int fd; + grpc_pollset_kick_init(&state); + + fd = grpc_pollset_kick_pre_poll(&state); + GPR_ASSERT(fd >= 0); + + grpc_pollset_kick_kick(&state); + + /* Now hypothetically we polled and found that we were kicked */ + grpc_pollset_kick_consume(&state); + + grpc_pollset_kick_post_poll(&state); + + grpc_pollset_kick_destroy(&state); +} + +static void test_non_poll_kick(void) { + /* Kick before entering poll */ + grpc_pollset_kick_state state; + int fd; + + grpc_pollset_kick_init(&state); + + grpc_pollset_kick_kick(&state); + fd = grpc_pollset_kick_pre_poll(&state); + GPR_ASSERT(fd < 0); + grpc_pollset_kick_destroy(&state); +} + +#define GRPC_MAX_CACHED_PIPES 50 + +static void test_over_free(void) { + /* Check high watermark pipe free logic */ + int i; + struct grpc_pollset_kick_state *kick_state = + gpr_malloc(sizeof(grpc_pollset_kick_state) * GRPC_MAX_CACHED_PIPES); + for (i = 0; i < GRPC_MAX_CACHED_PIPES; ++i) { + int fd; + grpc_pollset_kick_init(&kick_state[i]); + fd = grpc_pollset_kick_pre_poll(&kick_state[i]); + GPR_ASSERT(fd >= 0); + } + + for (i = 0; i < GRPC_MAX_CACHED_PIPES; ++i) { + grpc_pollset_kick_post_poll(&kick_state[i]); + grpc_pollset_kick_destroy(&kick_state[i]); + } +} + +int main(int argc, char **argv) { + grpc_test_init(argc, argv); + + grpc_pollset_kick_global_init(); + + test_allocation(); + test_basic_kick(); + test_non_poll_kick(); + test_non_kick(); + test_over_free(); + + grpc_pollset_kick_global_destroy(); + return 0; +} diff --git a/test/core/iomgr/resolve_address_test.c b/test/core/iomgr/resolve_address_test.c index 99e3119581d490c31fe29a75b24bcb96ffb7caf3..319ee634d6c9f479ad7d1ea867a73ba46b2ccdb0 100644 --- a/test/core/iomgr/resolve_address_test.c +++ b/test/core/iomgr/resolve_address_test.c @@ -32,12 +32,13 @@ */ #include "src/core/iomgr/resolve_address.h" +#include "src/core/iomgr/iomgr.h" #include <grpc/support/log.h> #include <grpc/support/sync.h> #include <grpc/support/time.h> #include "test/core/util/test_config.h" -static gpr_timespec test_deadline() { +static gpr_timespec test_deadline(void) { return gpr_time_add(gpr_now(), gpr_time_from_micros(100000000)); } @@ -53,35 +54,35 @@ static void must_fail(void* evp, grpc_resolved_addresses* p) { gpr_event_set(evp, (void*)1); } -static void test_localhost() { +static void test_localhost(void) { gpr_event ev; gpr_event_init(&ev); grpc_resolve_address("localhost:1", NULL, must_succeed, &ev); GPR_ASSERT(gpr_event_wait(&ev, test_deadline())); } -static void test_default_port() { +static void test_default_port(void) { gpr_event ev; gpr_event_init(&ev); grpc_resolve_address("localhost", "1", must_succeed, &ev); GPR_ASSERT(gpr_event_wait(&ev, test_deadline())); } -static void test_missing_default_port() { +static void test_missing_default_port(void) { gpr_event ev; gpr_event_init(&ev); grpc_resolve_address("localhost", NULL, must_fail, &ev); GPR_ASSERT(gpr_event_wait(&ev, test_deadline())); } -static void test_ipv6_with_port() { +static void test_ipv6_with_port(void) { gpr_event ev; gpr_event_init(&ev); grpc_resolve_address("[2001:db8::1]:1", NULL, must_succeed, &ev); GPR_ASSERT(gpr_event_wait(&ev, test_deadline())); } -static void test_ipv6_without_port() { +static void test_ipv6_without_port(void) { const char* const kCases[] = { "2001:db8::1", "2001:db8::1.2.3.4", "[2001:db8::1]", }; @@ -94,7 +95,7 @@ static void test_ipv6_without_port() { } } -static void test_invalid_ip_addresses() { +static void test_invalid_ip_addresses(void) { const char* const kCases[] = { "293.283.1238.3:1", "[2001:db8::11111]:1", }; @@ -107,7 +108,7 @@ static void test_invalid_ip_addresses() { } } -static void test_unparseable_hostports() { +static void test_unparseable_hostports(void) { const char* const kCases[] = { "[", "[::1", "[::1]bad", "[1.2.3.4]", "[localhost]", "[localhost]:1", }; @@ -122,7 +123,7 @@ static void test_unparseable_hostports() { int main(int argc, char** argv) { grpc_test_init(argc, argv); - + grpc_iomgr_init(); test_localhost(); test_default_port(); test_missing_default_port(); @@ -130,6 +131,6 @@ int main(int argc, char** argv) { test_ipv6_without_port(); test_invalid_ip_addresses(); test_unparseable_hostports(); - + grpc_iomgr_shutdown(); return 0; } diff --git a/test/core/iomgr/sockaddr_utils_test.c b/test/core/iomgr/sockaddr_utils_test.c index 8cd9fb660f9821f7f47b7d7dbc44273c96fe3364..3e653da4c97ce449f05aac3f060b7027aad25003 100644 --- a/test/core/iomgr/sockaddr_utils_test.c +++ b/test/core/iomgr/sockaddr_utils_test.c @@ -70,7 +70,7 @@ static const gpr_uint8 kIPv4[] = {192, 0, 2, 1}; static const gpr_uint8 kIPv6[] = {0x20, 0x01, 0x0d, 0xb8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}; -static void test_sockaddr_is_v4mapped() { +static void test_sockaddr_is_v4mapped(void) { struct sockaddr_in input4; struct sockaddr_in6 input6; struct sockaddr_in output4; @@ -101,7 +101,7 @@ static void test_sockaddr_is_v4mapped() { !grpc_sockaddr_is_v4mapped((const struct sockaddr *)&input4, NULL)); } -static void test_sockaddr_to_v4mapped() { +static void test_sockaddr_to_v4mapped(void) { struct sockaddr_in input4; struct sockaddr_in6 input6; struct sockaddr_in6 output6; @@ -129,7 +129,7 @@ static void test_sockaddr_to_v4mapped() { !grpc_sockaddr_to_v4mapped((const struct sockaddr *)&input6, &output6)); } -static void test_sockaddr_is_wildcard() { +static void test_sockaddr_is_wildcard(void) { struct sockaddr_in wild4; struct sockaddr_in6 wild6; struct sockaddr_in6 wild_mapped; @@ -187,7 +187,7 @@ static void expect_sockaddr_str(const char *expected, void *addr, gpr_free(str); } -static void test_sockaddr_to_string() { +static void test_sockaddr_to_string(void) { struct sockaddr_in input4; struct sockaddr_in6 input6; struct sockaddr dummy; @@ -213,9 +213,9 @@ static void test_sockaddr_to_string() { expect_sockaddr_str("[::fffe:c000:263]:12345", &input6, 1); memset(&dummy, 0, sizeof(dummy)); - dummy.sa_family = 999; - expect_sockaddr_str("(sockaddr family=999)", &dummy, 0); - expect_sockaddr_str("(sockaddr family=999)", &dummy, 1); + dummy.sa_family = 123; + expect_sockaddr_str("(sockaddr family=123)", &dummy, 0); + expect_sockaddr_str("(sockaddr family=123)", &dummy, 1); GPR_ASSERT(errno == 0xDEADBEEF); } diff --git a/test/core/iomgr/tcp_client_posix_test.c b/test/core/iomgr/tcp_client_posix_test.c index 2d0a89a1f521eb377c3775d81b9317b7079edc7c..f9212e73737f736e10666fca48b27a4c089f9eb3 100644 --- a/test/core/iomgr/tcp_client_posix_test.c +++ b/test/core/iomgr/tcp_client_posix_test.c @@ -40,10 +40,11 @@ #include <unistd.h> #include "src/core/iomgr/iomgr.h" +#include "src/core/iomgr/socket_utils_posix.h" #include <grpc/support/log.h> #include <grpc/support/time.h> -static gpr_timespec test_deadline() { +static gpr_timespec test_deadline(void) { return gpr_time_add(gpr_now(), gpr_time_from_seconds(10)); } @@ -59,7 +60,7 @@ static void must_fail(void *arg, grpc_endpoint *tcp) { gpr_event_set(arg, (void *)1); } -void test_succeeds() { +void test_succeeds(void) { struct sockaddr_in addr; socklen_t addr_len = sizeof(addr); int svr_fd; @@ -94,7 +95,7 @@ void test_succeeds() { GPR_ASSERT(gpr_event_wait(&ev, test_deadline())); } -void test_fails() { +void test_fails(void) { struct sockaddr_in addr; socklen_t addr_len = sizeof(addr); gpr_event ev; @@ -112,7 +113,7 @@ void test_fails() { GPR_ASSERT(gpr_event_wait(&ev, test_deadline())); } -void test_times_out() { +void test_times_out(void) { struct sockaddr_in addr; socklen_t addr_len = sizeof(addr); int svr_fd; @@ -138,7 +139,8 @@ void test_times_out() { /* tie up the listen buffer, which is somewhat arbitrarily sized. */ for (i = 0; i < NUM_CLIENT_CONNECTS; ++i) { - client_fd[i] = socket(AF_INET, SOCK_STREAM | SOCK_NONBLOCK, 0); + client_fd[i] = socket(AF_INET, SOCK_STREAM, 0); + grpc_set_socket_nonblocking(client_fd[i], 1); do { r = connect(client_fd[i], (struct sockaddr *)&addr, addr_len); } while (r == -1 && errno == EINTR); diff --git a/test/core/iomgr/tcp_posix_test.c b/test/core/iomgr/tcp_posix_test.c index 6af3ded98b040ea8926b39c2d2f8301fb55ac33a..182ccba3f694dac0be3f6d5eb94241d4177ade31 100644 --- a/test/core/iomgr/tcp_posix_test.c +++ b/test/core/iomgr/tcp_posix_test.c @@ -444,7 +444,7 @@ static void write_error_test(ssize_t num_bytes, ssize_t slice_size) { free(slices); } -void run_tests() { +void run_tests(void) { int i = 0; read_test(100, 8192); @@ -469,7 +469,7 @@ void run_tests() { } } -static void clean_up() {} +static void clean_up(void) {} static grpc_endpoint_test_fixture create_fixture_tcp_socketpair( size_t slice_size) { diff --git a/test/core/iomgr/tcp_server_posix_test.c b/test/core/iomgr/tcp_server_posix_test.c index f30ff917cb5179e3edcb9c41847e43b3efcab375..e906f302cf63f0e7d6b20c8c319dc1c50e3d2f79 100644 --- a/test/core/iomgr/tcp_server_posix_test.c +++ b/test/core/iomgr/tcp_server_posix_test.c @@ -58,19 +58,19 @@ static void on_connect(void *arg, grpc_endpoint *tcp) { gpr_mu_unlock(&mu); } -static void test_no_op() { +static void test_no_op(void) { grpc_tcp_server *s = grpc_tcp_server_create(); grpc_tcp_server_destroy(s); } -static void test_no_op_with_start() { +static void test_no_op_with_start(void) { grpc_tcp_server *s = grpc_tcp_server_create(); LOG_TEST(); grpc_tcp_server_start(s, NULL, on_connect, NULL); grpc_tcp_server_destroy(s); } -static void test_no_op_with_port() { +static void test_no_op_with_port(void) { struct sockaddr_in addr; grpc_tcp_server *s = grpc_tcp_server_create(); LOG_TEST(); @@ -83,7 +83,7 @@ static void test_no_op_with_port() { grpc_tcp_server_destroy(s); } -static void test_no_op_with_port_and_start() { +static void test_no_op_with_port_and_start(void) { struct sockaddr_in addr; grpc_tcp_server *s = grpc_tcp_server_create(); LOG_TEST(); diff --git a/test/core/iomgr/time_averaged_stats_test.c b/test/core/iomgr/time_averaged_stats_test.c index 7ed2f84f21f6490e2882d4931e69b937414a47de..bbfeab5633010977c416baf8ac127f82fac0a081 100644 --- a/test/core/iomgr/time_averaged_stats_test.c +++ b/test/core/iomgr/time_averaged_stats_test.c @@ -41,7 +41,7 @@ #define EXPECT_EQ(a, b) GPR_ASSERT((a) == (b)) #define EXPECT_DOUBLE_EQ(a, b) GPR_ASSERT(fabs((a) - (b)) < 1e-9) -static void no_regress_no_persist_test_1() { +static void no_regress_no_persist_test_1(void) { grpc_time_averaged_stats tas; grpc_time_averaged_stats_init(&tas, 1000, 0, 0.0); EXPECT_DOUBLE_EQ(1000, tas.aggregate_weighted_avg); @@ -59,7 +59,7 @@ static void no_regress_no_persist_test_1() { EXPECT_DOUBLE_EQ(1, tas.aggregate_total_weight); } -static void no_regress_no_persist_test_2() { +static void no_regress_no_persist_test_2(void) { grpc_time_averaged_stats tas; grpc_time_averaged_stats_init(&tas, 1000, 0, 0.0); EXPECT_DOUBLE_EQ(1000, tas.aggregate_weighted_avg); @@ -75,7 +75,7 @@ static void no_regress_no_persist_test_2() { EXPECT_DOUBLE_EQ(1, tas.aggregate_total_weight); } -static void no_regress_no_persist_test_3() { +static void no_regress_no_persist_test_3(void) { grpc_time_averaged_stats tas; grpc_time_averaged_stats_init(&tas, 1000, 0, 0.0); EXPECT_DOUBLE_EQ(1000, tas.aggregate_weighted_avg); @@ -92,7 +92,7 @@ static void no_regress_no_persist_test_3() { EXPECT_DOUBLE_EQ(2, tas.aggregate_total_weight); } -static void some_regress_no_persist_test() { +static void some_regress_no_persist_test(void) { grpc_time_averaged_stats tas; grpc_time_averaged_stats_init(&tas, 1000, 0.5, 0.0); EXPECT_DOUBLE_EQ(1000, tas.aggregate_weighted_avg); @@ -105,7 +105,7 @@ static void some_regress_no_persist_test() { EXPECT_DOUBLE_EQ(2.5, tas.aggregate_total_weight); } -static void some_decay_test() { +static void some_decay_test(void) { grpc_time_averaged_stats tas; grpc_time_averaged_stats_init(&tas, 1000, 1, 0.0); EXPECT_EQ(1000, tas.aggregate_weighted_avg); @@ -126,7 +126,7 @@ static void some_decay_test() { EXPECT_DOUBLE_EQ(2, tas.aggregate_total_weight); } -static void no_regress_full_persist_test() { +static void no_regress_full_persist_test(void) { grpc_time_averaged_stats tas; grpc_time_averaged_stats_init(&tas, 1000, 0, 1.0); EXPECT_DOUBLE_EQ(1000, tas.aggregate_weighted_avg); @@ -146,7 +146,7 @@ static void no_regress_full_persist_test() { EXPECT_DOUBLE_EQ(3, tas.aggregate_total_weight); } -static void no_regress_some_persist_test() { +static void no_regress_some_persist_test(void) { grpc_time_averaged_stats tas; grpc_time_averaged_stats_init(&tas, 1000, 0, 0.5); /* Should replace init value */ @@ -162,7 +162,7 @@ static void no_regress_some_persist_test() { EXPECT_DOUBLE_EQ(2.5, tas.aggregate_total_weight); } -static void some_regress_some_persist_test() { +static void some_regress_some_persist_test(void) { grpc_time_averaged_stats tas; grpc_time_averaged_stats_init(&tas, 1000, 0.4, 0.6); /* Sample weight = 0 */ diff --git a/test/core/network_benchmarks/low_level_ping_pong.c b/test/core/network_benchmarks/low_level_ping_pong.c index 8a4c1befb61eaebcc12fb00288d3864d73a40890..9a6f518399c4633dc765a61fe6c07e521f191f43 100644 --- a/test/core/network_benchmarks/low_level_ping_pong.c +++ b/test/core/network_benchmarks/low_level_ping_pong.c @@ -293,7 +293,7 @@ static void print_histogram(gpr_histogram *histogram) { gpr_histogram_percentile(histogram, 99.9)); } -static double now() { +static double now(void) { gpr_timespec tv = gpr_now(); return 1e9 * tv.tv_sec + tv.tv_nsec; } diff --git a/test/core/security/credentials_test.c b/test/core/security/credentials_test.c index 619f09308e7c7074d504964ab2006cec4aa0254c..9c60f4c23380ae7fb0cb0781de42ffc2d81aa3cf 100644 --- a/test/core/security/credentials_test.c +++ b/test/core/security/credentials_test.c @@ -48,7 +48,7 @@ static const char test_iam_authorization_token[] = "blahblahblhahb"; static const char test_iam_authority_selector[] = "respectmyauthoritah"; static const char test_oauth2_bearer_token[] = "Bearer blaaslkdjfaslkdfasdsfasf"; -static const unsigned char test_root_cert[] = {0xDE, 0xAD, 0xBE, 0xEF}; +static const char test_root_cert[] = "I am the root!"; /* This JSON key was generated with the GCE console and revoked immediately. The identifiers have been changed as well. @@ -275,8 +275,8 @@ static void check_ssl_oauth2_composite_metadata( } static void test_ssl_oauth2_composite_creds(void) { - grpc_credentials *ssl_creds = grpc_ssl_credentials_create( - test_root_cert, sizeof(test_root_cert), NULL, 0, NULL, 0); + grpc_credentials *ssl_creds = + grpc_ssl_credentials_create(test_root_cert, NULL); const grpc_credentials_array *creds_array; grpc_credentials *oauth2_creds = grpc_fake_oauth2_credentials_create(test_oauth2_bearer_token, 0); @@ -312,8 +312,8 @@ static void check_ssl_oauth2_iam_composite_metadata( } static void test_ssl_oauth2_iam_composite_creds(void) { - grpc_credentials *ssl_creds = grpc_ssl_credentials_create( - test_root_cert, sizeof(test_root_cert), NULL, 0, NULL, 0); + grpc_credentials *ssl_creds = + grpc_ssl_credentials_create(test_root_cert, NULL); const grpc_credentials_array *creds_array; grpc_credentials *oauth2_creds = grpc_fake_oauth2_credentials_create(test_oauth2_bearer_token, 0); diff --git a/test/core/security/secure_endpoint_test.c b/test/core/security/secure_endpoint_test.c index d4baa64725f933b14696828b035650c0483ad555..0db15d48b45e5a37556a9a109c18bc0b7b1d10c3 100644 --- a/test/core/security/secure_endpoint_test.c +++ b/test/core/security/secure_endpoint_test.c @@ -61,7 +61,7 @@ static grpc_endpoint_test_fixture secure_endpoint_create_fixture_tcp_socketpair( } else { int i; tsi_result result; - gpr_uint32 still_pending_size; + size_t still_pending_size; size_t total_buffer_size = 8192; size_t buffer_size = total_buffer_size; gpr_uint8 *encrypted_buffer = gpr_malloc(buffer_size); @@ -72,8 +72,8 @@ static grpc_endpoint_test_fixture secure_endpoint_create_fixture_tcp_socketpair( gpr_uint8 *message_bytes = GPR_SLICE_START_PTR(plain); size_t message_size = GPR_SLICE_LENGTH(plain); while (message_size > 0) { - gpr_uint32 protected_buffer_size_to_send = buffer_size; - gpr_uint32 processed_message_size = message_size; + size_t protected_buffer_size_to_send = buffer_size; + size_t processed_message_size = message_size; result = tsi_frame_protector_protect( fake_write_protector, message_bytes, &processed_message_size, cur, &protected_buffer_size_to_send); @@ -88,7 +88,7 @@ static grpc_endpoint_test_fixture secure_endpoint_create_fixture_tcp_socketpair( gpr_slice_unref(plain); } do { - gpr_uint32 protected_buffer_size_to_send = buffer_size; + size_t protected_buffer_size_to_send = buffer_size; result = tsi_frame_protector_protect_flush(fake_write_protector, cur, &protected_buffer_size_to_send, &still_pending_size); @@ -125,7 +125,7 @@ secure_endpoint_create_fixture_tcp_socketpair_leftover(size_t slice_size) { return f; } -static void clean_up() {} +static void clean_up(void) {} static grpc_endpoint_test_config configs[] = { {"secure_ep/tcp_socketpair", diff --git a/test/core/statistics/census_log_tests.c b/test/core/statistics/census_log_tests.c index 44ad4b9358960b03183daf2eb1fa9cda9fd744f2..6a3c8adcc5d63dd9311a4ddc06e8277522c20051 100644 --- a/test/core/statistics/census_log_tests.c +++ b/test/core/statistics/census_log_tests.c @@ -114,7 +114,7 @@ static size_t perform_read_iteration(size_t record_size) { } /* Asserts that the log is empty. */ -static void assert_log_empty() { +static void assert_log_empty(void) { size_t bytes_available; census_log_init_reader(); GPR_ASSERT(census_log_read_next(&bytes_available) == NULL); @@ -345,7 +345,7 @@ static void setup_test(int circular_log) { /* Attempts to create a record of invalid size (size > CENSUS_LOG_MAX_RECORD_SIZE). */ -void test_invalid_record_size() { +void test_invalid_record_size(void) { static const size_t INVALID_SIZE = CENSUS_LOG_MAX_RECORD_SIZE + 1; static const size_t VALID_SIZE = 1; void* record; @@ -368,7 +368,7 @@ void test_invalid_record_size() { /* Tests end_write() with a different size than what was specified in start_write(). */ -void test_end_write_with_different_size() { +void test_end_write_with_different_size(void) { static const size_t START_WRITE_SIZE = 10; static const size_t END_WRITE_SIZE = 7; void* record_written; @@ -388,7 +388,7 @@ void test_end_write_with_different_size() { } /* Verifies that pending records are not available via read_next(). */ -void test_read_pending_record() { +void test_read_pending_record(void) { static const size_t PR_RECORD_SIZE = 1024; size_t bytes_available; const void* record_read; @@ -413,7 +413,7 @@ void test_read_pending_record() { } /* Tries reading beyond pending write. */ -void test_read_beyond_pending_record() { +void test_read_beyond_pending_record(void) { /* Start a write. */ gpr_int32 incomplete_record_size = 10; gpr_int32 complete_record_size = 20; @@ -452,7 +452,7 @@ void test_read_beyond_pending_record() { /* Tests scenario where block being read is detached from a core and put on the dirty list. */ -void test_detached_while_reading() { +void test_detached_while_reading(void) { static const size_t DWR_RECORD_SIZE = 10; size_t bytes_available; const void* record_read; @@ -488,7 +488,7 @@ void test_detached_while_reading() { /* Fills non-circular log with records sized such that size is a multiple of CENSUS_LOG_MAX_RECORD_SIZE (no per-block fragmentation). */ -void test_fill_log_no_fragmentation() { +void test_fill_log_no_fragmentation(void) { const int circular = 0; printf("Starting test: fill log no fragmentation\n"); setup_test(circular); @@ -498,7 +498,7 @@ void test_fill_log_no_fragmentation() { /* Fills circular log with records sized such that size is a multiple of CENSUS_LOG_MAX_RECORD_SIZE (no per-block fragmentation). */ -void test_fill_circular_log_no_fragmentation() { +void test_fill_circular_log_no_fragmentation(void) { const int circular = 1; printf("Starting test: fill circular log no fragmentation\n"); setup_test(circular); @@ -507,7 +507,7 @@ void test_fill_circular_log_no_fragmentation() { } /* Fills non-circular log with records that may straddle end of a block. */ -void test_fill_log_with_straddling_records() { +void test_fill_log_with_straddling_records(void) { const int circular = 0; printf("Starting test: fill log with straddling records\n"); setup_test(circular); @@ -516,7 +516,7 @@ void test_fill_log_with_straddling_records() { } /* Fills circular log with records that may straddle end of a block. */ -void test_fill_circular_log_with_straddling_records() { +void test_fill_circular_log_with_straddling_records(void) { const int circular = 1; printf("Starting test: fill circular log with straddling records\n"); setup_test(circular); @@ -526,7 +526,7 @@ void test_fill_circular_log_with_straddling_records() { /* Tests scenario where multiple writers and a single reader are using a log that is configured to discard old records. */ -void test_multiple_writers_circular_log() { +void test_multiple_writers_circular_log(void) { const int circular = 1; printf("Starting test: multiple writers circular log\n"); setup_test(circular); @@ -536,7 +536,7 @@ void test_multiple_writers_circular_log() { /* Tests scenario where multiple writers and a single reader are using a log that is configured to discard old records. */ -void test_multiple_writers() { +void test_multiple_writers(void) { const int circular = 0; printf("Starting test: multiple writers\n"); setup_test(circular); @@ -545,7 +545,7 @@ void test_multiple_writers() { } /* Repeat the straddling records and multiple writers tests with a small log. */ -void test_small_log() { +void test_small_log(void) { size_t log_size; const int circular = 0; printf("Starting test: small log\n"); @@ -559,7 +559,7 @@ void test_small_log() { census_log_shutdown(); } -void test_performance() { +void test_performance(void) { int write_size = 1; for (; write_size < CENSUS_LOG_MAX_RECORD_SIZE; write_size *= 2) { gpr_timespec write_time; diff --git a/test/core/statistics/census_stub_test.c b/test/core/statistics/census_stub_test.c index a86676fbb1b0b6a0ce44a8b2284815e3f4e130f6..c651eaf21ff293094b0bdae432fa27cbe4440258 100644 --- a/test/core/statistics/census_stub_test.c +++ b/test/core/statistics/census_stub_test.c @@ -41,7 +41,7 @@ #include "test/core/util/test_config.h" /* Tests census noop stubs in a simulated rpc flow */ -void test_census_stubs() { +void test_census_stubs(void) { census_op_id op_id; census_rpc_stats* stats = census_rpc_stats_create_empty(); census_aggregated_rpc_stats data_map = {0, NULL}; diff --git a/test/core/statistics/hash_table_test.c b/test/core/statistics/hash_table_test.c index 8c7682419352b33914be142e06760c5552facbad..ebfc2a2a9a00b08fbe4e6c9621ad70a8c911f007 100644 --- a/test/core/statistics/hash_table_test.c +++ b/test/core/statistics/hash_table_test.c @@ -61,11 +61,11 @@ static gpr_uint64 force_collision(const void* k) { static void free_data(void* data) { gpr_free(data); } /* Basic tests that empty hash table can be created and destroyed. */ -static void test_create_table() { +static void test_create_table(void) { /* Create table with uint64 key type */ census_ht* ht = NULL; - census_ht_option ht_options = {CENSUS_HT_UINT64, 1999, NULL, NULL, NULL, - NULL}; + census_ht_option ht_options = {CENSUS_HT_UINT64, 1999, NULL, + NULL, NULL, NULL}; ht = census_ht_create(&ht_options); GPR_ASSERT(ht != NULL); GPR_ASSERT(census_ht_get_size(ht) == 0); @@ -81,7 +81,7 @@ static void test_create_table() { census_ht_destroy(ht); } -static void test_table_with_int_key() { +static void test_table_with_int_key(void) { census_ht_option opt = {CENSUS_HT_UINT64, 7, NULL, NULL, NULL, NULL}; census_ht* ht = census_ht_create(&opt); gpr_uint64 i = 0; @@ -118,9 +118,9 @@ static void test_table_with_int_key() { } /* Test that there is no memory leak when keys and values are owned by table. */ -static void test_value_and_key_deleter() { - census_ht_option opt = {CENSUS_HT_POINTER, 7, &hash64, &cmp_str_keys, - &free_data, &free_data}; +static void test_value_and_key_deleter(void) { + census_ht_option opt = {CENSUS_HT_POINTER, 7, &hash64, + &cmp_str_keys, &free_data, &free_data}; census_ht* ht = census_ht_create(&opt); census_ht_key key; char* val = NULL; @@ -148,7 +148,7 @@ static void test_value_and_key_deleter() { } /* Test simple insert and erase operations. */ -static void test_simple_add_and_erase() { +static void test_simple_add_and_erase(void) { census_ht_option opt = {CENSUS_HT_UINT64, 7, NULL, NULL, NULL, NULL}; census_ht* ht = census_ht_create(&opt); GPR_ASSERT(ht != NULL); @@ -183,9 +183,9 @@ static void test_simple_add_and_erase() { census_ht_destroy(ht); } -static void test_insertion_and_deletion_with_high_collision_rate() { - census_ht_option opt = {CENSUS_HT_POINTER, 13, &force_collision, - &cmp_str_keys, NULL, NULL}; +static void test_insertion_and_deletion_with_high_collision_rate(void) { + census_ht_option opt = {CENSUS_HT_POINTER, 13, &force_collision, + &cmp_str_keys, NULL, NULL}; census_ht* ht = census_ht_create(&opt); char key_str[1000][10]; gpr_uint64 val = 0; @@ -207,13 +207,13 @@ static void test_insertion_and_deletion_with_high_collision_rate() { census_ht_destroy(ht); } -static void test_table_with_string_key() { - census_ht_option opt = {CENSUS_HT_POINTER, 7, &hash64, &cmp_str_keys, NULL, - NULL}; +static void test_table_with_string_key(void) { + census_ht_option opt = {CENSUS_HT_POINTER, 7, &hash64, + &cmp_str_keys, NULL, NULL}; census_ht* ht = census_ht_create(&opt); - const char* keys[] = {"k1", "a", "000", "apple", - "banana_a_long_long_long_banana", "%$", "111", "foo", - "b"}; + const char* keys[] = {"k1", "a", "000", + "apple", "banana_a_long_long_long_banana", "%$", + "111", "foo", "b"}; const int vals[] = {0, 1, 2, 3, 4, 5, 6, 7, 8}; int i = 0; GPR_ASSERT(ht != NULL); @@ -258,7 +258,7 @@ static void test_table_with_string_key() { census_ht_destroy(ht); } -static void test_insertion_with_same_key() { +static void test_insertion_with_same_key(void) { census_ht_option opt = {CENSUS_HT_UINT64, 11, NULL, NULL, NULL, NULL}; census_ht* ht = census_ht_create(&opt); census_ht_key key; diff --git a/test/core/statistics/rpc_stats_test.c b/test/core/statistics/rpc_stats_test.c index c1014034500cf8b03f9422a4346c17d3b94a65ff..1e929d18ef05cdf53131cfb5352bd2f2e7c08dda 100644 --- a/test/core/statistics/rpc_stats_test.c +++ b/test/core/statistics/rpc_stats_test.c @@ -45,7 +45,7 @@ #include "test/core/util/test_config.h" /* Ensure all possible state transitions are called without causing problem */ -static void test_init_shutdown() { +static void test_init_shutdown(void) { census_stats_store_init(); census_stats_store_init(); census_stats_store_shutdown(); @@ -53,7 +53,7 @@ static void test_init_shutdown() { census_stats_store_init(); } -static void test_create_and_destroy() { +static void test_create_and_destroy(void) { census_rpc_stats* stats = NULL; census_aggregated_rpc_stats agg_stats = {0, NULL}; @@ -80,7 +80,7 @@ static void test_create_and_destroy() { #define ASSERT_NEAR(a, b) \ GPR_ASSERT((a - b) * (a - b) < 1e-24 * (a + b) * (a + b)) -static void test_record_and_get_stats() { +static void test_record_and_get_stats(void) { census_rpc_stats stats = {1, 2, 3, 4, 5.1, 6.2, 7.3, 8.4}; census_op_id id; census_aggregated_rpc_stats agg_stats = {0, NULL}; @@ -149,7 +149,7 @@ static void test_record_and_get_stats() { census_shutdown(); } -static void test_record_stats_on_unknown_op_id() { +static void test_record_stats_on_unknown_op_id(void) { census_op_id unknown_id = {0xDEAD, 0xBEEF}; census_rpc_stats stats = {1, 2, 3, 4, 5.1, 6.2, 7.3, 8.4}; census_aggregated_rpc_stats agg_stats = {0, NULL}; @@ -169,7 +169,7 @@ static void test_record_stats_on_unknown_op_id() { } /* Test that record stats is noop when trace store is uninitialized. */ -static void test_record_stats_with_trace_store_uninitialized() { +static void test_record_stats_with_trace_store_uninitialized(void) { census_rpc_stats stats = {1, 2, 3, 4, 5.1, 6.2, 7.3, 8.4}; census_op_id id = {0, 0}; census_aggregated_rpc_stats agg_stats = {0, NULL}; diff --git a/test/core/statistics/trace_test.c b/test/core/statistics/trace_test.c index 9a6c54b90fee5febbeb00aefcea5f5b5541a9514..6eafcf145686a9bd1936d55db4338054f4c808d1 100644 --- a/test/core/statistics/trace_test.c +++ b/test/core/statistics/trace_test.c @@ -45,7 +45,7 @@ #include "test/core/util/test_config.h" /* Ensure all possible state transitions are called without causing problem */ -static void test_init_shutdown() { +static void test_init_shutdown(void) { census_tracing_init(); census_tracing_init(); census_tracing_shutdown(); @@ -53,7 +53,7 @@ static void test_init_shutdown() { census_tracing_init(); } -static void test_start_op_generates_locally_unique_ids() { +static void test_start_op_generates_locally_unique_ids(void) { /* Check that ids generated within window size of 1000 are unique. TODO(hongyu): Replace O(n^2) duplicate detection algorithm with O(nlogn) algorithm. Enhance the test to larger window size (>10^6) */ @@ -75,7 +75,7 @@ static void test_start_op_generates_locally_unique_ids() { census_shutdown(); } -static void test_get_trace_method_name() { +static void test_get_trace_method_name(void) { census_op_id id; const char write_name[] = "service/method"; census_tracing_init(); @@ -119,7 +119,7 @@ static void mimic_trace_op_sequences(void* arg) { gpr_mu_unlock(&args->mu); } -static void test_concurrency() { +static void test_concurrency(void) { #define NUM_THREADS 1000 gpr_thd_id tid[NUM_THREADS]; int i = 0; @@ -141,7 +141,7 @@ static void test_concurrency() { #undef NUM_THREADS } -static void test_add_method_tag_to_unknown_op_id() { +static void test_add_method_tag_to_unknown_op_id(void) { census_op_id unknown_id = {0xDEAD, 0xBEEF}; int ret = 0; census_tracing_init(); @@ -150,7 +150,7 @@ static void test_add_method_tag_to_unknown_op_id() { census_tracing_shutdown(); } -static void test_trace_print() { +static void test_trace_print(void) { census_op_id id; int i; const char* annotation_txt[4] = {"abc", "", "$%^ *()_"}; diff --git a/test/core/statistics/window_stats_test.c b/test/core/statistics/window_stats_test.c index 2bf93d8c87fc587207da421834a6aaf4770b98fc..1fe7747740801df98d27b28c50d2fc02716e8b96 100644 --- a/test/core/statistics/window_stats_test.c +++ b/test/core/statistics/window_stats_test.c @@ -73,7 +73,7 @@ static int compare_double(double a, double b, double epsilon) { } } -void empty_test() { +void empty_test(void) { census_window_stats_sums result; const gpr_timespec zero = {0, 0}; test_stat sum; @@ -88,7 +88,7 @@ void empty_test() { census_window_stats_destroy(stats); } -void one_interval_test() { +void one_interval_test(void) { const test_stat value = {0.1, 4}; const double epsilon = 1e10 - 11; gpr_timespec when = {0, 0}; @@ -197,7 +197,7 @@ void one_interval_test() { census_window_stats_destroy(stats); } -void many_interval_test() { +void many_interval_test(void) { gpr_timespec intervals[4]; const test_stat value = {123.45, 8}; const double epsilon = 1e10 - 11; @@ -258,7 +258,7 @@ void many_interval_test() { census_window_stats_destroy(stats); } -void rolling_time_test() { +void rolling_time_test(void) { const test_stat value = {0.1, 4}; gpr_timespec when = {0, 0}; census_window_stats_sums result; @@ -282,7 +282,7 @@ void rolling_time_test() { census_window_stats_destroy(stats); } #include <stdio.h> -void infinite_interval_test() { +void infinite_interval_test(void) { const test_stat value = {0.1, 4}; gpr_timespec when = {0, 0}; census_window_stats_sums result; diff --git a/test/core/support/cmdline_test.c b/test/core/support/cmdline_test.c index 91035a662b58db0ae06725aa4d37eee0b9e4dc6a..1d15c662898c8e8904681ecb8eae4a7e00bad04b 100644 --- a/test/core/support/cmdline_test.c +++ b/test/core/support/cmdline_test.c @@ -41,7 +41,7 @@ #define LOG_TEST() gpr_log(GPR_INFO, "%s", __FUNCTION__) -static void test_simple_int() { +static void test_simple_int(void) { int x = 1; gpr_cmdline *cl; char *args[] = {(char *)__FUNCTION__, "-foo", "3"}; @@ -56,7 +56,7 @@ static void test_simple_int() { gpr_cmdline_destroy(cl); } -static void test_eq_int() { +static void test_eq_int(void) { int x = 1; gpr_cmdline *cl; char *args[] = {(char *)__FUNCTION__, "-foo=3"}; @@ -71,7 +71,7 @@ static void test_eq_int() { gpr_cmdline_destroy(cl); } -static void test_2dash_int() { +static void test_2dash_int(void) { int x = 1; gpr_cmdline *cl; char *args[] = {(char *)__FUNCTION__, "--foo", "3"}; @@ -86,7 +86,7 @@ static void test_2dash_int() { gpr_cmdline_destroy(cl); } -static void test_2dash_eq_int() { +static void test_2dash_eq_int(void) { int x = 1; gpr_cmdline *cl; char *args[] = {(char *)__FUNCTION__, "--foo=3"}; @@ -101,7 +101,7 @@ static void test_2dash_eq_int() { gpr_cmdline_destroy(cl); } -static void test_simple_string() { +static void test_simple_string(void) { char *x = NULL; gpr_cmdline *cl; char *args[] = {(char *)__FUNCTION__, "-foo", "3"}; @@ -116,7 +116,7 @@ static void test_simple_string() { gpr_cmdline_destroy(cl); } -static void test_eq_string() { +static void test_eq_string(void) { char *x = NULL; gpr_cmdline *cl; char *args[] = {(char *)__FUNCTION__, "-foo=3"}; @@ -131,7 +131,7 @@ static void test_eq_string() { gpr_cmdline_destroy(cl); } -static void test_2dash_string() { +static void test_2dash_string(void) { char *x = NULL; gpr_cmdline *cl; char *args[] = {(char *)__FUNCTION__, "--foo", "3"}; @@ -146,7 +146,7 @@ static void test_2dash_string() { gpr_cmdline_destroy(cl); } -static void test_2dash_eq_string() { +static void test_2dash_eq_string(void) { char *x = NULL; gpr_cmdline *cl; char *args[] = {(char *)__FUNCTION__, "--foo=3"}; @@ -161,7 +161,7 @@ static void test_2dash_eq_string() { gpr_cmdline_destroy(cl); } -static void test_flag_on() { +static void test_flag_on(void) { int x = 2; gpr_cmdline *cl; char *args[] = {(char *)__FUNCTION__, "--foo"}; @@ -176,7 +176,7 @@ static void test_flag_on() { gpr_cmdline_destroy(cl); } -static void test_flag_no() { +static void test_flag_no(void) { int x = 2; gpr_cmdline *cl; char *args[] = {(char *)__FUNCTION__, "--no-foo"}; @@ -191,7 +191,7 @@ static void test_flag_no() { gpr_cmdline_destroy(cl); } -static void test_flag_val_1() { +static void test_flag_val_1(void) { int x = 2; gpr_cmdline *cl; char *args[] = {(char *)__FUNCTION__, "--foo=1"}; @@ -206,7 +206,7 @@ static void test_flag_val_1() { gpr_cmdline_destroy(cl); } -static void test_flag_val_0() { +static void test_flag_val_0(void) { int x = 2; gpr_cmdline *cl; char *args[] = {(char *)__FUNCTION__, "--foo=0"}; @@ -221,7 +221,7 @@ static void test_flag_val_0() { gpr_cmdline_destroy(cl); } -static void test_flag_val_true() { +static void test_flag_val_true(void) { int x = 2; gpr_cmdline *cl; char *args[] = {(char *)__FUNCTION__, "--foo=true"}; @@ -236,7 +236,7 @@ static void test_flag_val_true() { gpr_cmdline_destroy(cl); } -static void test_flag_val_false() { +static void test_flag_val_false(void) { int x = 2; gpr_cmdline *cl; char *args[] = {(char *)__FUNCTION__, "--foo=false"}; @@ -251,7 +251,7 @@ static void test_flag_val_false() { gpr_cmdline_destroy(cl); } -static void test_many() { +static void test_many(void) { char *str = NULL; int x = 0; int flag = 2; diff --git a/test/core/support/histogram_test.c b/test/core/support/histogram_test.c index 3b5fd73047479b69dac0b8cb884669f55e50427a..4769ce0599894bbcdbdf89d5fafd4a429b20e900 100644 --- a/test/core/support/histogram_test.c +++ b/test/core/support/histogram_test.c @@ -36,7 +36,7 @@ #define LOG_TEST() gpr_log(GPR_INFO, "%s", __FUNCTION__); -static void test_no_op() { +static void test_no_op(void) { gpr_histogram_destroy(gpr_histogram_create(0.01, 60e9)); } @@ -49,7 +49,7 @@ static void expect_percentile(gpr_histogram *h, double percentile, GPR_ASSERT(got <= max_expect); } -static void test_simple() { +static void test_simple(void) { gpr_histogram *h; LOG_TEST(); @@ -66,7 +66,7 @@ static void test_simple() { gpr_histogram_destroy(h); } -static void test_percentile() { +static void test_percentile(void) { gpr_histogram *h; double last; double i; @@ -111,7 +111,7 @@ static void test_percentile() { gpr_histogram_destroy(h); } -static void test_merge() { +static void test_merge(void) { gpr_histogram *h1, *h2; double last; double i; diff --git a/test/core/support/host_port_test.c b/test/core/support/host_port_test.c index d1553c514efec9e2d5ff701ea12e8f5057b4bd4c..5b06b7076ee6b8ee8863ced4d40d1253373e47fd 100644 --- a/test/core/support/host_port_test.c +++ b/test/core/support/host_port_test.c @@ -48,7 +48,7 @@ static void join_host_port_expect(const char *host, int port, gpr_free(buf); } -static void test_join_host_port() { +static void test_join_host_port(void) { join_host_port_expect("foo", 101, "foo:101"); join_host_port_expect("", 102, ":102"); join_host_port_expect("1::2", 103, "[1::2]:103"); @@ -56,7 +56,7 @@ static void test_join_host_port() { } /* Garbage in, garbage out. */ -static void test_join_host_port_garbage() { +static void test_join_host_port_garbage(void) { join_host_port_expect("[foo]", 105, "[foo]:105"); join_host_port_expect("[::", 106, "[:::106"); join_host_port_expect("::]", 107, "[::]]:107"); diff --git a/test/core/support/slice_test.c b/test/core/support/slice_test.c index 40440344c036c73dd73e5f50749371f3e1a0f821..2a7056feb2d32b5c214958111fd33f18099b9d88 100644 --- a/test/core/support/slice_test.c +++ b/test/core/support/slice_test.c @@ -40,7 +40,7 @@ #define LOG_TEST_NAME() gpr_log(GPR_INFO, "%s", __FUNCTION__); -static void test_slice_malloc_returns_something_sensible() { +static void test_slice_malloc_returns_something_sensible(void) { /* Calls gpr_slice_create for various lengths and verifies the internals for consistency. */ size_t length; @@ -74,7 +74,7 @@ static void test_slice_malloc_returns_something_sensible() { static void do_nothing(void *ignored) {} -static void test_slice_new_returns_something_sensible() { +static void test_slice_new_returns_something_sensible(void) { gpr_uint8 x; gpr_slice slice = gpr_slice_new(&x, 1, do_nothing); @@ -91,7 +91,7 @@ static void do_nothing_with_len_1(void *ignored, size_t len) { do_nothing_with_len_1_calls++; } -static void test_slice_new_with_len_returns_something_sensible() { +static void test_slice_new_with_len_returns_something_sensible(void) { gpr_uint8 x; gpr_slice slice = gpr_slice_new_with_len(&x, 1, do_nothing_with_len_1); @@ -198,7 +198,7 @@ static void test_slice_split_tail_works(int length) { gpr_slice_unref(slice); } -static void test_slice_from_copied_string_works() { +static void test_slice_from_copied_string_works(void) { static const char *text = "HELLO WORLD!"; gpr_slice slice; diff --git a/test/core/support/string_test.c b/test/core/support/string_test.c index 22ae7bacf52e1a932dc494aebb628c808017b046..e87a606aba25ce3550d6755a0d46f348dae8617d 100644 --- a/test/core/support/string_test.c +++ b/test/core/support/string_test.c @@ -44,7 +44,7 @@ #define LOG_TEST_NAME() gpr_log(GPR_INFO, "%s", __FUNCTION__) -static void test_strdup() { +static void test_strdup(void) { static const char *src1 = "hello world"; char *dst1; @@ -64,7 +64,7 @@ static void expect_hexdump(const char *buf, size_t len, gpr_uint32 flags, gpr_free(got); } -static void test_hexdump() { +static void test_hexdump(void) { LOG_TEST_NAME(); expect_hexdump("\x01", 1, 0, "01"); expect_hexdump("\x01", 1, GPR_HEXDUMP_PLAINTEXT, "01 '.'"); @@ -85,7 +85,7 @@ static void test_pu32_succeed(const char *s, gpr_uint32 want) { GPR_ASSERT(out == want); } -static void test_parse_uint32() { +static void test_parse_uint32(void) { LOG_TEST_NAME(); test_pu32_fail("-1"); @@ -119,7 +119,7 @@ static void test_parse_uint32() { test_pu32_fail("4294967299"); } -static void test_asprintf() { +static void test_asprintf(void) { char *buf; int i, j; diff --git a/test/core/support/time_test.c b/test/core/support/time_test.c index d74d6a52d9d3c605225b8e8899fbb679ca050ddb..56f927787bc39ce8da33b52ca4bf46dafb5cc229 100644 --- a/test/core/support/time_test.c +++ b/test/core/support/time_test.c @@ -222,7 +222,7 @@ static void test_sticky_infinities(void) { } } -static void test_similar() { +static void test_similar(void) { GPR_ASSERT(1 == gpr_time_similar(gpr_inf_future, gpr_inf_future, gpr_time_0)); GPR_ASSERT(1 == gpr_time_similar(gpr_inf_past, gpr_inf_past, gpr_time_0)); GPR_ASSERT(0 == gpr_time_similar(gpr_inf_past, gpr_inf_future, gpr_time_0)); diff --git a/test/core/surface/byte_buffer_reader_test.c b/test/core/surface/byte_buffer_reader_test.c index bc5a512a0b822708a34180a3fb5b6c8513c428b6..d78dd641ad6cd4e9e6a6bfacaadc0fe9dd4788f0 100644 --- a/test/core/surface/byte_buffer_reader_test.c +++ b/test/core/surface/byte_buffer_reader_test.c @@ -46,7 +46,7 @@ #define LOG_TEST() gpr_log(GPR_INFO, "%s", __FUNCTION__) -static void test_create() { +static void test_create(void) { grpc_byte_buffer *buffer; grpc_byte_buffer_reader *reader; gpr_slice empty = gpr_empty_slice(); @@ -57,7 +57,7 @@ static void test_create() { grpc_byte_buffer_destroy(buffer); } -static void test_read_one_slice() { +static void test_read_one_slice(void) { gpr_slice slice; grpc_byte_buffer *buffer; grpc_byte_buffer_reader *reader; @@ -79,7 +79,7 @@ static void test_read_one_slice() { grpc_byte_buffer_destroy(buffer); } -static void test_read_one_slice_malloc() { +static void test_read_one_slice_malloc(void) { gpr_slice slice; grpc_byte_buffer *buffer; grpc_byte_buffer_reader *reader; diff --git a/test/core/surface/completion_queue_benchmark.c b/test/core/surface/completion_queue_benchmark.c index e1b9d0d035aa0d2ab90967f5a9df2a7a2d638f46..5360d7c6c383b5e60582d3ede4747d3a1f4724d0 100644 --- a/test/core/surface/completion_queue_benchmark.c +++ b/test/core/surface/completion_queue_benchmark.c @@ -53,23 +53,23 @@ static void producer_thread(void *arg) { test_thread_options *opt = arg; int i; - gpr_event_set(&opt->on_started, (void *)(gpr_intptr)1); + gpr_event_set(&opt->on_started, (void *)(gpr_intptr) 1); GPR_ASSERT(gpr_event_wait(opt->start, gpr_inf_future)); for (i = 0; i < opt->iterations; i++) { grpc_cq_begin_op(opt->cc, NULL, GRPC_WRITE_ACCEPTED); - grpc_cq_end_write_accepted(opt->cc, (void *)(gpr_intptr)1, NULL, NULL, NULL, - GRPC_OP_OK); + grpc_cq_end_write_accepted(opt->cc, (void *)(gpr_intptr) 1, NULL, NULL, + NULL, GRPC_OP_OK); } - gpr_event_set(&opt->on_finished, (void *)(gpr_intptr)1); + gpr_event_set(&opt->on_finished, (void *)(gpr_intptr) 1); } static void consumer_thread(void *arg) { test_thread_options *opt = arg; grpc_event *ev; - gpr_event_set(&opt->on_started, (void *)(gpr_intptr)1); + gpr_event_set(&opt->on_started, (void *)(gpr_intptr) 1); GPR_ASSERT(gpr_event_wait(opt->start, gpr_inf_future)); for (;;) { @@ -78,7 +78,7 @@ static void consumer_thread(void *arg) { case GRPC_WRITE_ACCEPTED: break; case GRPC_QUEUE_SHUTDOWN: - gpr_event_set(&opt->on_finished, (void *)(gpr_intptr)1); + gpr_event_set(&opt->on_finished, (void *)(gpr_intptr) 1); return; default: gpr_log(GPR_ERROR, "Invalid event received: %d", ev->type); @@ -112,7 +112,7 @@ double ops_per_second(int consumers, int producers, int iterations) { /* start the benchmark */ t_start = gpr_now(); - gpr_event_set(&start, (void *)(gpr_intptr)1); + gpr_event_set(&start, (void *)(gpr_intptr) 1); /* wait for producers to finish */ for (i = 0; i < producers; i++) { diff --git a/test/core/surface/completion_queue_test.c b/test/core/surface/completion_queue_test.c index 9be2a67d8d2f686b2aed925e520524178afa80d4..4bbe9cc96fa292d54c5229102344b67c31b53054 100644 --- a/test/core/surface/completion_queue_test.c +++ b/test/core/surface/completion_queue_test.c @@ -47,7 +47,7 @@ static void increment_int_on_finish(void *user_data, grpc_op_error error) { ++*(int *)user_data; } -static void *create_test_tag() { +static void *create_test_tag(void) { static gpr_intptr i = 0; return (void *)(++i); } @@ -64,12 +64,12 @@ static void shutdown_and_destroy(grpc_completion_queue *cc) { } /* ensure we can create and destroy a completion channel */ -static void test_no_op() { +static void test_no_op(void) { LOG_TEST(); shutdown_and_destroy(grpc_completion_queue_create()); } -static void test_wait_empty() { +static void test_wait_empty(void) { grpc_completion_queue *cc; LOG_TEST(); @@ -79,7 +79,7 @@ static void test_wait_empty() { shutdown_and_destroy(cc); } -static void test_cq_end_read() { +static void test_cq_end_read(void) { grpc_event *ev; grpc_completion_queue *cc; int on_finish_called = 0; @@ -105,7 +105,7 @@ static void test_cq_end_read() { shutdown_and_destroy(cc); } -static void test_cq_end_invoke_accepted() { +static void test_cq_end_invoke_accepted(void) { grpc_event *ev; grpc_completion_queue *cc; int on_finish_called = 0; @@ -131,7 +131,7 @@ static void test_cq_end_invoke_accepted() { shutdown_and_destroy(cc); } -static void test_cq_end_write_accepted() { +static void test_cq_end_write_accepted(void) { grpc_event *ev; grpc_completion_queue *cc; int on_finish_called = 0; @@ -157,7 +157,7 @@ static void test_cq_end_write_accepted() { shutdown_and_destroy(cc); } -static void test_cq_end_finish_accepted() { +static void test_cq_end_finish_accepted(void) { grpc_event *ev; grpc_completion_queue *cc; int on_finish_called = 0; @@ -183,7 +183,7 @@ static void test_cq_end_finish_accepted() { shutdown_and_destroy(cc); } -static void test_cq_end_client_metadata_read() { +static void test_cq_end_client_metadata_read(void) { grpc_event *ev; grpc_completion_queue *cc; int on_finish_called = 0; @@ -210,7 +210,7 @@ static void test_cq_end_client_metadata_read() { shutdown_and_destroy(cc); } -static void test_pluck() { +static void test_pluck(void) { grpc_event *ev; grpc_completion_queue *cc; void *tags[128]; @@ -273,7 +273,7 @@ typedef struct test_thread_options { grpc_completion_queue *cc; } test_thread_options; -gpr_timespec ten_seconds_time() { +gpr_timespec ten_seconds_time(void) { return gpr_time_add(gpr_now(), gpr_time_from_micros(10 * 1000000)); } @@ -282,7 +282,7 @@ static void producer_thread(void *arg) { int i; gpr_log(GPR_INFO, "producer %d started", opt->id); - gpr_event_set(&opt->on_started, (void *)(gpr_intptr)1); + gpr_event_set(&opt->on_started, (void *)(gpr_intptr) 1); GPR_ASSERT(gpr_event_wait(opt->phase1, ten_seconds_time())); gpr_log(GPR_INFO, "producer %d phase 1", opt->id); @@ -291,18 +291,18 @@ static void producer_thread(void *arg) { } gpr_log(GPR_INFO, "producer %d phase 1 done", opt->id); - gpr_event_set(&opt->on_phase1_done, (void *)(gpr_intptr)1); + gpr_event_set(&opt->on_phase1_done, (void *)(gpr_intptr) 1); GPR_ASSERT(gpr_event_wait(opt->phase2, ten_seconds_time())); gpr_log(GPR_INFO, "producer %d phase 2", opt->id); for (i = 0; i < TEST_THREAD_EVENTS; i++) { - grpc_cq_end_write_accepted(opt->cc, (void *)(gpr_intptr)1, NULL, NULL, NULL, - GRPC_OP_OK); + grpc_cq_end_write_accepted(opt->cc, (void *)(gpr_intptr) 1, NULL, NULL, + NULL, GRPC_OP_OK); opt->events_triggered++; } gpr_log(GPR_INFO, "producer %d phase 2 done", opt->id); - gpr_event_set(&opt->on_finished, (void *)(gpr_intptr)1); + gpr_event_set(&opt->on_finished, (void *)(gpr_intptr) 1); } static void consumer_thread(void *arg) { @@ -310,13 +310,13 @@ static void consumer_thread(void *arg) { grpc_event *ev; gpr_log(GPR_INFO, "consumer %d started", opt->id); - gpr_event_set(&opt->on_started, (void *)(gpr_intptr)1); + gpr_event_set(&opt->on_started, (void *)(gpr_intptr) 1); GPR_ASSERT(gpr_event_wait(opt->phase1, ten_seconds_time())); gpr_log(GPR_INFO, "consumer %d phase 1", opt->id); gpr_log(GPR_INFO, "consumer %d phase 1 done", opt->id); - gpr_event_set(&opt->on_phase1_done, (void *)(gpr_intptr)1); + gpr_event_set(&opt->on_phase1_done, (void *)(gpr_intptr) 1); GPR_ASSERT(gpr_event_wait(opt->phase2, ten_seconds_time())); gpr_log(GPR_INFO, "consumer %d phase 2", opt->id); @@ -331,7 +331,7 @@ static void consumer_thread(void *arg) { break; case GRPC_QUEUE_SHUTDOWN: gpr_log(GPR_INFO, "consumer %d phase 2 done", opt->id); - gpr_event_set(&opt->on_finished, (void *)(gpr_intptr)1); + gpr_event_set(&opt->on_finished, (void *)(gpr_intptr) 1); grpc_event_finish(ev); return; default: @@ -376,7 +376,7 @@ static void test_threading(int producers, int consumers) { /* start phase1: producers will pre-declare all operations they will complete */ gpr_log(GPR_INFO, "start phase 1"); - gpr_event_set(&phase1, (void *)(gpr_intptr)1); + gpr_event_set(&phase1, (void *)(gpr_intptr) 1); gpr_log(GPR_INFO, "wait phase 1"); for (i = 0; i < producers + consumers; i++) { @@ -386,7 +386,7 @@ static void test_threading(int producers, int consumers) { /* start phase2: operations will complete, and consumers will consume them */ gpr_log(GPR_INFO, "start phase 2"); - gpr_event_set(&phase2, (void *)(gpr_intptr)1); + gpr_event_set(&phase2, (void *)(gpr_intptr) 1); /* in parallel, we shutdown the completion channel - all events should still be consumed */ diff --git a/test/core/transport/chttp2/hpack_table_test.c b/test/core/transport/chttp2/hpack_table_test.c index 8810925ba5ac6b81785c60e9633dfd1a94bfc6bc..1576a30c1b0b59811b59fa0557e48f204e6c23de 100644 --- a/test/core/transport/chttp2/hpack_table_test.c +++ b/test/core/transport/chttp2/hpack_table_test.c @@ -54,7 +54,7 @@ static void assert_index(const grpc_chttp2_hptbl *tbl, int idx, const char *key, assert_str(tbl, md->value, value); } -static void test_static_lookup() { +static void test_static_lookup(void) { grpc_chttp2_hptbl tbl; grpc_mdctx *mdctx; @@ -128,7 +128,7 @@ static void test_static_lookup() { grpc_mdctx_orphan(mdctx); } -static void test_many_additions() { +static void test_many_additions(void) { grpc_chttp2_hptbl tbl; int i; char key[32]; @@ -165,7 +165,7 @@ static grpc_chttp2_hptbl_find_result find_simple(grpc_chttp2_hptbl *tbl, return r; } -static void test_find() { +static void test_find(void) { grpc_chttp2_hptbl tbl; int i; char buffer[32]; diff --git a/test/core/transport/chttp2/stream_encoder_test.c b/test/core/transport/chttp2/stream_encoder_test.c index ba552786db05a943478c8d3241561911d586b26e..cebc2634fbaad1d477560a6cfd8e48cb76ff9b3e 100644 --- a/test/core/transport/chttp2/stream_encoder_test.c +++ b/test/core/transport/chttp2/stream_encoder_test.c @@ -102,7 +102,7 @@ static void assert_result_ok(void *user_data, grpc_op_error error) { GPR_ASSERT(error == GRPC_OP_OK); } -static void test_small_data_framing() { +static void test_small_data_framing(void) { grpc_sopb_add_no_op(&g_sopb); verify_sopb(10, 0, 0, ""); @@ -135,7 +135,7 @@ static void add_sopb_header(const char *key, const char *value) { grpc_mdelem_from_strings(g_mdctx, key, value)); } -static void test_basic_headers() { +static void test_basic_headers(void) { int i; add_sopb_header("a", "a"); @@ -183,7 +183,7 @@ static void encode_int_to_str(int i, char *p) { p[2] = 0; } -static void test_decode_table_overflow() { +static void test_decode_table_overflow(void) { int i; char key[3], value[3]; char expect[128]; @@ -281,10 +281,10 @@ static void test_decode_random_headers_inner(int max_len) { grpc_sopb_destroy(&encops); } -#define DECL_TEST_DECODE_RANDOM_HEADERS(n) \ - static void test_decode_random_headers_##n() { \ - test_decode_random_headers_inner(n); \ - } \ +#define DECL_TEST_DECODE_RANDOM_HEADERS(n) \ + static void test_decode_random_headers_##n(void) { \ + test_decode_random_headers_inner(n); \ + } \ int keeps_formatting_correct_##n DECL_TEST_DECODE_RANDOM_HEADERS(1); diff --git a/test/core/transport/chttp2/stream_map_test.c b/test/core/transport/chttp2/stream_map_test.c index 459ef2aedeb85949fc3d9a28fa905efe234f866e..30cd63ca67d8b4a9acd04a7d3d209e470bc97770 100644 --- a/test/core/transport/chttp2/stream_map_test.c +++ b/test/core/transport/chttp2/stream_map_test.c @@ -38,7 +38,7 @@ #define LOG_TEST() gpr_log(GPR_INFO, "%s", __FUNCTION__) /* test creation & destruction */ -static void test_no_op() { +static void test_no_op(void) { grpc_chttp2_stream_map map; LOG_TEST(); @@ -48,7 +48,7 @@ static void test_no_op() { } /* test lookup on an empty map */ -static void test_empty_find() { +static void test_empty_find(void) { grpc_chttp2_stream_map map; LOG_TEST(); @@ -59,7 +59,7 @@ static void test_empty_find() { } /* test it's safe to delete twice */ -static void test_double_deletion() { +static void test_double_deletion(void) { grpc_chttp2_stream_map map; LOG_TEST(); @@ -93,7 +93,7 @@ static void test_basic_add_find(size_t n) { grpc_chttp2_stream_map_init(&map, 8); GPR_ASSERT(0 == grpc_chttp2_stream_map_size(&map)); for (i = 1; i <= n; i++) { - grpc_chttp2_stream_map_add(&map, i, (void *)(gpr_uintptr)i); + grpc_chttp2_stream_map_add(&map, i, (void *)(gpr_uintptr) i); } GPR_ASSERT(n == grpc_chttp2_stream_map_size(&map)); GPR_ASSERT(NULL == grpc_chttp2_stream_map_find(&map, 0)); @@ -148,7 +148,7 @@ static void test_delete_evens_sweep(size_t n) { grpc_chttp2_stream_map_init(&map, 8); for (i = 1; i <= n; i++) { - grpc_chttp2_stream_map_add(&map, i, (void *)(gpr_uintptr)i); + grpc_chttp2_stream_map_add(&map, i, (void *)(gpr_uintptr) i); } for (i = 1; i <= n; i++) { if ((i & 1) == 0) { @@ -170,7 +170,7 @@ static void test_delete_evens_incremental(size_t n) { grpc_chttp2_stream_map_init(&map, 8); for (i = 1; i <= n; i++) { - grpc_chttp2_stream_map_add(&map, i, (void *)(gpr_uintptr)i); + grpc_chttp2_stream_map_add(&map, i, (void *)(gpr_uintptr) i); if ((i & 1) == 0) { grpc_chttp2_stream_map_delete(&map, i); } diff --git a/test/core/transport/chttp2/timeout_encoding_test.c b/test/core/transport/chttp2/timeout_encoding_test.c index 793d2b945eaa329ac2fa4d3071c46fc6715e14ec..4bb84e3f0bfc88a61b7efe2302f94788e2794bfe 100644 --- a/test/core/transport/chttp2/timeout_encoding_test.c +++ b/test/core/transport/chttp2/timeout_encoding_test.c @@ -49,7 +49,7 @@ static void assert_encodes_as(gpr_timespec ts, const char *s) { GPR_ASSERT(0 == strcmp(buffer, s)); } -void test_encoding() { +void test_encoding(void) { LOG_TEST(); assert_encodes_as(gpr_time_from_micros(-1), "1n"); assert_encodes_as(gpr_time_from_seconds(-10), "1n"); @@ -106,7 +106,7 @@ void decode_suite(char ext, gpr_timespec (*answer)(long x)) { } } -void test_decoding() { +void test_decoding(void) { LOG_TEST(); decode_suite('n', gpr_time_from_nanos); decode_suite('u', gpr_time_from_micros); @@ -117,7 +117,7 @@ void test_decoding() { assert_decodes_as("1000000000000000000000u", gpr_inf_future); } -void test_decoding_fails() { +void test_decoding_fails(void) { gpr_timespec x; LOG_TEST(); GPR_ASSERT(0 == grpc_chttp2_decode_timeout("", &x)); diff --git a/test/core/transport/metadata_test.c b/test/core/transport/metadata_test.c index ec424ce144ce7a898e92c4984ef755288be07ad7..804096d0e1e078c6251a38336e3bd15e4d3f9a62 100644 --- a/test/core/transport/metadata_test.c +++ b/test/core/transport/metadata_test.c @@ -45,7 +45,7 @@ /* a large number */ #define MANY 1000000 -static void test_no_op() { +static void test_no_op(void) { grpc_mdctx *ctx; LOG_TEST(); @@ -54,7 +54,7 @@ static void test_no_op() { grpc_mdctx_orphan(ctx); } -static void test_create_string() { +static void test_create_string(void) { grpc_mdctx *ctx; grpc_mdstr *s1, *s2, *s3; @@ -74,7 +74,7 @@ static void test_create_string() { grpc_mdstr_unref(s3); } -static void test_create_metadata() { +static void test_create_metadata(void) { grpc_mdctx *ctx; grpc_mdelem *m1, *m2, *m3; @@ -97,7 +97,7 @@ static void test_create_metadata() { grpc_mdctx_orphan(ctx); } -static void test_create_many_ephemeral_metadata() { +static void test_create_many_ephemeral_metadata(void) { grpc_mdctx *ctx; char buffer[256]; long i; @@ -118,7 +118,7 @@ static void test_create_many_ephemeral_metadata() { grpc_mdctx_orphan(ctx); } -static void test_create_many_persistant_metadata() { +static void test_create_many_persistant_metadata(void) { grpc_mdctx *ctx; char buffer[256]; long i; @@ -149,7 +149,7 @@ static void test_create_many_persistant_metadata() { gpr_free(created); } -static void test_spin_creating_the_same_thing() { +static void test_spin_creating_the_same_thing(void) { grpc_mdctx *ctx; LOG_TEST(); @@ -173,7 +173,7 @@ static void test_spin_creating_the_same_thing() { grpc_mdctx_orphan(ctx); } -static void test_things_stick_around() { +static void test_things_stick_around(void) { grpc_mdctx *ctx; int i, j; char buffer[64]; @@ -220,7 +220,7 @@ static void test_things_stick_around() { gpr_free(shuf); } -static void test_slices_work() { +static void test_slices_work(void) { /* ensure no memory leaks when switching representation from mdstr to slice */ grpc_mdctx *ctx; grpc_mdstr *str; @@ -245,7 +245,7 @@ static void test_slices_work() { grpc_mdctx_orphan(ctx); } -static void test_base64_and_huffman_works() { +static void test_base64_and_huffman_works(void) { grpc_mdctx *ctx; grpc_mdstr *str; gpr_slice slice1; diff --git a/test/core/transport/transport_end2end_tests.c b/test/core/transport/transport_end2end_tests.c index 86e987bef0e421b441abe9ba680f5ed200e80a69..712081bc8aba90617d954b634b306b3262fcc300 100644 --- a/test/core/transport/transport_end2end_tests.c +++ b/test/core/transport/transport_end2end_tests.c @@ -144,36 +144,36 @@ static gpr_slice alloc_recv_buffer(void *user_data, grpc_transport *transport, return gpr_slice_malloc(size_hint); } -static void pending_ops_cleanup() { +static void pending_ops_cleanup(void) { gpr_mu_destroy(&g_mu); gpr_cv_destroy(&g_cv); } -static void pending_ops_init() { +static void pending_ops_init(void) { gpr_mu_init(&g_mu); gpr_cv_init(&g_cv); atexit(pending_ops_cleanup); } -static void use_pending_ops() { +static void use_pending_ops(void) { gpr_once_init(&g_pending_ops_init, pending_ops_init); } -static void add_pending_op() { +static void add_pending_op(void) { use_pending_ops(); gpr_mu_lock(&g_mu); g_pending_ops++; gpr_mu_unlock(&g_mu); } -static void end_pending_op() { +static void end_pending_op(void) { gpr_mu_lock(&g_mu); g_pending_ops--; gpr_cv_broadcast(&g_cv); gpr_mu_unlock(&g_mu); } -static void wait_pending_ops() { +static void wait_pending_ops(void) { use_pending_ops(); gpr_mu_lock(&g_mu); while (g_pending_ops > 0) { diff --git a/test/core/util/grpc_profiler.c b/test/core/util/grpc_profiler.c index e135743d579c38c9efae02a05a7853bf35a3b564..46bfc1f533c8959edc7c6e6d231b40d528f17d40 100644 --- a/test/core/util/grpc_profiler.c +++ b/test/core/util/grpc_profiler.c @@ -33,6 +33,22 @@ #include "test/core/util/grpc_profiler.h" -void grpc_profiler_start(const char *filename) {} +#if GRPC_HAVE_PERFTOOLS +#include <gperftools/profiler.h> -void grpc_profiler_stop() {} +void grpc_profiler_start(const char *filename) { ProfilerStart(filename); } + +void grpc_profiler_stop() { ProfilerStop(); } +#else +#include <grpc/support/log.h> + +void grpc_profiler_start(const char *filename) { + gpr_log(GPR_DEBUG, + "You do not have google-perftools installed, profiling is disabled"); + gpr_log(GPR_DEBUG, + "To install on ubuntu: sudo apt-get install google-perftools " + "libgoogle-perftools-dev"); +} + +void grpc_profiler_stop(void) {} +#endif diff --git a/test/core/util/port_posix.c b/test/core/util/port_posix.c index 5f51478f8cf71cd53e8618cf0d38f73de31a7d4f..52008895dca99b222836fdbdebd8b62480409a5e 100644 --- a/test/core/util/port_posix.c +++ b/test/core/util/port_posix.c @@ -98,7 +98,7 @@ static int is_port_available(int *port, int is_tcp) { return 1; } -int grpc_pick_unused_port() { +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 @@ -141,7 +141,7 @@ int grpc_pick_unused_port() { return 0; } -int grpc_pick_unused_port_or_die() { +int grpc_pick_unused_port_or_die(void) { int port = grpc_pick_unused_port(); GPR_ASSERT(port > 0); return port; diff --git a/test/core/util/test_config.c b/test/core/util/test_config.c index 44ab35fc5e4c0e89c60ae62777f0dbfdbb3814a9..6df86b593f4115d11f1a325c5e6dfa5d5e0aea8e 100644 --- a/test/core/util/test_config.c +++ b/test/core/util/test_config.c @@ -39,7 +39,7 @@ #if GPR_GETPID_IN_UNISTD_H #include <unistd.h> -static int seed() { return getpid(); } +static int seed(void) { return getpid(); } #endif #if GPR_GETPID_IN_PROCESS_H diff --git a/test/cpp/client/credentials_test.cc b/test/cpp/client/credentials_test.cc index ea088b87bd551163bf88e90f4d5efc289b573950..174d2187b0b16f2df2ef3318d161960073843ad8 100644 --- a/test/cpp/client/credentials_test.cc +++ b/test/cpp/client/credentials_test.cc @@ -45,15 +45,6 @@ class CredentialsTest : public ::testing::Test { protected: }; -TEST_F(CredentialsTest, InvalidSslCreds) { - std::unique_ptr<Credentials> bad1 = - CredentialsFactory::SslCredentials({"", "", ""}); - EXPECT_EQ(nullptr, bad1.get()); - std::unique_ptr<Credentials> bad2 = - CredentialsFactory::SslCredentials({"", "bla", "bla"}); - EXPECT_EQ(nullptr, bad2.get()); -} - TEST_F(CredentialsTest, InvalidServiceAccountCreds) { std::unique_ptr<Credentials> bad1 = CredentialsFactory::ServiceAccountCredentials("", "", diff --git a/test/cpp/end2end/end2end_test.cc b/test/cpp/end2end/end2end_test.cc index 3a1da68e47ff89432091f8a4b3879d49606fd04f..4dea77ea8118d94a224e0106d822fdef54b59c20 100644 --- a/test/cpp/end2end/end2end_test.cc +++ b/test/cpp/end2end/end2end_test.cc @@ -210,9 +210,7 @@ TEST_F(End2endTest, RpcDeadlineExpires) { std::chrono::system_clock::now() + std::chrono::microseconds(10); context.set_absolute_deadline(deadline); Status s = stub_->Echo(&context, request, &response); - // TODO(yangg) use correct error code when b/18793983 is fixed. - // EXPECT_EQ(StatusCode::DEADLINE_EXCEEDED, s.code()); - EXPECT_EQ(StatusCode::CANCELLED, s.code()); + EXPECT_EQ(StatusCode::DEADLINE_EXCEEDED, s.code()); } // Set a long but finite deadline. diff --git a/test/cpp/interop/client.cc b/test/cpp/interop/client.cc index 04cfeb86cb31835832e26410f4e5cd3a8f41d8b3..2a18ddb72e63a32d9c113de4f2696105f3c8be10 100644 --- a/test/cpp/interop/client.cc +++ b/test/cpp/interop/client.cc @@ -188,7 +188,7 @@ void DoResponseStreamingWithSlowConsumer( grpc::ClientContext context; StreamingOutputCallRequest request; - for (unsigned int i = 0; i < kNumResponseMessages; ++i) { + for (int i = 0; i < kNumResponseMessages; ++i) { ResponseParameters* response_parameter = request.add_response_parameters(); response_parameter->set_size(kResponseMessageSize); } @@ -196,7 +196,7 @@ void DoResponseStreamingWithSlowConsumer( std::unique_ptr<grpc::ClientReader<StreamingOutputCallResponse>> stream( stub->StreamingOutputCall(&context, &request)); - unsigned int i = 0; + int i = 0; while (stream->Read(&response)) { GPR_ASSERT(response.payload().body() == grpc::string(kResponseMessageSize, '\0')); diff --git a/test/cpp/interop/server.cc b/test/cpp/interop/server.cc index 561b134c279081c518f2ead5475b93ec27f44d68..5b5c35416ca2e152702517309478ab869507698d 100644 --- a/test/cpp/interop/server.cc +++ b/test/cpp/interop/server.cc @@ -203,11 +203,7 @@ void RunServer() { builder.RegisterService(service.service()); if (FLAGS_enable_ssl) { SslServerCredentialsOptions ssl_opts = { - "", - {reinterpret_cast<const char*>(test_server1_key), - test_server1_key_size}, - {reinterpret_cast<const char*>(test_server1_cert), - test_server1_cert_size}}; + "", {{test_server1_key, test_server1_cert}}}; std::shared_ptr<ServerCredentials> creds = ServerCredentialsFactory::SslCredentials(ssl_opts); builder.SetCredentials(creds); diff --git a/test/cpp/util/create_test_channel.cc b/test/cpp/util/create_test_channel.cc index f0d35d98c2bf8e67d30251ec2033c90f85ef044d..68f6244a5391a6f61157db30179f35ef920cb68a 100644 --- a/test/cpp/util/create_test_channel.cc +++ b/test/cpp/util/create_test_channel.cc @@ -56,11 +56,8 @@ std::shared_ptr<ChannelInterface> CreateTestChannel( ChannelArguments channel_args; if (enable_ssl) { const char* roots_certs = - use_prod_roots ? reinterpret_cast<const char*>(prod_roots_certs) - : reinterpret_cast<const char*>(test_root_cert); - unsigned int roots_certs_size = - use_prod_roots ? prod_roots_certs_size : test_root_cert_size; - SslCredentialsOptions ssl_opts = {{roots_certs, roots_certs_size}, "", ""}; + use_prod_roots ? prod_roots_certs : test_root_cert; + SslCredentialsOptions ssl_opts = {roots_certs, "", ""}; std::unique_ptr<Credentials> creds = CredentialsFactory::SslCredentials(ssl_opts); diff --git a/tools/buildgen/build-cleaner.py b/tools/buildgen/build-cleaner.py new file mode 100755 index 0000000000000000000000000000000000000000..f9307360c328d5173a59009ff35513565730bfdb --- /dev/null +++ b/tools/buildgen/build-cleaner.py @@ -0,0 +1,63 @@ +#!/usr/bin/python +# produces cleaner build.json files + +import collections +import json +import os +import sys + +TEST = (os.environ.get('TEST', 'false') == 'true') + +_TOP_LEVEL_KEYS = ['settings', 'filegroups', 'libs', 'targets'] +_VERSION_KEYS = ['major', 'minor', 'micro', 'build'] +_ELEM_KEYS = [ + 'name', + 'build', + 'language', + 'public_headers', + 'headers', + 'src', + 'deps'] + +def rebuild_as_ordered_dict(indict, special_keys): + outdict = collections.OrderedDict() + for key in special_keys: + if key in indict: + outdict[key] = indict[key] + for key in sorted(indict.keys()): + if key in special_keys: continue + outdict[key] = indict[key] + return outdict + +def clean_elem(indict): + for name in ['public_headers', 'headers', 'src']: + if name not in indict: continue + inlist = indict[name] + protos = set(x for x in inlist if os.path.splitext(x)[1] == '.proto') + others = set(x for x in inlist if x not in protos) + indict[name] = sorted(protos) + sorted(others) + return rebuild_as_ordered_dict(indict, _ELEM_KEYS) + +for filename in sys.argv[1:]: + with open(filename) as f: + js = json.load(f) + js = rebuild_as_ordered_dict(js, _TOP_LEVEL_KEYS) + js['settings']['version'] = rebuild_as_ordered_dict( + js['settings']['version'], _VERSION_KEYS) + for grp in ['filegroups', 'libs', 'targets']: + if grp not in js: continue + js[grp] = sorted([clean_elem(x) for x in js[grp]], + key=lambda x: (x.get('language', '_'), x['name'])) + output = json.dumps(js, indent = 2) + # massage out trailing whitespace + lines = [] + for line in output.splitlines(): + lines.append(line.rstrip() + '\n') + output = ''.join(lines) + if TEST: + with open(filename) as f: + assert f.read() == output + else: + with open(filename, 'w') as f: + f.write(output) + diff --git a/tools/buildgen/generate_projects.sh b/tools/buildgen/generate_projects.sh index 42b161388a8b3e067a2f82bd7b6cb11a9eb38d62..2e0636fcbed13752ff433bbf52d1b1bd2cf6e05c 100755 --- a/tools/buildgen/generate_projects.sh +++ b/tools/buildgen/generate_projects.sh @@ -1,6 +1,6 @@ #!/bin/bash -set -x +set -e if [ "x$TEST" == "x" ] ; then TEST=false @@ -32,7 +32,7 @@ for dir in . ; do data=`for i in $json_files; do echo -n "-d $i "; done` if [ $TEST == true ] ; then actual_out=$out - out=`mktemp` + out=`mktemp /tmp/gentXXXXXX` fi $mako_renderer $plugins $data -o $out $file if [ $TEST == true ] ; then diff --git a/tools/buildgen/plugins/generate_vsprojects.py b/tools/buildgen/plugins/generate_vsprojects.py index 36eb8f7008e499aea33f18457109a33e0af393aa..021b84386821ef6dbe2339dece7711aa11671968 100755 --- a/tools/buildgen/plugins/generate_vsprojects.py +++ b/tools/buildgen/plugins/generate_vsprojects.py @@ -30,7 +30,7 @@ def mako_plugin(dictionary): projects = [project for project in projects if project.get('vs_project_guid', None)] ## Exclude C++ projects for now - projects = [project for project in projects if not project.get('c++', False)] + projects = [project for project in projects if not project.language == 'c++'] project_dict = dict([(p['name'], p) for p in projects]) diff --git a/tools/clang-format/clang-format-all.sh b/tools/clang-format/clang-format-all.sh index c9caea0d613fade0de8b7da8fefc8a4b02fd38f4..62228b0b015138724791b94f4f495aa41ba10b55 100755 --- a/tools/clang-format/clang-format-all.sh +++ b/tools/clang-format/clang-format-all.sh @@ -1,8 +1,9 @@ #!/bin/bash -set -ex +set -e +source $(dirname $0)/config.sh cd $(dirname $0)/../.. for dir in src test include do - find $dir -name '*.c' -or -name '*.cc' -or -name '*.h' | xargs clang-format -i + find $dir -name '*.c' -or -name '*.cc' -or -name '*.h' | xargs $CLANG_FORMAT -i done diff --git a/tools/clang-format/config.sh b/tools/clang-format/config.sh new file mode 100644 index 0000000000000000000000000000000000000000..3adf2678e7a422e5e32edb67997855d231822e5f --- /dev/null +++ b/tools/clang-format/config.sh @@ -0,0 +1,11 @@ +CLANG_FORMAT=clang-format-3.5 + +set -ex + +if not hash $CLANG_FORMAT 2>/dev/null; then + echo "$CLANG_FORMAT is needed but not installed" + echo "perhaps try:" + echo " sudo apt-get install $CLANG_FORMAT" + exit 1 +fi + diff --git a/tools/dockerfile/grpc_base/Dockerfile b/tools/dockerfile/grpc_base/Dockerfile index 45be17259355ac5230e7506d19b7d7bcfbf84ac2..be1b69b0dc552153d5b164eb65ec0611786597c3 100644 --- a/tools/dockerfile/grpc_base/Dockerfile +++ b/tools/dockerfile/grpc_base/Dockerfile @@ -13,6 +13,7 @@ RUN apt-get update && apt-get install -y \ libc6 \ libc6-dbg \ libc6-dev \ + libgtest-dev \ libtool \ make \ strace \ @@ -34,23 +35,13 @@ ENV CLOUD_SDK /google-cloud-sdk RUN $CLOUD_SDK/install.sh --usage-reporting=true --path-update=true --bash-completion=true --rc-path=/.bashrc --disable-installation-options ENV PATH $CLOUD_SDK/bin:$PATH -# Install gcompute-tools to allow access to private git-on-borg repos -RUN git clone https://gerrit.googlesource.com/gcompute-tools /var/local/git/gcompute-tools - -# Start the daemon that allows access to private git-on-borg repos -RUN /var/local/git/gcompute-tools/git-cookie-authdaemon - -# Install the grpc-tools scripts dir from git -RUN git clone https://team.googlesource.com/one-platform-grpc-team/grpc-tools /var/local/git/grpc-tools - -# Install the grpc-protobuf dir that has the protoc patch -RUN git clone https://team.googlesource.com/one-platform-grpc-team/protobuf /var/local/git/protobuf - -# Install the patched version of protoc -RUN cd /var/local/git/protobuf && \ - ./autogen.sh && \ - ./configure --prefix=/usr && \ - make && make check && make install && make clean +# Install a GitHub SSH service credential that gives access to the GitHub repo while it's private +# TODO: remove this once the repo is public +ADD .ssh .ssh +RUN chmod 600 .ssh/github.rsa +RUN mkdir -p $HOME/.ssh && echo 'Host github.com' > $HOME/.ssh/config +RUN echo " IdentityFile /.ssh/github.rsa" >> $HOME/.ssh/config +RUN echo 'StrictHostKeyChecking no' >> $HOME/.ssh/config # Define the default command. CMD ["bash"] diff --git a/tools/dockerfile/grpc_cxx/Dockerfile b/tools/dockerfile/grpc_cxx/Dockerfile index cf38e976b14429a7707577b26f15d2c200d36ee2..ea3a1dba8f1793067001757ed2509bf2ce2837d0 100644 --- a/tools/dockerfile/grpc_cxx/Dockerfile +++ b/tools/dockerfile/grpc_cxx/Dockerfile @@ -1,15 +1,18 @@ # Dockerfile for gRPC C++ FROM grpc/base -# Start the daemon that allows access to the protected git-on-borg repos -RUN /var/local/git/gcompute-tools/git-cookie-authdaemon - -RUN git clone https://team.googlesource.com/one-platform-grpc-team/grpc /var/local/git/grpc -RUN cd /var/local/git/grpc \ - && git pull --recurse-submodules \ - && git submodule update --init --recursive +# Get the source from GitHub +RUN git clone git@github.com:google/grpc.git /var/local/git/grpc +RUN cd /var/local/git/grpc && \ + git pull --recurse-submodules && \ + git submodule update --init --recursive +# Build the protobuf library; then the C core. +RUN cd /var/local/git/grpc/third_party/protobuf && \ + ./autogen.sh && \ + ./configure --prefix=/usr && \ + make -j12 && make check && make install && make clean RUN make install -C /var/local/git/grpc # Define the default command. -CMD ["bash"] \ No newline at end of file +CMD ["bash"] diff --git a/tools/dockerfile/grpc_php/Dockerfile b/tools/dockerfile/grpc_php/Dockerfile index 0e50af70a225da3cdcde8869ed29bc238aa31e27..177587669c6a7532797be70af7cefcfe23134dc3 100644 --- a/tools/dockerfile/grpc_php/Dockerfile +++ b/tools/dockerfile/grpc_php/Dockerfile @@ -1,9 +1,6 @@ # Dockerfile for gRPC PHP FROM grpc/php_base -# Start the daemon that allows access to the protected git-on-borg repos -RUN /var/local/git/gcompute-tools/git-cookie-authdaemon - RUN cd /var/local/git/grpc \ && git pull --recurse-submodules \ && git submodule update --init --recursive @@ -15,4 +12,4 @@ RUN cd /var/local/git/grpc/src/php/ext/grpc && git pull && phpize # Build the grpc PHP extension RUN cd /var/local/git/grpc/src/php/ext/grpc \ && ./configure \ - && make \ No newline at end of file + && make diff --git a/tools/dockerfile/grpc_php_base/Dockerfile b/tools/dockerfile/grpc_php_base/Dockerfile index 8ec90f48b8f99d189ed7ca94387100b320a41117..47266a310e381e6633744e90ae6e09da26b9710d 100644 --- a/tools/dockerfile/grpc_php_base/Dockerfile +++ b/tools/dockerfile/grpc_php_base/Dockerfile @@ -43,9 +43,10 @@ RUN cd /var/local \ && tar -xf php-5.5.17.tar.gz \ && cd php-5.5.17 \ && ./configure --with-zlib=/usr --with-libxml-dir=ext/libxml \ - && make && make install + && make -j12 && make install # Start the daemon that allows access to the protected git-on-borg repos +RUN git clone https://gerrit.googlesource.com/gcompute-tools /var/local/git/gcompute-tools RUN /var/local/git/gcompute-tools/git-cookie-authdaemon # Download the patched PHP protobuf so that PHP gRPC clients can be generated @@ -64,6 +65,18 @@ ENV PATH /usr/local/rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/s # rake: a ruby version of make used to build the PHP Protobuf extension RUN rvm all do gem install ronn rake +# Get the source from GitHub, this gets the protobuf library as well +RUN git clone git@github.com:google/grpc.git /var/local/git/grpc +RUN cd /var/local/git/grpc && \ + git pull --recurse-submodules && \ + git submodule update --init --recursive + +# Build and install the protobuf library +RUN cd /var/local/git/grpc/third_party/protobuf && \ + ./autogen.sh && \ + ./configure --prefix=/usr && \ + make -j12 && make check && make install && make clean + # Install the patched PHP protobuf so that PHP gRPC clients can be generated # from proto3 schemas. RUN cd /var/local/git/protobuf-php \ @@ -75,10 +88,7 @@ RUN wget https://phar.phpunit.de/phpunit.phar \ && chmod +x phpunit.phar \ && mv phpunit.phar /usr/local/bin/phpunit -RUN git clone https://team.googlesource.com/one-platform-grpc-team/grpc /var/local/git/grpc -RUN cd /var/local/git/grpc \ - && git submodule update --init --recursive - +# Build the C core RUN make static_c shared_c -j12 -C /var/local/git/grpc # Define the default command. diff --git a/tools/dockerfile/grpc_ruby/Dockerfile b/tools/dockerfile/grpc_ruby/Dockerfile index 9aa34bfcc99a94d0e02452a1fdecaeeb577250c5..43ec0183ca04bc436f8601e1675f839d259dcf1d 100644 --- a/tools/dockerfile/grpc_ruby/Dockerfile +++ b/tools/dockerfile/grpc_ruby/Dockerfile @@ -1,19 +1,14 @@ # Dockerfile for gRPC Ruby FROM grpc/ruby_base -# Start the daemon that allows access to the protected git-on-borg repos -RUN /var/local/git/gcompute-tools/git-cookie-authdaemon - +# Build the C libary RUN cd /var/local/git/grpc \ && git pull --recurse-submodules \ && git submodule update --init --recursive +# Build the C core. RUN make install_c -C /var/local/git/grpc -# Install the grpc gem locally with its dependencies and build the extension. -RUN /bin/bash -l -c 'cd /var/local/git/beefcake && bundle && gem build beefcake.gemspec && gem install beefcake' -RUN /bin/bash -l -c 'cd /var/local/git/grpc/src/ruby && bundle && rake compile:grpc && gem build grpc.gemspec && gem install grpc' - # TODO add a command to run the unittest tests when the bug below is fixed # - the tests fail due to an error in the C threading library: # they fail with 'ruby: __pthread_mutex_cond_lock_adjust for unknown reasons' at the end of a testcase diff --git a/tools/dockerfile/grpc_ruby_base/Dockerfile b/tools/dockerfile/grpc_ruby_base/Dockerfile index ad14e43ec7b6730ce2caaf1c1ea72770a228527d..b2af9d716069112381dae472cb37327599fd3b12 100644 --- a/tools/dockerfile/grpc_ruby_base/Dockerfile +++ b/tools/dockerfile/grpc_ruby_base/Dockerfile @@ -31,15 +31,6 @@ RUN apt-get update && apt-get install -y \ sqlite3 \ zlib1g-dev - -# Start the daemon that allows access to the protected git-on-borg repos -RUN /var/local/git/gcompute-tools/git-cookie-authdaemon - -# Download the patched Ruby protobuf (beefcake) so that Ruby gRPC clients can -# be generated from proto3 schemas. -RUN git clone https://team.googlesource.com/one-platform-grpc-team/grpc-ruby-beefcake \ - /var/local/git/beefcake - # Install RVM, use this to install ruby RUN gpg --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3 # Needed for RVM RUN /bin/bash -l -c "curl -L get.rvm.io | bash -s stable" @@ -52,8 +43,17 @@ RUN /bin/bash -l -c "echo 'source /home/grpc_ruby/.rvm/scripts/rvm' >> ~/.bashrc RUN /bin/bash -l -c "echo 'rvm --default use ruby-2.1' >> ~/.bashrc" RUN /bin/bash -l -c "gem install bundler --no-ri --no-rdoc" -RUN git clone https://team.googlesource.com/one-platform-grpc-team/grpc /var/local/git/grpc -RUN cd /var/local/git/grpc \ - && git submodule update --init --recursive +# Get the source from GitHub +RUN git clone git@github.com:google/grpc.git /var/local/git/grpc +RUN cd /var/local/git/grpc && \ + git pull --recurse-submodules && \ + git submodule update --init --recursive + +# Build and install the protobuf library +RUN cd /var/local/git/grpc/third_party/protobuf && \ + ./autogen.sh && \ + ./configure --prefix=/usr && \ + make -j12 && make check && make install && make clean -RUN make static_c shared_c -C /var/local/git/grpc \ No newline at end of file +# Build the C core +RUN make static_c shared_c -j12 -C /var/local/git/grpc diff --git a/tools/gce_setup/grpc_docker.sh b/tools/gce_setup/grpc_docker.sh index c5d02d77a38488d774ae6ca35e572cb8e8bb1f5f..bf776126b5af45584e69ac7d0e1fd7d9650d5e67 100755 --- a/tools/gce_setup/grpc_docker.sh +++ b/tools/gce_setup/grpc_docker.sh @@ -85,67 +85,104 @@ grpc_add_docker_user() { gcloud compute $project_opt ssh $zone_opt $host --command "$ssh_cmd" } -# Updates a docker image specified in a local dockerfile via the docker -# container GCE instance. -# -# the docker container GCE instance -# - should have been setup using ./new_grpc_docker_instance -# - so will have /var/local/startup_scripts/shared_startup_funcs.sh, a copy of -# ./shared_startup_funcs.sh -# -# grpc_update_image gs://bucket/path/to/dockerfile parent \. -# image_label path/to/docker_dir docker_gce_instance [project] [zone] -grpc_update_image() { - _grpc_ensure_gcloud_ssh || return 1; - local gs_root_uri=$1 - [[ -n $gs_root_uri ]] || { - echo "$FUNCNAME: missing arg: gs_root_uri" 1>&2 - return 1 - } +_grpc_update_image_args() { + # default the host, root storage uri and docker file root + grpc_gs_root='gs://tmp-grpc-dev/admin/' + grpc_dockerfile_root='tools/dockerfile' + grpc_gce_script_root='tools/gce_setup' + host='grpc-docker-builder' - local image_label=$2 - [[ -n $image_label ]] || { - echo "$FUNCNAME: missing arg: host" 1>&2 - return 1 - } + # see if -p or -z is used to override the the project or zone + local OPTIND + local OPTARG + while getopts :r:d:h name + do + case $name in + d) grpc_dockerfile_root=$OPTARG ;; + r) grpc_gs_root=$OPTARG ;; + s) grpc_gce_script_root=$OPTARG ;; + h) host=$OPTARG ;; + :) continue ;; # ignore -r or -d without args, just use the defaults + \?) echo "-$OPTARG: unknown flag; it's ignored" 1>&2; continue ;; + esac + done + shift $((OPTIND-1)) - local docker_dir=$3 - [[ -n $docker_dir ]] || { - echo "$FUNCNAME: missing arg: docker_dir" 1>&2 + [[ -d $grpc_dockerfile_root ]] || { + echo "Could not locate dockerfile root dir: $grpc_dockerfile_root" 1>&2 return 1 } - [[ -d $docker_dir ]] || { - echo "could find directory $docker_dir" 1>&2 + + [[ -d $grpc_gce_script_root ]] || { + echo "Could not locate gce script dir: $grpc_gce_script_root" 1>&2 return 1 } - local docker_parent_dir=$(dirname $docker_dir) - local gce_docker_dir="/var/local/dockerfile/$(basename $docker_dir)" - local host=$4 - [[ -n $host ]] || { - echo "$FUNCNAME: missing arg: host" 1>&2 + # the suffix is required and can't be defaulted + # the suffix has two roles: + # - images are labelled grpc/<label_suffix> + # - the dockerfile is for an image is dockerfile_root/grpc_<label_suffix> + [[ -n $1 ]] && { + label_suffix=$1 + shift + } || { + echo "$FUNCNAME: missing arg: label_suffix (e.g cxx,base,ruby,java_base)" 1>&2 return 1 } +} - local project=$5 - local project_opt='' - [[ -n $project ]] && project_opt=" --project $project" - - local zone=$6 - local zone_opt='' - [[ -n $zone ]] && zone_opt=" --zone $zone" +# Updates a docker image specified in a local dockerfile via the docker +# container GCE instance. +# +# the docker container GCE instance +# - should have been setup using ./new_grpc_docker_instance +# +# There are options for +# +# call-seq: +# grpc_update_image php_base +# grpc_update_image cxx # rebuilds the cxx image +# +grpc_update_image() { + _grpc_ensure_gcloud_ssh || return 1; - local func_lib="/var/local/startup_scripts/shared_startup_funcs.sh" - local ssh_cmd="source $func_lib" + # set up by _grpc_update_args + local host grpc_gs_root grpc_gce_script_root grpc_dockerfile_root label_suffix + local grpc_zone grpc_project dry_run # set by _grpc_set_project_and_zone + _grpc_set_project_and_zone -f _grpc_update_image_args "$@" || return 1 + local project_opt="--project $grpc_project" + local zone_opt="--zone $grpc_zone" + local image_label="grpc/$label_suffix" + local docker_dir_basename="grpc_$label_suffix" + local gce_docker_dir="/var/local/dockerfile/${docker_dir_basename}" + + # Set up and run the SSH command that builds the image + local func_lib="shared_startup_funcs.sh" + local gce_func_lib="/var/local/startup_scripts/$func_lib" + local ssh_cmd="source $gce_func_lib" local ssh_cmd+=" && grpc_dockerfile_refresh $image_label $gce_docker_dir" + echo "will run:" + echo " $ssh_cmd" + echo "on $host" + [[ $dry_run == 1 ]] && return 0 # don't run the command on a dry run + + # Update the remote copy of the GCE func library. + local src_func_lib="$grpc_gce_script_root/$func_lib" + local rmt_func_lib="$host:$gce_func_lib" + gcloud compute copy-files $src_func_lib $rmt_func_lib $project_opt $zone_opt || return 1 + + # Update the remote version of the docker func. + local src_docker_dir="$grpc_dockerfile_root/$docker_dir_basename" + local rmt_docker_root="$host:/var/local/dockerfile" + gcloud compute copy-files $src_docker_dir $rmt_docker_root $project_opt $zone_opt || return 1 - grpc_push_dockerfiles $docker_parent_dir $gs_root_uri || return 1 gcloud compute $project_opt ssh $zone_opt $host --command "$ssh_cmd" } # gce_has_instance checks if a project contains a named instance # -# gce_has_instance <project> <instance_name> +# call-seq: +# gce_has_instance <project> <instance_name> gce_has_instance() { local project=$1 [[ -n $project ]] || { echo "$FUNCNAME: missing arg: project" 1>&2; return 1; } @@ -202,13 +239,19 @@ gce_find_internal_ip() { # - is set to the value gcloud config value for project if that's present # - it defaults to stoked-keyword-656 (the grpc cloud testing project) # - it can be overridden by passing -p <other value> -grpc_set_project_and_zone() { +_grpc_set_project_and_zone() { + # can be set to 1 by passing -n in the args dry_run=0 + + # by default; grpc_zone == gcloud config value || asia-east1-a + # - can be assigned via -p<project> in the args grpc_zone=$(gcloud config list compute/zone --format text \ | sed -e 's/ \+/ /g' | cut -d' ' -f 2) # pick a known zone as a default [[ $grpc_zone == 'None' ]] && grpc_zone='asia-east1-a' + # grpc_project == gcloud config value || stoked-keyword-656 + # - can be assigned via -z<zone> in the args grpc_project=$(gcloud config list project --format text \ | sed -e 's/ \+/ /g' | cut -d' ' -f 2) # pick an known zone as a default @@ -349,45 +392,47 @@ grpc_interop_test_args() { } } -grpc_update_docker_images_args() { - [[ -n $1 ]] && { # host - host=$1 - shift - } || { - echo "$FUNCNAME: missing arg: host" 1>&2 +grpc_sync_images_args() { + [[ $# -lt 1 ]] && { + echo "$FUNCNAME: missing arg: host1 [host2 ... hostN]" 1>&2 return 1 } + grpc_hosts="$@" } # Updates all the known docker images on a host.. # # call-seq; -# grpc_update_docker_images <server_name> +# grpc_sync_images <server_name1>, <server_name2> .. <server_name3> # # Updates the GCE docker instance <server_name> -grpc_update_docker_images() { +grpc_sync_images() { _grpc_ensure_gcloud_ssh || return 1; # declare vars local so that they don't pollute the shell environment # where they this func is used. - local grpc_zone grpc_project dry_run # set by grpc_set_project_and_zone - # set by grpc_update_docker_images_args - local host + local grpc_zone grpc_project dry_run # set by _grpc_set_project_and_zone + # set by grpc_sync_images + local grpc_hosts # set the project zone and check that all necessary args are provided - grpc_set_project_and_zone -f grpc_update_docker_images_args "$@" || return 1 - gce_has_instance $grpc_project $host || return 1; + _grpc_set_project_and_zone -f grpc_sync_images_args "$@" || return 1 local func_lib="/var/local/startup_scripts/shared_startup_funcs.sh" local cmd="source $func_lib && grpc_docker_pull_known" local project_opt="--project $grpc_project" local zone_opt="--zone $grpc_zone" - local ssh_cmd="bash -l -c \"$cmd\"" - echo "will run:" - echo " $ssh_cmd" - echo "on $host" - [[ $dry_run == 1 ]] && return 0 # don't run the command on a dry run - gcloud compute $project_opt ssh $zone_opt $host --command "$cmd" + local host + for host in $grpc_hosts + do + gce_has_instance $grpc_project $h || return 1; + local ssh_cmd="bash -l -c \"$cmd\"" + echo "will run:" + echo " $ssh_cmd" + echo "on $host" + [[ $dry_run == 1 ]] && continue # don't run the command on a dry run + gcloud compute $project_opt ssh $zone_opt $host --command "$cmd" + done } grpc_launch_server_args() { @@ -427,15 +472,17 @@ grpc_launch_server_args() { grpc_launch_server() { # declare vars local so that they don't pollute the shell environment # where they this func is used. - local grpc_zone grpc_project dry_run # set by grpc_set_project_and_zone + local grpc_zone grpc_project dry_run # set by _grpc_set_project_and_zone # set by grpc_launch_server_args local docker_label docker_name host grpc_port # set the project zone and check that all necessary args are provided - grpc_set_project_and_zone -f grpc_launch_server_args "$@" || return 1 + _grpc_set_project_and_zone -f grpc_launch_server_args "$@" || return 1 gce_has_instance $grpc_project $host || return 1; - cmd="sudo docker run -d --name $docker_name" + cmd="sudo docker kill $docker_name > /dev/null 2>&1; " + cmd+="sudo docker rm $docker_name > /dev/null 2>&1; " + cmd+="sudo docker run -d --name $docker_name" cmd+=" -p $grpc_port:$grpc_port $docker_label" local project_opt="--project $grpc_project" local zone_opt="--zone $grpc_zone" @@ -491,12 +538,12 @@ grpc_interop_test() { # declare vars local so that they don't pollute the shell environment # where they this func is used. - local grpc_zone grpc_project dry_run # set by grpc_set_project_and_zone + local grpc_zone grpc_project dry_run # set by _grpc_set_project_and_zone # grpc_interop_test_args local test_case host grpc_gen_test_cmd grpc_server grpc_port # set the project zone and check that all necessary args are provided - grpc_set_project_and_zone -f grpc_interop_test_args "$@" || return 1 + _grpc_set_project_and_zone -f grpc_interop_test_args "$@" || return 1 gce_has_instance $grpc_project $host || return 1; local addr=$(gce_find_internal_ip $grpc_project $grpc_server) diff --git a/tools/gce_setup/shared_startup_funcs.sh b/tools/gce_setup/shared_startup_funcs.sh index 8bd62e213e5a62333fd2da3cbda85e67f4a66c41..9c747466a911118908b637ad2aa8e17c571fdd79 100755 --- a/tools/gce_setup/shared_startup_funcs.sh +++ b/tools/gce_setup/shared_startup_funcs.sh @@ -388,7 +388,7 @@ grpc_docker_pull_known() { # grpc_dockerfile_install "grpc/image" /var/local/dockerfile/grpc_image grpc_dockerfile_install() { local image_label=$1 - [[ -n $image_label ]] || { echo "missing arg: image_label" >&2; return 1; } + [[ -n $image_label ]] || { echo "$FUNCNAME: missing arg: image_label" >&2; return 1; } local docker_img_url=0.0.0.0:5000/$image_label local dockerfile_dir=$2 @@ -400,19 +400,25 @@ grpc_dockerfile_install() { [[ $cache == "cache=1" ]] && { cache_opt=''; } [[ $cache == "cache=true" ]] && { cache_opt=''; } - [[ -d $dockerfile_dir ]] || { echo "not a valid dir: $dockerfile_dir"; return 1; } + [[ -d $dockerfile_dir ]] || { echo "$FUNCNAME: not a valid dir: $dockerfile_dir"; return 1; } + + # For grpc/base, sync the ssh key into the .ssh dir in the dockerfile context + + [[ $image_label == "grpc/base" ]] && { + grpc_docker_sync_github_key $dockerfile_dir/.ssh || return 1; + } # TODO(temiola): maybe make cache/no-cache a func option? sudo docker build $cache_opt -t $image_label $dockerfile_dir || { - echo "docker op error: build of $image_label <- $dockerfile_dir" + echo "$FUNCNAME:: build of $image_label <- $dockerfile_dir" return 1 } sudo docker tag $image_label $docker_img_url || { - echo "docker op error: tag of $docker_img_url" + echo "$FUNCNAME: failed to tag $docker_img_url as $image_label" return 1 } sudo docker push $docker_img_url || { - echo "docker op error: push of $docker_img_url" + echo "$FUNCNAME: failed to push $docker_img_url" return 1 } } @@ -423,10 +429,36 @@ grpc_dockerfile_install() { # requires: $2 is a local directory containing a Dockerfile # requires: there is a docker registry running on 5000, e.g, grpc_docker_launch_registry was run # -# invokes pull_dockerfiles to refresh them all from cloud storage, then grpc_dockerfile_install -# -# grpc_dockerfile_refresh "grpc/mylabel" /var/local/dockerfile/dir_containing_my_dockerfile +# call-seq: +# grpc_dockerfile_refresh "grpc/mylabel" /var/local/dockerfile/dir_containing_my_dockerfile grpc_dockerfile_refresh() { - grpc_dockerfile_pull || return 1 grpc_dockerfile_install "$@" } + +# grpc_docker_sync_github_key. +# +# Copies the docker github key from GCS to the target dir +# +# call-seq: +# grpc_docker_sync_github_key <target_dir> +grpc_docker_sync_github_key() { + local target_dir=$1 + [[ -n $target_dir ]] || { echo "$FUNCNAME: missing arg: target_dir" >&2; return 1; } + + # determine the admin root; the parent of the dockerfile root, + local gs_dockerfile_root=$(load_metadata "attributes/gs_dockerfile_root") + [[ -n $gs_dockerfile_root ]] || { + echo "$FUNCNAME: missing metadata: gs_dockerfile_root" >&2 + return 1 + } + local gcs_admin_root=$(dirname $gs_dockerfile_root) + + # cp the file from gsutil to a known local area + local gcs_key_path=$gcs_admin_root/github/ssh_key + local local_key_path=$target_dir/github.rsa + mkdir -p $target_dir || { + echo "$FUNCNAME: could not create dir: $target_dir" 1>&2 + return 1 + } + gsutil cp $src $gcs_key_path $local_key_path +} diff --git a/tools/run_tests/build_php.sh b/tools/run_tests/build_php.sh new file mode 100755 index 0000000000000000000000000000000000000000..6841656bdb8d3734c2724438aaf5606f5ef0ce2e --- /dev/null +++ b/tools/run_tests/build_php.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +set -ex + +# change to grpc repo root +cd $(dirname $0)/../.. + +root=`pwd` +export GRPC_LIB_SUBDIR=libs/opt + +# make the libraries +make -j static_c + +# build php +cd src/php + +cd ext/grpc +phpize +./configure --enable-grpc=$root +make + diff --git a/tools/run_tests/build_python.sh b/tools/run_tests/build_python.sh new file mode 100755 index 0000000000000000000000000000000000000000..6899ac7fe3e5b9731d5278a713323769456620ac --- /dev/null +++ b/tools/run_tests/build_python.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +set -ex + +# change to grpc repo root +cd $(dirname $0)/../.. + +root=`pwd` +virtualenv python2.7_virtual_environment +python2.7_virtual_environment/bin/pip install enum34==1.0.4 futures==2.2.0 diff --git a/tools/run_tests/jobset.py b/tools/run_tests/jobset.py index bb1c862f1addaef32e299c0d1206cc35d567161b..8f16a4ff2c2887f4207cf3d75fbeb5177794c240 100755 --- a/tools/run_tests/jobset.py +++ b/tools/run_tests/jobset.py @@ -1,6 +1,8 @@ """Run a group of subprocesses and then finish.""" +import hashlib import multiprocessing +import os import random import subprocess import sys @@ -75,30 +77,43 @@ def message(tag, message, explanatory_text=None, do_newline=False): sys.stdout.flush() +def which(filename): + if '/' in filename: + return filename + for path in os.environ['PATH'].split(os.pathsep): + if os.path.exists(os.path.join(path, filename)): + return os.path.join(path, filename) + raise Exception('%s not found' % filename) + + class Job(object): """Manages one job.""" - def __init__(self, cmdline, newline_on_success): - self._cmdline = ' '.join(cmdline) + def __init__(self, cmdline, bin_hash, newline_on_success): + self._cmdline = cmdline + self._bin_hash = bin_hash self._tempfile = tempfile.TemporaryFile() self._process = subprocess.Popen(args=cmdline, stderr=subprocess.STDOUT, stdout=self._tempfile) self._state = _RUNNING self._newline_on_success = newline_on_success - message('START', self._cmdline) + message('START', ' '.join(self._cmdline)) - def state(self): + def state(self, update_cache): """Poll current state of the job. Prints messages at completion.""" if self._state == _RUNNING and self._process.poll() is not None: if self._process.returncode != 0: self._state = _FAILURE self._tempfile.seek(0) stdout = self._tempfile.read() - message('FAILED', '%s [ret=%d]' % (self._cmdline, self._process.returncode), stdout) + message('FAILED', '%s [ret=%d]' % ( + ' '.join(self._cmdline), self._process.returncode), stdout) else: self._state = _SUCCESS - message('PASSED', '%s' % self._cmdline, do_newline=self._newline_on_success) + message('PASSED', '%s' % ' '.join(self._cmdline), + do_newline=self._newline_on_success) + update_cache.finished(self._cmdline, self._bin_hash) return self._state def kill(self): @@ -110,7 +125,7 @@ class Job(object): class Jobset(object): """Manages one run of jobs.""" - def __init__(self, check_cancelled, maxjobs, newline_on_success): + def __init__(self, check_cancelled, maxjobs, newline_on_success, cache): self._running = set() self._check_cancelled = check_cancelled self._cancelled = False @@ -118,6 +133,7 @@ class Jobset(object): self._completed = 0 self._maxjobs = maxjobs self._newline_on_success = newline_on_success + self._cache = cache def start(self, cmdline): """Start a job. Return True on success, False on failure.""" @@ -125,7 +141,10 @@ class Jobset(object): if self.cancelled(): return False self.reap() if self.cancelled(): return False - self._running.add(Job(cmdline, self._newline_on_success)) + with open(which(cmdline[0])) as f: + bin_hash = hashlib.sha1(f.read()).hexdigest() + if self._cache.should_run(cmdline, bin_hash): + self._running.add(Job(cmdline, bin_hash, self._newline_on_success)) return True def reap(self): @@ -133,7 +152,7 @@ class Jobset(object): while self._running: dead = set() for job in self._running: - st = job.state() + st = job.state(self._cache) if st == _RUNNING: continue if st == _FAILURE: self._failures += 1 dead.add(job) @@ -141,8 +160,8 @@ class Jobset(object): self._completed += 1 self._running.remove(job) if dead: return - message('WAITING', '%d jobs running, %d complete' % ( - len(self._running), self._completed)) + message('WAITING', '%d jobs running, %d complete, %d failed' % ( + len(self._running), self._completed, self._failures)) time.sleep(0.1) def cancelled(self): @@ -165,13 +184,24 @@ def _never_cancelled(): return False +# cache class that caches nothing +class NoCache(object): + def should_run(self, cmdline, bin_hash): + return True + + def finished(self, cmdline, bin_hash): + pass + + def run(cmdlines, check_cancelled=_never_cancelled, maxjobs=None, - newline_on_success=False): + newline_on_success=False, + cache=None): js = Jobset(check_cancelled, maxjobs if maxjobs is not None else _DEFAULT_MAX_JOBS, - newline_on_success) + newline_on_success, + cache if cache is not None else NoCache()) for cmdline in shuffle_iteratable(cmdlines): if not js.start(cmdline): break diff --git a/tools/run_tests/run_python.sh b/tools/run_tests/run_python.sh new file mode 100755 index 0000000000000000000000000000000000000000..0d5ed0238dbaeef7e512d83f96cf34afbb750d56 --- /dev/null +++ b/tools/run_tests/run_python.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +set -ex + +# change to grpc repo root +cd $(dirname $0)/../.. + +root=`pwd` +python2.7_virtual_environment/bin/python2.7 -B -m unittest discover -s src/python -p '*.py' +python3.4 -B -m unittest discover -s src/python -p '*.py' diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py index 0536ed68511327d11b2476302dc6b5f0fb895700..da849f04cb0f5c0dfaaa81c58ad975bfed3ff1fb 100755 --- a/tools/run_tests/run_tests.py +++ b/tools/run_tests/run_tests.py @@ -4,18 +4,23 @@ import argparse import glob import itertools +import json import multiprocessing +import os import sys import time import jobset import watch_dirs + # SimpleConfig: just compile with CONFIG=config, and run the binary to test class SimpleConfig(object): + def __init__(self, config): self.build_config = config self.maxjobs = 32 * multiprocessing.cpu_count() + self.allow_hashing = (config != 'gcov') def run_command(self, binary): return [binary] @@ -23,30 +28,88 @@ class SimpleConfig(object): # ValgrindConfig: compile with some CONFIG=config, but use valgrind to run class ValgrindConfig(object): + def __init__(self, config, tool): self.build_config = config self.tool = tool self.maxjobs = 4 * multiprocessing.cpu_count() + self.allow_hashing = False def run_command(self, binary): return ['valgrind', binary, '--tool=%s' % self.tool] +class CLanguage(object): + + def __init__(self, make_target, test_lang): + self.allow_hashing = True + self.make_target = make_target + with open('tools/run_tests/tests.json') as f: + js = json.load(f) + self.binaries = [tgt['name'] + for tgt in js + if tgt['language'] == test_lang] + + def test_binaries(self, config): + return ['bins/%s/%s' % (config, binary) for binary in self.binaries] + + def make_targets(self): + return ['buildtests_%s' % self.make_target] + + def build_steps(self): + return [] + + +class PhpLanguage(object): + + def __init__(self): + self.allow_hashing = False + + def test_binaries(self, config): + return ['src/php/bin/run_tests.sh'] + + def make_targets(self): + return [] + + def build_steps(self): + return [['tools/run_tests/build_php.sh']] + + +class PythonLanguage(object): + + def __init__(self): + self.allow_hashing = False + + def test_binaries(self, config): + return ['tools/run_tests/run_python.sh'] + + def make_targets(self): + return[] + + def build_steps(self): + return [['tools/run_tests/build_python.sh']] + + # different configurations we can run under _CONFIGS = { - 'dbg': SimpleConfig('dbg'), - 'opt': SimpleConfig('opt'), - 'tsan': SimpleConfig('tsan'), - 'msan': SimpleConfig('msan'), - 'asan': SimpleConfig('asan'), - 'gcov': SimpleConfig('gcov'), - 'memcheck': ValgrindConfig('dbg', 'memcheck'), - 'helgrind': ValgrindConfig('dbg', 'helgrind') - } + 'dbg': SimpleConfig('dbg'), + 'opt': SimpleConfig('opt'), + 'tsan': SimpleConfig('tsan'), + 'msan': SimpleConfig('msan'), + 'asan': SimpleConfig('asan'), + 'gcov': SimpleConfig('gcov'), + 'memcheck': ValgrindConfig('valgrind', 'memcheck'), + 'helgrind': ValgrindConfig('dbg', 'helgrind') + } _DEFAULT = ['dbg', 'opt'] -_MAKE_TEST_TARGETS = ['buildtests_c', 'buildtests_cxx'] +_LANGUAGES = { + 'c++': CLanguage('cxx', 'c++'), + 'c': CLanguage('c', 'c'), + 'php': PhpLanguage(), + 'python': PythonLanguage(), +} # parse command line argp = argparse.ArgumentParser(description='Run grpc tests.') @@ -54,7 +117,6 @@ argp.add_argument('-c', '--config', choices=['all'] + sorted(_CONFIGS.keys()), nargs='+', default=_DEFAULT) -argp.add_argument('-t', '--test-filter', nargs='*', default=['*']) argp.add_argument('-n', '--runs_per_test', default=1, type=int) argp.add_argument('-f', '--forever', default=False, @@ -64,6 +126,10 @@ argp.add_argument('--newline_on_success', default=False, action='store_const', const=True) +argp.add_argument('-l', '--language', + choices=sorted(_LANGUAGES.keys()), + nargs='+', + default=sorted(_LANGUAGES.keys())) args = argp.parse_args() # grab config @@ -72,41 +138,87 @@ run_configs = set(_CONFIGS[cfg] _CONFIGS.iterkeys() if x == 'all' else [x] for x in args.config)) build_configs = set(cfg.build_config for cfg in run_configs) -filters = args.test_filter + +make_targets = [] +languages = set(_LANGUAGES[l] for l in args.language) +build_steps = [['make', + '-j', '%d' % (multiprocessing.cpu_count() + 1), + 'CONFIG=%s' % cfg] + list(set( + itertools.chain.from_iterable(l.make_targets() + for l in languages))) + for cfg in build_configs] + list( + itertools.chain.from_iterable(l.build_steps() + for l in languages)) + runs_per_test = args.runs_per_test forever = args.forever -def _build_and_run(check_cancelled, newline_on_success, forever=False): +class TestCache(object): + """Cache for running tests.""" + + def __init__(self): + self._last_successful_run = {} + + def should_run(self, cmdline, bin_hash): + cmdline = ' '.join(cmdline) + if cmdline not in self._last_successful_run: + return True + if self._last_successful_run[cmdline] != bin_hash: + return True + return False + + def finished(self, cmdline, bin_hash): + self._last_successful_run[' '.join(cmdline)] = bin_hash + + def dump(self): + return [{'cmdline': k, 'hash': v} + for k, v in self._last_successful_run.iteritems()] + + def parse(self, exdump): + self._last_successful_run = dict((o['cmdline'], o['hash']) for o in exdump) + + def save(self): + with open('.run_tests_cache', 'w') as f: + f.write(json.dumps(self.dump())) + + def maybe_load(self): + if os.path.exists('.run_tests_cache'): + with open('.run_tests_cache') as f: + self.parse(json.loads(f.read())) + + +def _build_and_run(check_cancelled, newline_on_success, cache): """Do one pass of building & running tests.""" # build latest, sharing cpu between the various makes - if not jobset.run( - (['make', - '-j', '%d' % (multiprocessing.cpu_count() + 1), - 'CONFIG=%s' % cfg] + _MAKE_TEST_TARGETS - for cfg in build_configs), - check_cancelled, maxjobs=1): + if not jobset.run(build_steps): return 1 # run all the tests - if not jobset.run( - itertools.ifilter( - lambda x: x is not None, ( - config.run_command(x) - for config in run_configs - for filt in filters - for x in itertools.chain.from_iterable(itertools.repeat( - glob.glob('bins/%s/%s_test' % ( - config.build_config, filt)), - runs_per_test)))), - check_cancelled, - newline_on_success=newline_on_success, - maxjobs=min(c.maxjobs for c in run_configs)): + one_run = dict( + (' '.join(config.run_command(x)), config.run_command(x)) + for config in run_configs + for language in args.language + for x in _LANGUAGES[language].test_binaries(config.build_config) + ).values() + all_runs = itertools.chain.from_iterable( + itertools.repeat(one_run, runs_per_test)) + if not jobset.run(all_runs, check_cancelled, + newline_on_success=newline_on_success, + maxjobs=min(c.maxjobs for c in run_configs), + cache=cache): return 2 return 0 +test_cache = (None + if not all(x.allow_hashing + for x in itertools.chain(languages, run_configs)) + else TestCache()) +if test_cache: + test_cache.maybe_load() + if forever: success = True while True: @@ -114,21 +226,24 @@ if forever: initial_time = dw.most_recent_change() have_files_changed = lambda: dw.most_recent_change() != initial_time previous_success = success - success = _build_and_run(have_files_changed, + success = _build_and_run(check_cancelled=have_files_changed, newline_on_success=False, - forever=True) == 0 + cache=test_cache) == 0 if not previous_success and success: jobset.message('SUCCESS', 'All tests are now passing properly', do_newline=True) jobset.message('IDLE', 'No change detected') + if test_cache: test_cache.save() while not have_files_changed(): time.sleep(1) else: - result = _build_and_run(lambda: False, - newline_on_success=args.newline_on_success) + result = _build_and_run(check_cancelled=lambda: False, + newline_on_success=args.newline_on_success, + cache=test_cache) if result == 0: jobset.message('SUCCESS', 'All tests passed', do_newline=True) else: jobset.message('FAILED', 'Some tests failed', do_newline=True) + if test_cache: test_cache.save() sys.exit(result) diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json new file mode 100644 index 0000000000000000000000000000000000000000..90571eaec6c229fe8062e44ca9738b9889c9b2ff --- /dev/null +++ b/tools/run_tests/tests.json @@ -0,0 +1,809 @@ + + +[ + { + "language": "c", + "name": "alarm_heap_test" + }, + { + "language": "c", + "name": "alarm_list_test" + }, + { + "language": "c", + "name": "alarm_test" + }, + { + "language": "c", + "name": "alpn_test" + }, + { + "language": "c", + "name": "bin_encoder_test" + }, + { + "language": "c", + "name": "census_hash_table_test" + }, + { + "language": "c", + "name": "census_statistics_multiple_writers_circular_buffer_test" + }, + { + "language": "c", + "name": "census_statistics_multiple_writers_test" + }, + { + "language": "c", + "name": "census_statistics_performance_test" + }, + { + "language": "c", + "name": "census_statistics_quick_test" + }, + { + "language": "c", + "name": "census_statistics_small_log_test" + }, + { + "language": "c", + "name": "census_stub_test" + }, + { + "language": "c", + "name": "census_window_stats_test" + }, + { + "language": "c", + "name": "chttp2_status_conversion_test" + }, + { + "language": "c", + "name": "chttp2_stream_encoder_test" + }, + { + "language": "c", + "name": "chttp2_stream_map_test" + }, + { + "language": "c", + "name": "chttp2_transport_end2end_test" + }, + { + "language": "c", + "name": "dualstack_socket_test" + }, + { + "language": "c", + "name": "echo_test" + }, + { + "language": "c", + "name": "fd_posix_test" + }, + { + "language": "c", + "name": "fling_stream_test" + }, + { + "language": "c", + "name": "fling_test" + }, + { + "language": "c", + "name": "gpr_cancellable_test" + }, + { + "language": "c", + "name": "gpr_cmdline_test" + }, + { + "language": "c", + "name": "gpr_histogram_test" + }, + { + "language": "c", + "name": "gpr_host_port_test" + }, + { + "language": "c", + "name": "gpr_log_test" + }, + { + "language": "c", + "name": "gpr_slice_buffer_test" + }, + { + "language": "c", + "name": "gpr_slice_test" + }, + { + "language": "c", + "name": "gpr_string_test" + }, + { + "language": "c", + "name": "gpr_sync_test" + }, + { + "language": "c", + "name": "gpr_thd_test" + }, + { + "language": "c", + "name": "gpr_time_test" + }, + { + "language": "c", + "name": "gpr_useful_test" + }, + { + "language": "c", + "name": "grpc_base64_test" + }, + { + "language": "c", + "name": "grpc_byte_buffer_reader_test" + }, + { + "language": "c", + "name": "grpc_channel_stack_test" + }, + { + "language": "c", + "name": "grpc_completion_queue_test" + }, + { + "language": "c", + "name": "grpc_credentials_test" + }, + { + "language": "c", + "name": "grpc_json_token_test" + }, + { + "language": "c", + "name": "grpc_stream_op_test" + }, + { + "language": "c", + "name": "hpack_parser_test" + }, + { + "language": "c", + "name": "hpack_table_test" + }, + { + "language": "c", + "name": "httpcli_format_request_test" + }, + { + "language": "c", + "name": "httpcli_parser_test" + }, + { + "language": "c", + "name": "httpcli_test" + }, + { + "language": "c", + "name": "lame_client_test" + }, + { + "language": "c", + "name": "message_compress_test" + }, + { + "language": "c", + "name": "metadata_buffer_test" + }, + { + "language": "c", + "name": "murmur_hash_test" + }, + { + "language": "c", + "name": "no_server_test" + }, + { + "language": "c", + "name": "poll_kick_test" + }, + { + "language": "c", + "name": "resolve_address_test" + }, + { + "language": "c", + "name": "secure_endpoint_test" + }, + { + "language": "c", + "name": "sockaddr_utils_test" + }, + { + "language": "c", + "name": "tcp_client_posix_test" + }, + { + "language": "c", + "name": "tcp_posix_test" + }, + { + "language": "c", + "name": "tcp_server_posix_test" + }, + { + "language": "c", + "name": "time_averaged_stats_test" + }, + { + "language": "c", + "name": "time_test" + }, + { + "language": "c", + "name": "timeout_encoding_test" + }, + { + "language": "c", + "name": "transport_metadata_test" + }, + { + "language": "c++", + "name": "channel_arguments_test" + }, + { + "language": "c++", + "name": "credentials_test" + }, + { + "language": "c++", + "name": "end2end_test" + }, + { + "language": "c++", + "name": "tips_client_test" + }, + { + "language": "c++", + "name": "status_test" + }, + { + "language": "c++", + "name": "sync_client_async_server_test" + }, + { + "language": "c++", + "name": "thread_pool_test" + }, + { + "language": "c", + "name": "chttp2_fake_security_cancel_after_accept_test" + }, + { + "language": "c", + "name": "chttp2_fake_security_cancel_after_accept_and_writes_closed_test" + }, + { + "language": "c", + "name": "chttp2_fake_security_cancel_after_invoke_test" + }, + { + "language": "c", + "name": "chttp2_fake_security_cancel_before_invoke_test" + }, + { + "language": "c", + "name": "chttp2_fake_security_cancel_in_a_vacuum_test" + }, + { + "language": "c", + "name": "chttp2_fake_security_census_simple_request_test" + }, + { + "language": "c", + "name": "chttp2_fake_security_disappearing_server_test" + }, + { + "language": "c", + "name": "chttp2_fake_security_early_server_shutdown_finishes_inflight_calls_test" + }, + { + "language": "c", + "name": "chttp2_fake_security_early_server_shutdown_finishes_tags_test" + }, + { + "language": "c", + "name": "chttp2_fake_security_graceful_server_shutdown_test" + }, + { + "language": "c", + "name": "chttp2_fake_security_invoke_large_request_test" + }, + { + "language": "c", + "name": "chttp2_fake_security_max_concurrent_streams_test" + }, + { + "language": "c", + "name": "chttp2_fake_security_no_op_test" + }, + { + "language": "c", + "name": "chttp2_fake_security_ping_pong_streaming_test" + }, + { + "language": "c", + "name": "chttp2_fake_security_request_response_with_binary_metadata_and_payload_test" + }, + { + "language": "c", + "name": "chttp2_fake_security_request_response_with_metadata_and_payload_test" + }, + { + "language": "c", + "name": "chttp2_fake_security_request_response_with_payload_test" + }, + { + "language": "c", + "name": "chttp2_fake_security_request_response_with_trailing_metadata_and_payload_test" + }, + { + "language": "c", + "name": "chttp2_fake_security_simple_delayed_request_test" + }, + { + "language": "c", + "name": "chttp2_fake_security_simple_request_test" + }, + { + "language": "c", + "name": "chttp2_fake_security_thread_stress_test" + }, + { + "language": "c", + "name": "chttp2_fake_security_writes_done_hangs_with_pending_read_test" + }, + { + "language": "c", + "name": "chttp2_fullstack_cancel_after_accept_test" + }, + { + "language": "c", + "name": "chttp2_fullstack_cancel_after_accept_and_writes_closed_test" + }, + { + "language": "c", + "name": "chttp2_fullstack_cancel_after_invoke_test" + }, + { + "language": "c", + "name": "chttp2_fullstack_cancel_before_invoke_test" + }, + { + "language": "c", + "name": "chttp2_fullstack_cancel_in_a_vacuum_test" + }, + { + "language": "c", + "name": "chttp2_fullstack_census_simple_request_test" + }, + { + "language": "c", + "name": "chttp2_fullstack_disappearing_server_test" + }, + { + "language": "c", + "name": "chttp2_fullstack_early_server_shutdown_finishes_inflight_calls_test" + }, + { + "language": "c", + "name": "chttp2_fullstack_early_server_shutdown_finishes_tags_test" + }, + { + "language": "c", + "name": "chttp2_fullstack_graceful_server_shutdown_test" + }, + { + "language": "c", + "name": "chttp2_fullstack_invoke_large_request_test" + }, + { + "language": "c", + "name": "chttp2_fullstack_max_concurrent_streams_test" + }, + { + "language": "c", + "name": "chttp2_fullstack_no_op_test" + }, + { + "language": "c", + "name": "chttp2_fullstack_ping_pong_streaming_test" + }, + { + "language": "c", + "name": "chttp2_fullstack_request_response_with_binary_metadata_and_payload_test" + }, + { + "language": "c", + "name": "chttp2_fullstack_request_response_with_metadata_and_payload_test" + }, + { + "language": "c", + "name": "chttp2_fullstack_request_response_with_payload_test" + }, + { + "language": "c", + "name": "chttp2_fullstack_request_response_with_trailing_metadata_and_payload_test" + }, + { + "language": "c", + "name": "chttp2_fullstack_simple_delayed_request_test" + }, + { + "language": "c", + "name": "chttp2_fullstack_simple_request_test" + }, + { + "language": "c", + "name": "chttp2_fullstack_thread_stress_test" + }, + { + "language": "c", + "name": "chttp2_fullstack_writes_done_hangs_with_pending_read_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_fullstack_cancel_after_accept_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_fullstack_cancel_after_accept_and_writes_closed_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_fullstack_cancel_after_invoke_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_fullstack_cancel_before_invoke_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_fullstack_cancel_in_a_vacuum_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_fullstack_census_simple_request_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_fullstack_disappearing_server_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_inflight_calls_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_tags_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_fullstack_graceful_server_shutdown_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_fullstack_invoke_large_request_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_fullstack_max_concurrent_streams_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_fullstack_no_op_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_fullstack_ping_pong_streaming_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_fullstack_request_response_with_binary_metadata_and_payload_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_fullstack_request_response_with_metadata_and_payload_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_fullstack_request_response_with_payload_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_fullstack_request_response_with_trailing_metadata_and_payload_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_fullstack_simple_delayed_request_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_fullstack_simple_request_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_fullstack_thread_stress_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_fullstack_writes_done_hangs_with_pending_read_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_and_writes_closed_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_invoke_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_with_oauth2_fullstack_cancel_before_invoke_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_with_oauth2_fullstack_cancel_in_a_vacuum_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_with_oauth2_fullstack_census_simple_request_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_with_oauth2_fullstack_disappearing_server_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_inflight_calls_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_tags_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_with_oauth2_fullstack_graceful_server_shutdown_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_with_oauth2_fullstack_invoke_large_request_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_with_oauth2_fullstack_max_concurrent_streams_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_with_oauth2_fullstack_no_op_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_with_oauth2_fullstack_ping_pong_streaming_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_binary_metadata_and_payload_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_metadata_and_payload_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_payload_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_trailing_metadata_and_payload_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_with_oauth2_fullstack_simple_delayed_request_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_with_oauth2_fullstack_simple_request_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_with_oauth2_fullstack_thread_stress_test" + }, + { + "language": "c", + "name": "chttp2_simple_ssl_with_oauth2_fullstack_writes_done_hangs_with_pending_read_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_cancel_after_accept_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_cancel_after_accept_and_writes_closed_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_cancel_after_invoke_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_cancel_before_invoke_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_cancel_in_a_vacuum_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_census_simple_request_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_disappearing_server_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_early_server_shutdown_finishes_inflight_calls_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_early_server_shutdown_finishes_tags_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_graceful_server_shutdown_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_invoke_large_request_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_max_concurrent_streams_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_no_op_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_ping_pong_streaming_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_request_response_with_binary_metadata_and_payload_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_request_response_with_metadata_and_payload_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_request_response_with_payload_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_request_response_with_trailing_metadata_and_payload_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_simple_delayed_request_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_simple_request_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_thread_stress_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_writes_done_hangs_with_pending_read_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_and_writes_closed_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_one_byte_at_a_time_cancel_after_invoke_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_one_byte_at_a_time_cancel_before_invoke_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_one_byte_at_a_time_cancel_in_a_vacuum_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_one_byte_at_a_time_census_simple_request_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_one_byte_at_a_time_disappearing_server_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_inflight_calls_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_tags_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_one_byte_at_a_time_graceful_server_shutdown_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_one_byte_at_a_time_max_concurrent_streams_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_one_byte_at_a_time_no_op_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_one_byte_at_a_time_ping_pong_streaming_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_one_byte_at_a_time_request_response_with_binary_metadata_and_payload_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_one_byte_at_a_time_request_response_with_metadata_and_payload_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_one_byte_at_a_time_request_response_with_payload_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_one_byte_at_a_time_request_response_with_trailing_metadata_and_payload_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_one_byte_at_a_time_simple_delayed_request_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_one_byte_at_a_time_simple_request_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_one_byte_at_a_time_thread_stress_test" + }, + { + "language": "c", + "name": "chttp2_socket_pair_one_byte_at_a_time_writes_done_hangs_with_pending_read_test" + } +] + diff --git a/vsprojects/vs2013/.gitignore b/vsprojects/vs2013/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..75fb4ed6b6fd87e58fbd222023610c809b1f48ab --- /dev/null +++ b/vsprojects/vs2013/.gitignore @@ -0,0 +1,5 @@ +Debug +Release +*.suo +grpc.opensdf +grpc.sdf diff --git a/vsprojects/vs2013/build_and_run_tests.bat b/vsprojects/vs2013/build_and_run_tests.bat index 3e36dcf6002060f35747d06e050f707d57d0db6a..77000739bbab4c7ec8ae0fca899418a8b449ab4c 100644 --- a/vsprojects/vs2013/build_and_run_tests.bat +++ b/vsprojects/vs2013/build_and_run_tests.bat @@ -17,22 +17,6 @@ echo Running test gpr_cancellable_test test_bin\gpr_cancellable_test.exe || echo TEST FAILED: gpr_cancellable_test && exit /b echo( -echo Building test gpr_log_test -cl.exe /c /I..\.. /I..\..\include /nologo /ZI /W3 /WX- /sdl /D WIN32 /D _LIB /D _USE_32BIT_TIME_T /D _UNICODE /D UNICODE /Gm /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Gd /TC /analyze- /Fo:test_bin\ ..\..\test\core\support\log_test.c -link.exe /OUT:"test_bin\gpr_log_test.exe" /INCREMENTAL /NOLOGO /SUBSYSTEM:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /MACHINE:X86 Debug\gpr_test_util.lib Debug\gpr.lib test_bin\log_test.obj -echo( -echo Running test gpr_log_test -test_bin\gpr_log_test.exe || echo TEST FAILED: gpr_log_test && exit /b -echo( - -echo Building test gpr_useful_test -cl.exe /c /I..\.. /I..\..\include /nologo /ZI /W3 /WX- /sdl /D WIN32 /D _LIB /D _USE_32BIT_TIME_T /D _UNICODE /D UNICODE /Gm /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Gd /TC /analyze- /Fo:test_bin\ ..\..\test\core\support\useful_test.c -link.exe /OUT:"test_bin\gpr_useful_test.exe" /INCREMENTAL /NOLOGO /SUBSYSTEM:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /MACHINE:X86 Debug\gpr_test_util.lib Debug\gpr.lib test_bin\useful_test.obj -echo( -echo Running test gpr_useful_test -test_bin\gpr_useful_test.exe || echo TEST FAILED: gpr_useful_test && exit /b -echo( - echo Building test gpr_cmdline_test cl.exe /c /I..\.. /I..\..\include /nologo /ZI /W3 /WX- /sdl /D WIN32 /D _LIB /D _USE_32BIT_TIME_T /D _UNICODE /D UNICODE /Gm /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Gd /TC /analyze- /Fo:test_bin\ ..\..\test\core\support\cmdline_test.c link.exe /OUT:"test_bin\gpr_cmdline_test.exe" /INCREMENTAL /NOLOGO /SUBSYSTEM:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /MACHINE:X86 Debug\gpr_test_util.lib Debug\gpr.lib test_bin\cmdline_test.obj @@ -57,6 +41,14 @@ echo Running test gpr_host_port_test test_bin\gpr_host_port_test.exe || echo TEST FAILED: gpr_host_port_test && exit /b echo( +echo Building test gpr_log_test +cl.exe /c /I..\.. /I..\..\include /nologo /ZI /W3 /WX- /sdl /D WIN32 /D _LIB /D _USE_32BIT_TIME_T /D _UNICODE /D UNICODE /Gm /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Gd /TC /analyze- /Fo:test_bin\ ..\..\test\core\support\log_test.c +link.exe /OUT:"test_bin\gpr_log_test.exe" /INCREMENTAL /NOLOGO /SUBSYSTEM:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /MACHINE:X86 Debug\gpr_test_util.lib Debug\gpr.lib test_bin\log_test.obj +echo( +echo Running test gpr_log_test +test_bin\gpr_log_test.exe || echo TEST FAILED: gpr_log_test && exit /b +echo( + echo Building test gpr_slice_buffer_test cl.exe /c /I..\.. /I..\..\include /nologo /ZI /W3 /WX- /sdl /D WIN32 /D _LIB /D _USE_32BIT_TIME_T /D _UNICODE /D UNICODE /Gm /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Gd /TC /analyze- /Fo:test_bin\ ..\..\test\core\support\slice_buffer_test.c link.exe /OUT:"test_bin\gpr_slice_buffer_test.exe" /INCREMENTAL /NOLOGO /SUBSYSTEM:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /MACHINE:X86 Debug\gpr_test_util.lib Debug\gpr.lib test_bin\slice_buffer_test.obj @@ -105,3 +97,11 @@ echo Running test gpr_time_test test_bin\gpr_time_test.exe || echo TEST FAILED: gpr_time_test && exit /b echo( +echo Building test gpr_useful_test +cl.exe /c /I..\.. /I..\..\include /nologo /ZI /W3 /WX- /sdl /D WIN32 /D _LIB /D _USE_32BIT_TIME_T /D _UNICODE /D UNICODE /Gm /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Gd /TC /analyze- /Fo:test_bin\ ..\..\test\core\support\useful_test.c +link.exe /OUT:"test_bin\gpr_useful_test.exe" /INCREMENTAL /NOLOGO /SUBSYSTEM:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /MACHINE:X86 Debug\gpr_test_util.lib Debug\gpr.lib test_bin\useful_test.obj +echo( +echo Running test gpr_useful_test +test_bin\gpr_useful_test.exe || echo TEST FAILED: gpr_useful_test && exit /b +echo( + diff --git a/vsprojects/vs2013/gpr.vcxproj b/vsprojects/vs2013/gpr.vcxproj index 3e95d71b6e6683d3bf597733dc039f0a0991da96..6075e25ca038415e18c49fae839eb6e50784d049 100644 --- a/vsprojects/vs2013/gpr.vcxproj +++ b/vsprojects/vs2013/gpr.vcxproj @@ -74,9 +74,9 @@ </ItemDefinitionGroup> <ItemGroup> <ClInclude Include="..\..\include\grpc\support\alloc.h" /> + <ClInclude Include="..\..\include\grpc\support\atm.h" /> <ClInclude Include="..\..\include\grpc\support\atm_gcc_atomic.h" /> <ClInclude Include="..\..\include\grpc\support\atm_gcc_sync.h" /> - <ClInclude Include="..\..\include\grpc\support\atm.h" /> <ClInclude Include="..\..\include\grpc\support\atm_win32.h" /> <ClInclude Include="..\..\include\grpc\support\cancellable_platform.h" /> <ClInclude Include="..\..\include\grpc\support\cmdline.h" /> @@ -84,11 +84,11 @@ <ClInclude Include="..\..\include\grpc\support\host_port.h" /> <ClInclude Include="..\..\include\grpc\support\log.h" /> <ClInclude Include="..\..\include\grpc\support\port_platform.h" /> - <ClInclude Include="..\..\include\grpc\support\slice_buffer.h" /> <ClInclude Include="..\..\include\grpc\support\slice.h" /> + <ClInclude Include="..\..\include\grpc\support\slice_buffer.h" /> <ClInclude Include="..\..\include\grpc\support\string.h" /> - <ClInclude Include="..\..\include\grpc\support\sync_generic.h" /> <ClInclude Include="..\..\include\grpc\support\sync.h" /> + <ClInclude Include="..\..\include\grpc\support\sync_generic.h" /> <ClInclude Include="..\..\include\grpc\support\sync_posix.h" /> <ClInclude Include="..\..\include\grpc\support\sync_win32.h" /> <ClInclude Include="..\..\include\grpc\support\thd.h" /> @@ -119,10 +119,10 @@ </ClCompile> <ClCompile Include="..\..\src\core\support\host_port.c"> </ClCompile> - <ClCompile Include="..\..\src\core\support\log_android.c"> - </ClCompile> <ClCompile Include="..\..\src\core\support\log.c"> </ClCompile> + <ClCompile Include="..\..\src\core\support\log_android.c"> + </ClCompile> <ClCompile Include="..\..\src\core\support\log_linux.c"> </ClCompile> <ClCompile Include="..\..\src\core\support\log_posix.c"> @@ -131,10 +131,10 @@ </ClCompile> <ClCompile Include="..\..\src\core\support\murmur_hash.c"> </ClCompile> - <ClCompile Include="..\..\src\core\support\slice_buffer.c"> - </ClCompile> <ClCompile Include="..\..\src\core\support\slice.c"> </ClCompile> + <ClCompile Include="..\..\src\core\support\slice_buffer.c"> + </ClCompile> <ClCompile Include="..\..\src\core\support\string.c"> </ClCompile> <ClCompile Include="..\..\src\core\support\string_posix.c"> diff --git a/vsprojects/vs2013/grpc.sln b/vsprojects/vs2013/grpc.sln index 41d4d02fd24b0e5c389bf8da772db8c959b4761e..9b3ebaf633bccdbffea1b4cbc1eb667d147894db 100644 --- a/vsprojects/vs2013/grpc.sln +++ b/vsprojects/vs2013/grpc.sln @@ -5,20 +5,20 @@ VisualStudioVersion = 12.0.21005.1 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gpr", "gpr.vcxproj", "{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gpr_test_util", "gpr_test_util.vcxproj", "{EAB0A629-17A9-44DB-B5FF-E91A721FE037}" +EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grpc", "grpc.vcxproj", "{29D16885-7228-4C31-81ED-5F9187C7F2A9}" ProjectSection(ProjectDependencies) = postProject {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} EndProjectSection EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grpc_test_util", "grpc_test_util.vcxproj", "{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}" +EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grpc_unsecure", "grpc_unsecure.vcxproj", "{46CEDFFF-9692-456A-AA24-38B5D6BCF4C5}" ProjectSection(ProjectDependencies) = postProject {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gpr_test_util", "gpr_test_util.vcxproj", "{EAB0A629-17A9-44DB-B5FF-E91A721FE037}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grpc_test_util", "grpc_test_util.vcxproj", "{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}" -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibvc", "third_party\zlibvc.vcxproj", "{8FD826F8-3739-44E6-8CC8-997122E53B8D}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "third_party", "third_party", "{DD51818F-0BCA-4035-9E5B-F28A9F87DED4}" @@ -33,22 +33,22 @@ Global {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}.Debug|Win32.Build.0 = Debug|Win32 {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}.Release|Win32.ActiveCfg = Release|Win32 {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}.Release|Win32.Build.0 = Release|Win32 - {29D16885-7228-4C31-81ED-5F9187C7F2A9}.Debug|Win32.ActiveCfg = Debug|Win32 - {29D16885-7228-4C31-81ED-5F9187C7F2A9}.Debug|Win32.Build.0 = Debug|Win32 - {29D16885-7228-4C31-81ED-5F9187C7F2A9}.Release|Win32.ActiveCfg = Release|Win32 - {29D16885-7228-4C31-81ED-5F9187C7F2A9}.Release|Win32.Build.0 = Release|Win32 - {46CEDFFF-9692-456A-AA24-38B5D6BCF4C5}.Debug|Win32.ActiveCfg = Debug|Win32 - {46CEDFFF-9692-456A-AA24-38B5D6BCF4C5}.Debug|Win32.Build.0 = Debug|Win32 - {46CEDFFF-9692-456A-AA24-38B5D6BCF4C5}.Release|Win32.ActiveCfg = Release|Win32 - {46CEDFFF-9692-456A-AA24-38B5D6BCF4C5}.Release|Win32.Build.0 = Release|Win32 {EAB0A629-17A9-44DB-B5FF-E91A721FE037}.Debug|Win32.ActiveCfg = Debug|Win32 {EAB0A629-17A9-44DB-B5FF-E91A721FE037}.Debug|Win32.Build.0 = Debug|Win32 {EAB0A629-17A9-44DB-B5FF-E91A721FE037}.Release|Win32.ActiveCfg = Release|Win32 {EAB0A629-17A9-44DB-B5FF-E91A721FE037}.Release|Win32.Build.0 = Release|Win32 + {29D16885-7228-4C31-81ED-5F9187C7F2A9}.Debug|Win32.ActiveCfg = Debug|Win32 + {29D16885-7228-4C31-81ED-5F9187C7F2A9}.Debug|Win32.Build.0 = Debug|Win32 + {29D16885-7228-4C31-81ED-5F9187C7F2A9}.Release|Win32.ActiveCfg = Release|Win32 + {29D16885-7228-4C31-81ED-5F9187C7F2A9}.Release|Win32.Build.0 = Release|Win32 {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}.Debug|Win32.ActiveCfg = Debug|Win32 {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}.Debug|Win32.Build.0 = Debug|Win32 {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}.Release|Win32.ActiveCfg = Release|Win32 {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}.Release|Win32.Build.0 = Release|Win32 + {46CEDFFF-9692-456A-AA24-38B5D6BCF4C5}.Debug|Win32.ActiveCfg = Debug|Win32 + {46CEDFFF-9692-456A-AA24-38B5D6BCF4C5}.Debug|Win32.Build.0 = Debug|Win32 + {46CEDFFF-9692-456A-AA24-38B5D6BCF4C5}.Release|Win32.ActiveCfg = Release|Win32 + {46CEDFFF-9692-456A-AA24-38B5D6BCF4C5}.Release|Win32.Build.0 = Release|Win32 {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.ActiveCfg = Debug|Win32 {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.Build.0 = Debug|Win32 {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.ActiveCfg = Release|Win32 diff --git a/vsprojects/vs2013/grpc.vcxproj b/vsprojects/vs2013/grpc.vcxproj index 9f3ec8c597cd9cda6a33df96077d229834934953..05a9966c0e00a9752dd800a1a20b15efb1e687a3 100644 --- a/vsprojects/vs2013/grpc.vcxproj +++ b/vsprojects/vs2013/grpc.vcxproj @@ -119,6 +119,8 @@ <ClInclude Include="..\..\src\core\iomgr\iomgr_internal.h" /> <ClInclude Include="..\..\src\core\iomgr\iomgr_posix.h" /> <ClInclude Include="..\..\src\core\iomgr\pollset.h" /> + <ClInclude Include="..\..\src\core\iomgr\pollset_kick.h" /> + <ClInclude Include="..\..\src\core\iomgr\pollset_kick_posix.h" /> <ClInclude Include="..\..\src\core\iomgr\pollset_posix.h" /> <ClInclude Include="..\..\src\core\iomgr\resolve_address.h" /> <ClInclude Include="..\..\src\core\iomgr\sockaddr.h" /> @@ -246,6 +248,8 @@ </ClCompile> <ClCompile Include="..\..\src\core\iomgr\iomgr_posix.c"> </ClCompile> + <ClCompile Include="..\..\src\core\iomgr\pollset_kick_posix.c"> + </ClCompile> <ClCompile Include="..\..\src\core\iomgr\pollset_multipoller_with_poll_posix.c"> </ClCompile> <ClCompile Include="..\..\src\core\iomgr\pollset_posix.c"> diff --git a/vsprojects/vs2013/grpc_test_util.vcxproj b/vsprojects/vs2013/grpc_test_util.vcxproj index dc95034d61ab2bb516bb16b653fac0af2dc57c4b..e0e33c0086ef3355bffefab23ce693cfd08f213f 100644 --- a/vsprojects/vs2013/grpc_test_util.vcxproj +++ b/vsprojects/vs2013/grpc_test_util.vcxproj @@ -75,14 +75,14 @@ <ItemGroup> <ClCompile Include="..\..\test\core\end2end\cq_verifier.c"> </ClCompile> - <ClCompile Include="..\..\test\core\end2end\data\test_root_cert.c"> - </ClCompile> <ClCompile Include="..\..\test\core\end2end\data\prod_roots_certs.c"> </ClCompile> <ClCompile Include="..\..\test\core\end2end\data\server1_cert.c"> </ClCompile> <ClCompile Include="..\..\test\core\end2end\data\server1_key.c"> </ClCompile> + <ClCompile Include="..\..\test\core\end2end\data\test_root_cert.c"> + </ClCompile> <ClCompile Include="..\..\test\core\iomgr\endpoint_tests.c"> </ClCompile> <ClCompile Include="..\..\test\core\statistics\census_log_tests.c"> @@ -91,10 +91,10 @@ </ClCompile> <ClCompile Include="..\..\test\core\util\grpc_profiler.c"> </ClCompile> - <ClCompile Include="..\..\test\core\util\port_posix.c"> - </ClCompile> <ClCompile Include="..\..\test\core\util\parse_hexstring.c"> </ClCompile> + <ClCompile Include="..\..\test\core\util\port_posix.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 9f3ec8c597cd9cda6a33df96077d229834934953..05a9966c0e00a9752dd800a1a20b15efb1e687a3 100644 --- a/vsprojects/vs2013/grpc_unsecure.vcxproj +++ b/vsprojects/vs2013/grpc_unsecure.vcxproj @@ -119,6 +119,8 @@ <ClInclude Include="..\..\src\core\iomgr\iomgr_internal.h" /> <ClInclude Include="..\..\src\core\iomgr\iomgr_posix.h" /> <ClInclude Include="..\..\src\core\iomgr\pollset.h" /> + <ClInclude Include="..\..\src\core\iomgr\pollset_kick.h" /> + <ClInclude Include="..\..\src\core\iomgr\pollset_kick_posix.h" /> <ClInclude Include="..\..\src\core\iomgr\pollset_posix.h" /> <ClInclude Include="..\..\src\core\iomgr\resolve_address.h" /> <ClInclude Include="..\..\src\core\iomgr\sockaddr.h" /> @@ -246,6 +248,8 @@ </ClCompile> <ClCompile Include="..\..\src\core\iomgr\iomgr_posix.c"> </ClCompile> + <ClCompile Include="..\..\src\core\iomgr\pollset_kick_posix.c"> + </ClCompile> <ClCompile Include="..\..\src\core\iomgr\pollset_multipoller_with_poll_posix.c"> </ClCompile> <ClCompile Include="..\..\src\core\iomgr\pollset_posix.c">