diff options
author | ncteisen <ncteisen@gmail.com> | 2017-05-18 19:01:53 -0700 |
---|---|---|
committer | ncteisen <ncteisen@gmail.com> | 2017-05-18 19:01:53 -0700 |
commit | df8c3eec39f05c84d9504467b2dccd55738523be (patch) | |
tree | fad1ea316ba39eb2051bed9167d21f7bb608e9bb /test | |
parent | d21040bf1ef56a96808eebe4961039e726fbc80c (diff) | |
parent | 9ea6d79474a2cc842b9a7a927dfc2b30d8373ae3 (diff) |
Merge branch 'master' of https://github.com/grpc/grpc into more-bm-diff
Diffstat (limited to 'test')
75 files changed, 2068 insertions, 588 deletions
diff --git a/test/core/bad_client/BUILD b/test/core/bad_client/BUILD index 6b06955efe..bcfd2f1db2 100644 --- a/test/core/bad_client/BUILD +++ b/test/core/bad_client/BUILD @@ -27,6 +27,8 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_cc_binary") + licenses(["notice"]) # 3-clause BSD load(":generate_tests.bzl", "grpc_bad_client_tests") diff --git a/test/core/bad_client/tests/large_metadata.c b/test/core/bad_client/tests/large_metadata.c index d7a3ce9461..5f3a9c9ca4 100644 --- a/test/core/bad_client/tests/large_metadata.c +++ b/test/core/bad_client/tests/large_metadata.c @@ -212,12 +212,14 @@ static void client_validator(grpc_slice_buffer *incoming) { } int main(int argc, char **argv) { + int i; + grpc_test_init(argc, argv); // Test sending more metadata than the server will accept. gpr_strvec headers; gpr_strvec_init(&headers); - for (int i = 0; i < NUM_HEADERS; ++i) { + for (i = 0; i < NUM_HEADERS; ++i) { char *str; gpr_asprintf(&str, "%s%02d%s", PFX_TOO_MUCH_METADATA_FROM_CLIENT_HEADER_START_STR, i, diff --git a/test/core/bad_ssl/BUILD b/test/core/bad_ssl/BUILD index 288788a52d..61c634ae26 100644 --- a/test/core/bad_ssl/BUILD +++ b/test/core/bad_ssl/BUILD @@ -27,6 +27,8 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_cc_binary") + licenses(["notice"]) # 3-clause BSD load(":generate_tests.bzl", "grpc_bad_ssl_tests") diff --git a/test/core/census/BUILD b/test/core/census/BUILD index 49680ab91f..3fdf5114e8 100644 --- a/test/core/census/BUILD +++ b/test/core/census/BUILD @@ -27,12 +27,14 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_cc_binary") + licenses(["notice"]) # 3-clause BSD -cc_test( +grpc_cc_test( name = "context_test", srcs = ["context_test.c"], - copts = ["-std=c99"], + language = "C", deps = [ "//:gpr", "//:grpc", @@ -41,10 +43,10 @@ cc_test( ], ) -cc_test( +grpc_cc_test( name = "mlog_test", srcs = ["mlog_test.c"], - copts = ["-std=c99"], + language = "C", deps = [ "//:gpr", "//:grpc", @@ -53,10 +55,10 @@ cc_test( ], ) -cc_test( +grpc_cc_test( name = "resource_test", srcs = ["resource_test.c"], - copts = ["-std=c99"], + language = "C", data = [ ":data/resource_empty_name.pb", ":data/resource_full.pb", @@ -73,10 +75,10 @@ cc_test( ], ) -cc_test( +grpc_cc_test( name = "trace_context_test", srcs = ["trace_context_test.c"], - copts = ["-std=c99"], + language = "C", data = [ ":data/context_empty.pb", ":data/context_full.pb", diff --git a/test/core/channel/BUILD b/test/core/channel/BUILD index c6590465f1..5e7e8c1ef4 100644 --- a/test/core/channel/BUILD +++ b/test/core/channel/BUILD @@ -27,12 +27,14 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_cc_binary") + licenses(["notice"]) # 3-clause BSD -cc_test( +grpc_cc_test( name = "channel_args_test", srcs = ["channel_args_test.c"], - copts = ["-std=c99"], + language = "C", deps = [ "//:gpr", "//:grpc", @@ -41,10 +43,10 @@ cc_test( ], ) -cc_test( +grpc_cc_test( name = "channel_stack_test", srcs = ["channel_stack_test.c"], - copts = ["-std=c99"], + language = "C", deps = [ "//:gpr", "//:grpc", diff --git a/test/core/client_channel/BUILD b/test/core/client_channel/BUILD index 55a74c6d01..6c4b40e411 100644 --- a/test/core/client_channel/BUILD +++ b/test/core/client_channel/BUILD @@ -27,21 +27,33 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_cc_binary") + licenses(["notice"]) # 3-clause BSD load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer") grpc_fuzzer( - name = "uri_fuzzer_test", - srcs = ["uri_fuzzer_test.c"], - deps = ["//:gpr", "//:grpc", "//test/core/util:grpc_test_util"], - corpus = "uri_corpus", - copts = ["-std=c99"], + name = "uri_fuzzer_test", + srcs = ["uri_fuzzer_test.c"], + language = "C", + corpus = "uri_corpus", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "lb_policies_test", srcs = ["lb_policies_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util", "//test/core/end2end:cq_verifier"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/end2end:cq_verifier", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) diff --git a/test/core/client_channel/resolvers/BUILD b/test/core/client_channel/resolvers/BUILD index e8361cdef6..80ca7d3ebb 100644 --- a/test/core/client_channel/resolvers/BUILD +++ b/test/core/client_channel/resolvers/BUILD @@ -27,12 +27,14 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_cc_binary") + licenses(["notice"]) # 3-clause BSD -cc_test( +grpc_cc_test( name = "dns_resolver_connectivity_test", srcs = ["dns_resolver_connectivity_test.c"], - copts = ["-std=c99"], + language = "C", deps = [ "//:gpr", "//:grpc", @@ -41,10 +43,10 @@ cc_test( ], ) -cc_test( +grpc_cc_test( name = "dns_resolver_test", srcs = ["dns_resolver_test.c"], - copts = ["-std=c99"], + language = "C", deps = [ "//:gpr", "//:grpc", @@ -53,10 +55,10 @@ cc_test( ], ) -cc_test( +grpc_cc_test( name = "sockaddr_resolver_test", srcs = ["sockaddr_resolver_test.c"], - copts = ["-std=c99"], + language = "C", deps = [ "//:gpr", "//:grpc", @@ -65,10 +67,10 @@ cc_test( ], ) -cc_test( +grpc_cc_test( name = "fake_resolver_test", srcs = ["fake_resolver_test.c"], - copts = ["-std=c99"], + language = "C", deps = [ "//:gpr", "//:grpc", diff --git a/test/core/compression/BUILD b/test/core/compression/BUILD index 9ddb4c52b4..bbd66bdb52 100644 --- a/test/core/compression/BUILD +++ b/test/core/compression/BUILD @@ -27,12 +27,14 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_cc_binary") + licenses(["notice"]) # 3-clause BSD -cc_test( +grpc_cc_test( name = "algorithm_test", srcs = ["algorithm_test.c"], - copts = ["-std=c99"], + language = "C", deps = [ "//:gpr", "//:grpc", @@ -41,10 +43,10 @@ cc_test( ], ) -cc_test( +grpc_cc_test( name = "compression_test", srcs = ["compression_test.c"], - copts = ["-std=c99"], + language = "C", deps = [ "//:gpr", "//:grpc", @@ -53,10 +55,10 @@ cc_test( ], ) -cc_test( +grpc_cc_test( name = "message_compress_test", srcs = ["message_compress_test.c"], - copts = ["-std=c99"], + language = "C", deps = [ "//:gpr", "//:grpc", diff --git a/test/core/end2end/BUILD b/test/core/end2end/BUILD index ffea1cc4e8..cf387a93e8 100644 --- a/test/core/end2end/BUILD +++ b/test/core/end2end/BUILD @@ -27,15 +27,17 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_cc_binary") + licenses(["notice"]) # 3-clause BSD load(":generate_tests.bzl", "grpc_end2end_tests") -cc_library( +grpc_cc_library( name = "cq_verifier", srcs = ["cq_verifier.c"], hdrs = ["cq_verifier.h"], - copts = ["-std=c99"], + language = "C", visibility = ["//test:__subpackages__"], deps = [ "//:gpr", @@ -44,7 +46,7 @@ cc_library( ], ) -cc_library( +grpc_cc_library( name = "ssl_test_data", srcs = [ "data/client_certs.c", @@ -53,15 +55,15 @@ cc_library( "data/test_root_cert.c", ], hdrs = ["data/ssl_test_data.h"], - copts = ["-std=c99"], + language = "C", visibility = ["//test:__subpackages__"], ) -cc_library( +grpc_cc_library( name = "fake_resolver", srcs = ["fake_resolver.c"], hdrs = ["fake_resolver.h"], - copts = ["-std=c99"], + language = "C", visibility = ["//test:__subpackages__"], deps = [ "//:gpr", @@ -70,11 +72,11 @@ cc_library( ], ) -cc_library( +grpc_cc_library( name = "http_proxy", srcs = ["fixtures/http_proxy_fixture.c"], hdrs = ["fixtures/http_proxy_fixture.h"], - copts = ["-std=c99"], + language = "C", deps = [ "//:gpr", "//:grpc", @@ -82,11 +84,11 @@ cc_library( ], ) -cc_library( +grpc_cc_library( name = "proxy", srcs = ["fixtures/proxy.c"], hdrs = ["fixtures/proxy.h"], - copts = ["-std=c99"], + language = "C", deps = [ "//:gpr", "//:grpc", diff --git a/test/core/end2end/cq_verifier.c b/test/core/end2end/cq_verifier.c index 0fafb0c8c9..5c54549674 100644 --- a/test/core/end2end/cq_verifier.c +++ b/test/core/end2end/cq_verifier.c @@ -189,10 +189,16 @@ int byte_buffer_eq_string(grpc_byte_buffer *bb, const char *str) { return res; } +static bool is_probably_integer(void *p) { return ((uintptr_t)p) < 1000000; } + static void expectation_to_strvec(gpr_strvec *buf, expectation *e) { char *tmp; - gpr_asprintf(&tmp, "%p ", e->tag); + if (is_probably_integer(e->tag)) { + gpr_asprintf(&tmp, "tag(%" PRIdPTR ") ", (intptr_t)e->tag); + } else { + gpr_asprintf(&tmp, "%p ", e->tag); + } gpr_strvec_add(buf, tmp); switch (e->type) { diff --git a/test/core/end2end/end2end_nosec_tests.c b/test/core/end2end/end2end_nosec_tests.c index 1187e59e6c..4f0d11c3f5 100644 --- a/test/core/end2end/end2end_nosec_tests.c +++ b/test/core/end2end/end2end_nosec_tests.c @@ -145,6 +145,8 @@ extern void streaming_error_response(grpc_end2end_test_config config); extern void streaming_error_response_pre_init(void); extern void trailing_metadata(grpc_end2end_test_config config); extern void trailing_metadata_pre_init(void); +extern void workaround_cronet_compression(grpc_end2end_test_config config); +extern void workaround_cronet_compression_pre_init(void); extern void write_buffering(grpc_end2end_test_config config); extern void write_buffering_pre_init(void); extern void write_buffering_at_end(grpc_end2end_test_config config); @@ -204,6 +206,7 @@ void grpc_end2end_tests_pre_init(void) { simple_request_pre_init(); streaming_error_response_pre_init(); trailing_metadata_pre_init(); + workaround_cronet_compression_pre_init(); write_buffering_pre_init(); write_buffering_at_end_pre_init(); } @@ -265,6 +268,7 @@ void grpc_end2end_tests(int argc, char **argv, simple_request(config); streaming_error_response(config); trailing_metadata(config); + workaround_cronet_compression(config); write_buffering(config); write_buffering_at_end(config); return; @@ -471,6 +475,10 @@ void grpc_end2end_tests(int argc, char **argv, trailing_metadata(config); continue; } + if (0 == strcmp("workaround_cronet_compression", argv[i])) { + workaround_cronet_compression(config); + continue; + } if (0 == strcmp("write_buffering", argv[i])) { write_buffering(config); continue; diff --git a/test/core/end2end/end2end_tests.c b/test/core/end2end/end2end_tests.c index 966031af65..9123d97b0e 100644 --- a/test/core/end2end/end2end_tests.c +++ b/test/core/end2end/end2end_tests.c @@ -147,6 +147,8 @@ extern void streaming_error_response(grpc_end2end_test_config config); extern void streaming_error_response_pre_init(void); extern void trailing_metadata(grpc_end2end_test_config config); extern void trailing_metadata_pre_init(void); +extern void workaround_cronet_compression(grpc_end2end_test_config config); +extern void workaround_cronet_compression_pre_init(void); extern void write_buffering(grpc_end2end_test_config config); extern void write_buffering_pre_init(void); extern void write_buffering_at_end(grpc_end2end_test_config config); @@ -207,6 +209,7 @@ void grpc_end2end_tests_pre_init(void) { simple_request_pre_init(); streaming_error_response_pre_init(); trailing_metadata_pre_init(); + workaround_cronet_compression_pre_init(); write_buffering_pre_init(); write_buffering_at_end_pre_init(); } @@ -269,6 +272,7 @@ void grpc_end2end_tests(int argc, char **argv, simple_request(config); streaming_error_response(config); trailing_metadata(config); + workaround_cronet_compression(config); write_buffering(config); write_buffering_at_end(config); return; @@ -479,6 +483,10 @@ void grpc_end2end_tests(int argc, char **argv, trailing_metadata(config); continue; } + if (0 == strcmp("workaround_cronet_compression", argv[i])) { + workaround_cronet_compression(config); + continue; + } if (0 == strcmp("write_buffering", argv[i])) { write_buffering(config); continue; diff --git a/test/core/end2end/end2end_tests.h b/test/core/end2end/end2end_tests.h index 4d98bddbd8..59eab9e8f1 100644 --- a/test/core/end2end/end2end_tests.h +++ b/test/core/end2end/end2end_tests.h @@ -48,6 +48,7 @@ typedef struct grpc_end2end_test_config grpc_end2end_test_config; #define FEATURE_MASK_SUPPORTS_AUTHORITY_HEADER 32 #define FEATURE_MASK_DOES_NOT_SUPPORT_RESOURCE_QUOTA_SERVER 64 #define FEATURE_MASK_DOES_NOT_SUPPORT_NETWORK_STATUS_CHANGE 128 +#define FEATURE_MASK_SUPPORTS_WORKAROUNDS 256 #define FAIL_AUTH_CHECK_SERVER_ARG_NAME "fail_auth_check" diff --git a/test/core/end2end/fixtures/h2_full+workarounds.c b/test/core/end2end/fixtures/h2_full+workarounds.c new file mode 100644 index 0000000000..fcb2024645 --- /dev/null +++ b/test/core/end2end/fixtures/h2_full+workarounds.c @@ -0,0 +1,138 @@ +/* + * + * Copyright 2015, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "test/core/end2end/end2end_tests.h" + +#include <string.h> + +#include <grpc/support/alloc.h> +#include <grpc/support/host_port.h> +#include <grpc/support/log.h> +#include <grpc/support/sync.h> +#include <grpc/support/thd.h> +#include <grpc/support/useful.h> +#include <grpc/support/workaround_list.h> +#include "src/core/ext/filters/client_channel/client_channel.h" +#include "src/core/ext/filters/http/server/http_server_filter.h" +#include "src/core/ext/transport/chttp2/transport/chttp2_transport.h" +#include "src/core/lib/channel/connected_channel.h" +#include "src/core/lib/surface/channel.h" +#include "src/core/lib/surface/server.h" +#include "test/core/util/port.h" +#include "test/core/util/test_config.h" + +static char *workarounds_arg[GRPC_MAX_WORKAROUND_ID] = { + GRPC_ARG_WORKAROUND_CRONET_COMPRESSION}; + +typedef struct fullstack_fixture_data { + char *localaddr; +} fullstack_fixture_data; + +static grpc_end2end_test_fixture chttp2_create_fixture_fullstack( + grpc_channel_args *client_args, grpc_channel_args *server_args) { + grpc_end2end_test_fixture f; + int port = grpc_pick_unused_port_or_die(); + fullstack_fixture_data *ffd = gpr_malloc(sizeof(fullstack_fixture_data)); + memset(&f, 0, sizeof(f)); + + gpr_join_host_port(&ffd->localaddr, "localhost", port); + + f.fixture_data = ffd; + f.cq = grpc_completion_queue_create_for_next(NULL); + f.shutdown_cq = grpc_completion_queue_create_for_pluck(NULL); + + return f; +} + +void chttp2_init_client_fullstack(grpc_end2end_test_fixture *f, + grpc_channel_args *client_args) { + fullstack_fixture_data *ffd = f->fixture_data; + f->client = grpc_insecure_channel_create(ffd->localaddr, client_args, NULL); + GPR_ASSERT(f->client); +} + +void chttp2_init_server_fullstack(grpc_end2end_test_fixture *f, + grpc_channel_args *server_args) { + int i; + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + fullstack_fixture_data *ffd = f->fixture_data; + grpc_arg args[GRPC_MAX_WORKAROUND_ID]; + for (i = 0; i < GRPC_MAX_WORKAROUND_ID; i++) { + args[i].key = workarounds_arg[i]; + args[i].type = GRPC_ARG_INTEGER; + args[i].value.integer = 1; + } + grpc_channel_args *server_args_new = + grpc_channel_args_copy_and_add(server_args, args, GRPC_MAX_WORKAROUND_ID); + if (f->server) { + grpc_server_destroy(f->server); + } + f->server = grpc_server_create(server_args_new, NULL); + grpc_server_register_completion_queue(f->server, f->cq, NULL); + GPR_ASSERT(grpc_server_add_insecure_http2_port(f->server, ffd->localaddr)); + grpc_server_start(f->server); + grpc_channel_args_destroy(&exec_ctx, server_args_new); + grpc_exec_ctx_finish(&exec_ctx); +} + +void chttp2_tear_down_fullstack(grpc_end2end_test_fixture *f) { + fullstack_fixture_data *ffd = f->fixture_data; + gpr_free(ffd->localaddr); + gpr_free(ffd); +} + +/* All test configurations */ +static grpc_end2end_test_config configs[] = { + {"chttp2/fullstack", FEATURE_MASK_SUPPORTS_DELAYED_CONNECTION | + FEATURE_MASK_SUPPORTS_CLIENT_CHANNEL | + FEATURE_MASK_SUPPORTS_AUTHORITY_HEADER | + FEATURE_MASK_SUPPORTS_WORKAROUNDS, + chttp2_create_fixture_fullstack, chttp2_init_client_fullstack, + chttp2_init_server_fullstack, chttp2_tear_down_fullstack}, +}; + +int main(int argc, char **argv) { + size_t i; + + grpc_test_init(argc, argv); + grpc_end2end_tests_pre_init(); + grpc_init(); + + for (i = 0; i < sizeof(configs) / sizeof(*configs); i++) { + grpc_end2end_tests(argc, argv, configs[i]); + } + + grpc_shutdown(); + + return 0; +} diff --git a/test/core/end2end/fixtures/http_proxy_fixture.c b/test/core/end2end/fixtures/http_proxy_fixture.c index c2d8480e69..b8a53ed113 100644 --- a/test/core/end2end/fixtures/http_proxy_fixture.c +++ b/test/core/end2end/fixtures/http_proxy_fixture.c @@ -50,6 +50,7 @@ #include "src/core/lib/channel/channel_args.h" #include "src/core/lib/http/parser.h" #include "src/core/lib/iomgr/closure.h" +#include "src/core/lib/iomgr/combiner.h" #include "src/core/lib/iomgr/endpoint.h" #include "src/core/lib/iomgr/error.h" #include "src/core/lib/iomgr/exec_ctx.h" @@ -71,6 +72,8 @@ struct grpc_end2end_http_proxy { gpr_mu* mu; grpc_pollset* pollset; gpr_refcount users; + + grpc_combiner* combiner; }; // @@ -400,19 +403,19 @@ static void on_accept(grpc_exec_ctx* exec_ctx, void* arg, grpc_pollset_set_add_pollset(exec_ctx, conn->pollset_set, proxy->pollset); grpc_endpoint_add_to_pollset_set(exec_ctx, endpoint, conn->pollset_set); grpc_closure_init(&conn->on_read_request_done, on_read_request_done, conn, - grpc_schedule_on_exec_ctx); + grpc_combiner_scheduler(conn->proxy->combiner, false)); grpc_closure_init(&conn->on_server_connect_done, on_server_connect_done, conn, - grpc_schedule_on_exec_ctx); + grpc_combiner_scheduler(conn->proxy->combiner, false)); grpc_closure_init(&conn->on_write_response_done, on_write_response_done, conn, - grpc_schedule_on_exec_ctx); + grpc_combiner_scheduler(conn->proxy->combiner, false)); grpc_closure_init(&conn->on_client_read_done, on_client_read_done, conn, - grpc_schedule_on_exec_ctx); + grpc_combiner_scheduler(conn->proxy->combiner, false)); grpc_closure_init(&conn->on_client_write_done, on_client_write_done, conn, - grpc_schedule_on_exec_ctx); + grpc_combiner_scheduler(conn->proxy->combiner, false)); grpc_closure_init(&conn->on_server_read_done, on_server_read_done, conn, - grpc_schedule_on_exec_ctx); + grpc_combiner_scheduler(conn->proxy->combiner, false)); grpc_closure_init(&conn->on_server_write_done, on_server_write_done, conn, - grpc_schedule_on_exec_ctx); + grpc_combiner_scheduler(conn->proxy->combiner, false)); grpc_slice_buffer_init(&conn->client_read_buffer); grpc_slice_buffer_init(&conn->client_deferred_write_buffer); grpc_slice_buffer_init(&conn->client_write_buffer); @@ -453,6 +456,7 @@ grpc_end2end_http_proxy* grpc_end2end_http_proxy_create(void) { grpc_end2end_http_proxy* proxy = (grpc_end2end_http_proxy*)gpr_malloc(sizeof(*proxy)); memset(proxy, 0, sizeof(*proxy)); + proxy->combiner = grpc_combiner_create(NULL); gpr_ref_init(&proxy->users, 1); // Construct proxy address. const int proxy_port = grpc_pick_unused_port_or_die(); @@ -504,6 +508,7 @@ void grpc_end2end_http_proxy_destroy(grpc_end2end_http_proxy* proxy) { grpc_pollset_shutdown(&exec_ctx, proxy->pollset, grpc_closure_create(destroy_pollset, proxy->pollset, grpc_schedule_on_exec_ctx)); + grpc_combiner_unref(&exec_ctx, proxy->combiner); gpr_free(proxy); grpc_exec_ctx_finish(&exec_ctx); } diff --git a/test/core/end2end/fuzzers/BUILD b/test/core/end2end/fuzzers/BUILD index 4d98aa0725..55810bd0b8 100644 --- a/test/core/end2end/fuzzers/BUILD +++ b/test/core/end2end/fuzzers/BUILD @@ -27,30 +27,45 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_cc_binary") + licenses(["notice"]) # 3-clause BSD load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer") grpc_fuzzer( - name = "api_fuzzer", - srcs = ["api_fuzzer.c"], - deps = ["//:gpr", "//:grpc", "//test/core/util:grpc_test_util", "//test/core/end2end:ssl_test_data"], - corpus = "api_fuzzer_corpus", - copts = ["-std=c99"], + name = "api_fuzzer", + srcs = ["api_fuzzer.c"], + language = "C", + corpus = "api_fuzzer_corpus", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/end2end:ssl_test_data", + "//test/core/util:grpc_test_util", + ], ) grpc_fuzzer( - name = "client_fuzzer", - srcs = ["client_fuzzer.c"], - deps = ["//:gpr", "//:grpc", "//test/core/util:grpc_test_util"], - corpus = "client_fuzzer_corpus", - copts = ["-std=c99"], + name = "client_fuzzer", + srcs = ["client_fuzzer.c"], + language = "C", + corpus = "client_fuzzer_corpus", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:grpc_test_util", + ], ) grpc_fuzzer( - name = "server_fuzzer", - srcs = ["server_fuzzer.c"], - deps = ["//:gpr", "//:grpc", "//test/core/util:grpc_test_util"], - corpus = "server_fuzzer_corpus", - copts = ["-std=c99"], + name = "server_fuzzer", + srcs = ["server_fuzzer.c"], + language = "C", + corpus = "server_fuzzer_corpus", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:grpc_test_util", + ], ) diff --git a/test/core/end2end/gen_build_yaml.py b/test/core/end2end/gen_build_yaml.py index 48e5720539..34b5938288 100755 --- a/test/core/end2end/gen_build_yaml.py +++ b/test/core/end2end/gen_build_yaml.py @@ -60,6 +60,7 @@ END2END_FIXTURES = { 'h2_full+pipe': default_unsecure_fixture_options._replace( platforms=['linux'], exclude_iomgrs=['uv']), 'h2_full+trace': default_unsecure_fixture_options._replace(tracing=True), + 'h2_full+workarounds': default_unsecure_fixture_options, 'h2_http_proxy': default_unsecure_fixture_options._replace( ci_mac=False, exclude_iomgrs=['uv']), 'h2_oauth2': default_secure_fixture_options._replace( @@ -151,6 +152,7 @@ END2END_TESTS = { 'simple_request': default_test_options, 'streaming_error_response': default_test_options._replace(cpu_cost=LOWCPU), 'trailing_metadata': default_test_options, + 'workaround_cronet_compression': default_test_options, 'write_buffering': default_test_options._replace(cpu_cost=LOWCPU), 'write_buffering_at_end': default_test_options._replace(cpu_cost=LOWCPU), } diff --git a/test/core/end2end/generate_tests.bzl b/test/core/end2end/generate_tests.bzl index e14157849f..6865aefa3d 100755 --- a/test/core/end2end/generate_tests.bzl +++ b/test/core/end2end/generate_tests.bzl @@ -28,6 +28,7 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +load("//bazel:grpc_build_system.bzl", "grpc_sh_test", "grpc_cc_binary", "grpc_cc_library") """Generates the appropriate build.json data for all the end2end tests.""" @@ -56,6 +57,7 @@ END2END_FIXTURES = { 'h2_full': fixture_options(), 'h2_full+pipe': fixture_options(platforms=['linux']), 'h2_full+trace': fixture_options(tracing=True), + 'h2_full+workarounds': fixture_options(), 'h2_http_proxy': fixture_options(), 'h2_oauth2': fixture_options(), 'h2_proxy': fixture_options(includes_proxy=True), @@ -135,6 +137,7 @@ END2END_TESTS = { 'trailing_metadata': test_options(), 'authority_not_supported': test_options(), 'filter_latency': test_options(), + 'workaround_cronet_compression': test_options(), 'write_buffering': test_options(), 'write_buffering_at_end': test_options(), } @@ -157,7 +160,7 @@ def compatible(fopt, topt): def grpc_end2end_tests(): - native.cc_library( + grpc_cc_library( name = 'end2end_tests', srcs = ['end2end_tests.c', 'end2end_test_utils.c'] + [ 'tests/%s.c' % t @@ -166,31 +169,33 @@ def grpc_end2end_tests(): 'tests/cancel_test_helpers.h', 'end2end_tests.h' ], - copts = ['-std=c99'], + language = "C", deps = [ ':cq_verifier', ':ssl_test_data', ':fake_resolver', ':http_proxy', ':proxy', - '//test/core/util:grpc_test_util', - '//:grpc', - '//test/core/util:gpr_test_util', - '//:gpr', ] ) for f, fopt in END2END_FIXTURES.items(): - native.cc_binary( + grpc_cc_binary( name = '%s_test' % f, srcs = ['fixtures/%s.c' % f], - copts = ['-std=c99'], - deps = [':end2end_tests'] + language = "C", + deps = [ + ':end2end_tests', + '//test/core/util:grpc_test_util', + '//:grpc', + '//test/core/util:gpr_test_util', + '//:gpr', + ], ) for t, topt in END2END_TESTS.items(): #print(compatible(fopt, topt), f, t, fopt, topt) if not compatible(fopt, topt): continue - native.sh_test( + grpc_sh_test( name = '%s_test@%s' % (f, t), srcs = ['end2end_test.sh'], args = ['$(location %s_test)' % f, t], diff --git a/test/core/end2end/tests/workaround_cronet_compression.c b/test/core/end2end/tests/workaround_cronet_compression.c new file mode 100644 index 0000000000..f8ce8c50c4 --- /dev/null +++ b/test/core/end2end/tests/workaround_cronet_compression.c @@ -0,0 +1,411 @@ +/* + * + * Copyright 2015, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "test/core/end2end/end2end_tests.h" + +#include <stdio.h> +#include <string.h> + +#include <grpc/byte_buffer.h> +#include <grpc/byte_buffer_reader.h> +#include <grpc/compression.h> +#include <grpc/support/alloc.h> +#include <grpc/support/log.h> +#include <grpc/support/string_util.h> +#include <grpc/support/time.h> +#include <grpc/support/useful.h> + +#include "src/core/lib/channel/channel_args.h" +#include "src/core/lib/surface/call.h" +#include "src/core/lib/surface/call_test_only.h" +#include "src/core/lib/transport/static_metadata.h" +#include "test/core/end2end/cq_verifier.h" + +static void *tag(intptr_t 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, "Running test: %s/%s", test_name, config.name); + f = config.create_fixture(client_args, server_args); + config.init_server(&f, server_args); + config.init_client(&f, client_args); + return f; +} + +static gpr_timespec n_seconds_from_now(int n) { + return grpc_timeout_seconds_to_deadline(n); +} + +static gpr_timespec five_seconds_from_now(void) { + return n_seconds_from_now(5); +} + +static void drain_cq(grpc_completion_queue *cq) { + grpc_event ev; + do { + ev = grpc_completion_queue_next(cq, five_seconds_from_now(), NULL); + } while (ev.type != GRPC_QUEUE_SHUTDOWN); +} + +static void shutdown_server(grpc_end2end_test_fixture *f) { + if (!f->server) return; + grpc_server_shutdown_and_notify(f->server, f->shutdown_cq, tag(1000)); + GPR_ASSERT(grpc_completion_queue_pluck(f->shutdown_cq, tag(1000), + grpc_timeout_seconds_to_deadline(5), + NULL) + .type == GRPC_OP_COMPLETE); + 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->cq); + drain_cq(f->cq); + grpc_completion_queue_destroy(f->cq); + grpc_completion_queue_destroy(f->shutdown_cq); +} + +static void request_with_payload_template( + grpc_end2end_test_config config, const char *test_name, + uint32_t client_send_flags_bitmask, + grpc_compression_algorithm default_client_channel_compression_algorithm, + grpc_compression_algorithm default_server_channel_compression_algorithm, + grpc_compression_algorithm expected_algorithm_from_client, + grpc_compression_algorithm expected_algorithm_from_server, + grpc_metadata *client_init_metadata, bool set_server_level, + grpc_compression_level server_compression_level, + char *user_agent_override) { + grpc_call *c; + grpc_call *s; + grpc_slice request_payload_slice; + grpc_byte_buffer *request_payload; + grpc_channel_args *client_args; + grpc_channel_args *server_args; + grpc_end2end_test_fixture f; + grpc_op ops[6]; + grpc_op *op; + grpc_metadata_array initial_metadata_recv; + grpc_metadata_array trailing_metadata_recv; + grpc_metadata_array request_metadata_recv; + grpc_byte_buffer *request_payload_recv = NULL; + grpc_byte_buffer *response_payload; + grpc_byte_buffer *response_payload_recv; + grpc_call_details call_details; + grpc_status_code status; + grpc_call_error error; + grpc_slice details; + int was_cancelled = 2; + cq_verifier *cqv; + char request_str[1024]; + char response_str[1024]; + + memset(request_str, 'x', 1023); + request_str[1023] = '\0'; + + memset(response_str, 'y', 1023); + response_str[1023] = '\0'; + + request_payload_slice = grpc_slice_from_copied_string(request_str); + grpc_slice response_payload_slice = + grpc_slice_from_copied_string(response_str); + + client_args = grpc_channel_args_set_compression_algorithm( + NULL, default_client_channel_compression_algorithm); + server_args = grpc_channel_args_set_compression_algorithm( + NULL, default_server_channel_compression_algorithm); + + if (user_agent_override) { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_channel_args *client_args_old = client_args; + grpc_arg arg; + arg.key = GRPC_ARG_PRIMARY_USER_AGENT_STRING; + arg.type = GRPC_ARG_STRING; + arg.value.string = user_agent_override; + client_args = grpc_channel_args_copy_and_add(client_args_old, &arg, 1); + grpc_channel_args_destroy(&exec_ctx, client_args_old); + grpc_exec_ctx_finish(&exec_ctx); + } + + f = begin_test(config, test_name, client_args, server_args); + cqv = cq_verifier_create(f.cq); + + gpr_timespec deadline = five_seconds_from_now(); + c = grpc_channel_create_call( + f.client, NULL, GRPC_PROPAGATE_DEFAULTS, f.cq, + grpc_slice_from_static_string("/foo"), + get_host_override_slice("foo.test.google.fr:1234", config), deadline, + NULL); + GPR_ASSERT(c); + + grpc_metadata_array_init(&initial_metadata_recv); + grpc_metadata_array_init(&trailing_metadata_recv); + grpc_metadata_array_init(&request_metadata_recv); + grpc_call_details_init(&call_details); + + memset(ops, 0, sizeof(ops)); + op = ops; + op->op = GRPC_OP_SEND_INITIAL_METADATA; + if (client_init_metadata != NULL) { + op->data.send_initial_metadata.count = 1; + op->data.send_initial_metadata.metadata = client_init_metadata; + } else { + op->data.send_initial_metadata.count = 0; + } + op->flags = 0; + op->reserved = NULL; + op++; + op->op = GRPC_OP_RECV_INITIAL_METADATA; + op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv; + op->flags = 0; + op->reserved = NULL; + op++; + op->op = GRPC_OP_RECV_STATUS_ON_CLIENT; + op->data.recv_status_on_client.trailing_metadata = &trailing_metadata_recv; + op->data.recv_status_on_client.status = &status; + op->data.recv_status_on_client.status_details = &details; + op->flags = 0; + op->reserved = NULL; + op++; + error = grpc_call_start_batch(c, ops, (size_t)(op - ops), tag(1), NULL); + GPR_ASSERT(GRPC_CALL_OK == error); + + error = + grpc_server_request_call(f.server, &s, &call_details, + &request_metadata_recv, f.cq, f.cq, tag(100)); + GPR_ASSERT(GRPC_CALL_OK == error); + CQ_EXPECT_COMPLETION(cqv, tag(100), true); + cq_verify(cqv); + + GPR_ASSERT(GPR_BITCOUNT(grpc_call_test_only_get_encodings_accepted_by_peer( + s)) == GRPC_COMPRESS_ALGORITHMS_COUNT); + GPR_ASSERT(GPR_BITGET(grpc_call_test_only_get_encodings_accepted_by_peer(s), + GRPC_COMPRESS_NONE) != 0); + GPR_ASSERT(GPR_BITGET(grpc_call_test_only_get_encodings_accepted_by_peer(s), + GRPC_COMPRESS_DEFLATE) != 0); + GPR_ASSERT(GPR_BITGET(grpc_call_test_only_get_encodings_accepted_by_peer(s), + GRPC_COMPRESS_GZIP) != 0); + + memset(ops, 0, sizeof(ops)); + op = ops; + op->op = GRPC_OP_SEND_INITIAL_METADATA; + op->data.send_initial_metadata.count = 0; + if (set_server_level) { + op->data.send_initial_metadata.maybe_compression_level.is_set = true; + op->data.send_initial_metadata.maybe_compression_level.level = + server_compression_level; + } + op->flags = 0; + op->reserved = NULL; + op++; + op->op = GRPC_OP_RECV_CLOSE_ON_SERVER; + op->data.recv_close_on_server.cancelled = &was_cancelled; + op->flags = 0; + op->reserved = NULL; + op++; + error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(101), NULL); + GPR_ASSERT(GRPC_CALL_OK == error); + + for (int i = 0; i < 2; i++) { + request_payload = grpc_raw_byte_buffer_create(&request_payload_slice, 1); + response_payload = grpc_raw_byte_buffer_create(&response_payload_slice, 1); + + memset(ops, 0, sizeof(ops)); + op = ops; + op->op = GRPC_OP_SEND_MESSAGE; + op->data.send_message.send_message = request_payload; + op->flags = client_send_flags_bitmask; + op->reserved = NULL; + op++; + op->op = GRPC_OP_RECV_MESSAGE; + op->data.recv_message.recv_message = &response_payload_recv; + op->flags = 0; + op->reserved = NULL; + op++; + error = grpc_call_start_batch(c, ops, (size_t)(op - ops), tag(2), NULL); + GPR_ASSERT(GRPC_CALL_OK == error); + + memset(ops, 0, sizeof(ops)); + op = ops; + op->op = GRPC_OP_RECV_MESSAGE; + op->data.recv_message.recv_message = &request_payload_recv; + op->flags = 0; + op->reserved = NULL; + op++; + error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL); + GPR_ASSERT(GRPC_CALL_OK == error); + CQ_EXPECT_COMPLETION(cqv, tag(102), 1); + cq_verify(cqv); + + GPR_ASSERT(request_payload_recv->type == GRPC_BB_RAW); + GPR_ASSERT(byte_buffer_eq_string(request_payload_recv, request_str)); + GPR_ASSERT(request_payload_recv->data.raw.compression == + expected_algorithm_from_client); + + memset(ops, 0, sizeof(ops)); + op = ops; + op->op = GRPC_OP_SEND_MESSAGE; + op->data.send_message.send_message = response_payload; + op->flags = 0; + op->reserved = NULL; + op++; + error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(103), NULL); + GPR_ASSERT(GRPC_CALL_OK == error); + CQ_EXPECT_COMPLETION(cqv, tag(103), 1); + CQ_EXPECT_COMPLETION(cqv, tag(2), 1); + cq_verify(cqv); + + GPR_ASSERT(response_payload_recv->type == GRPC_BB_RAW); + GPR_ASSERT(byte_buffer_eq_string(response_payload_recv, response_str)); + if (server_compression_level > GRPC_COMPRESS_LEVEL_NONE) { + const grpc_compression_algorithm algo_for_server_level = + grpc_call_compression_for_level(s, server_compression_level); + GPR_ASSERT(response_payload_recv->data.raw.compression == + algo_for_server_level); + } else { + GPR_ASSERT(response_payload_recv->data.raw.compression == + expected_algorithm_from_server); + } + + grpc_byte_buffer_destroy(request_payload); + grpc_byte_buffer_destroy(response_payload); + grpc_byte_buffer_destroy(request_payload_recv); + grpc_byte_buffer_destroy(response_payload_recv); + } + + grpc_slice_unref(request_payload_slice); + grpc_slice_unref(response_payload_slice); + + memset(ops, 0, sizeof(ops)); + op = ops; + op->op = GRPC_OP_SEND_CLOSE_FROM_CLIENT; + op->flags = 0; + op->reserved = NULL; + op++; + error = grpc_call_start_batch(c, ops, (size_t)(op - ops), tag(3), NULL); + GPR_ASSERT(GRPC_CALL_OK == error); + + memset(ops, 0, sizeof(ops)); + op = ops; + op->op = GRPC_OP_SEND_STATUS_FROM_SERVER; + op->data.send_status_from_server.trailing_metadata_count = 0; + op->data.send_status_from_server.status = GRPC_STATUS_OK; + grpc_slice status_details = grpc_slice_from_static_string("xyz"); + op->data.send_status_from_server.status_details = &status_details; + op->flags = 0; + op->reserved = NULL; + op++; + error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(104), NULL); + GPR_ASSERT(GRPC_CALL_OK == error); + + CQ_EXPECT_COMPLETION(cqv, tag(1), 1); + CQ_EXPECT_COMPLETION(cqv, tag(3), 1); + CQ_EXPECT_COMPLETION(cqv, tag(101), 1); + CQ_EXPECT_COMPLETION(cqv, tag(104), 1); + cq_verify(cqv); + + GPR_ASSERT(status == GRPC_STATUS_OK); + GPR_ASSERT(0 == grpc_slice_str_cmp(details, "xyz")); + GPR_ASSERT(0 == grpc_slice_str_cmp(call_details.method, "/foo")); + validate_host_override_string("foo.test.google.fr:1234", call_details.host, + config); + GPR_ASSERT(was_cancelled == 0); + + grpc_slice_unref(details); + grpc_metadata_array_destroy(&initial_metadata_recv); + grpc_metadata_array_destroy(&trailing_metadata_recv); + grpc_metadata_array_destroy(&request_metadata_recv); + grpc_call_details_destroy(&call_details); + + grpc_call_unref(c); + grpc_call_unref(s); + + cq_verifier_destroy(cqv); + + { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_channel_args_destroy(&exec_ctx, client_args); + grpc_channel_args_destroy(&exec_ctx, server_args); + grpc_exec_ctx_finish(&exec_ctx); + } + + end_test(&f); + config.tear_down_data(&f); +} + +typedef struct workaround_cronet_compression_config { + char *user_agent_override; + grpc_compression_algorithm expected_algorithm_from_server; +} workaround_cronet_compression_config; + +static workaround_cronet_compression_config workaround_configs[] = { + {NULL, GRPC_COMPRESS_GZIP}, + {"grpc-objc/1.3.0-dev grpc-c/3.0.0-dev (ios; cronet_http; gentle)", + GRPC_COMPRESS_NONE}, + {"grpc-objc/1.3.0-dev grpc-c/3.0.0-dev (ios; chttp2; gentle)", + GRPC_COMPRESS_GZIP}, + {"grpc-objc/1.4.0 grpc-c/3.0.0-dev (ios; cronet_http; gentle)", + GRPC_COMPRESS_GZIP}}; +static const size_t workaround_configs_num = + sizeof(workaround_configs) / sizeof(*workaround_configs); + +static void test_workaround_cronet_compression( + grpc_end2end_test_config config) { + for (uint32_t i = 0; i < workaround_configs_num; i++) { + request_with_payload_template( + config, "test_invoke_request_with_compressed_payload", 0, + GRPC_COMPRESS_GZIP, GRPC_COMPRESS_GZIP, GRPC_COMPRESS_GZIP, + workaround_configs[i].expected_algorithm_from_server, NULL, false, + /* ignored */ GRPC_COMPRESS_LEVEL_NONE, + workaround_configs[i].user_agent_override); + } +} + +void workaround_cronet_compression(grpc_end2end_test_config config) { + if (config.feature_mask & FEATURE_MASK_SUPPORTS_WORKAROUNDS) { + test_workaround_cronet_compression(config); + } +} + +void workaround_cronet_compression_pre_init(void) {} diff --git a/test/core/fling/BUILD b/test/core/fling/BUILD index 0b0ebcb252..8f17527d44 100644 --- a/test/core/fling/BUILD +++ b/test/core/fling/BUILD @@ -27,36 +27,68 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_cc_binary") + licenses(["notice"]) # 3-clause BSD load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer") -cc_binary( +grpc_cc_binary( name = "client", - srcs = ["client.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util", "//test/core/end2end:ssl_test_data"], testonly = 1, - copts = ['-std=c99'] + srcs = ["client.c"], + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/end2end:ssl_test_data", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_binary( +grpc_cc_binary( name = "server", - srcs = ["server.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util", "//test/core/end2end:ssl_test_data"], testonly = 1, - copts = ['-std=c99'] + srcs = ["server.c"], + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/end2end:ssl_test_data", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "fling", srcs = ["fling_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util", "//test/core/end2end:ssl_test_data"], - data = [":client", ":server"] + data = [ + ":client", + ":server", + ], + deps = [ + "//:gpr", + "//:grpc", + "//test/core/end2end:ssl_test_data", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "fling_stream", srcs = ["fling_stream_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util", "//test/core/end2end:ssl_test_data"], - data = [":client", ":server"] + data = [ + ":client", + ":server", + ], + deps = [ + "//:gpr", + "//:grpc", + "//test/core/end2end:ssl_test_data", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) diff --git a/test/core/handshake/BUILD b/test/core/handshake/BUILD index 996b503d35..bdb91eab8b 100644 --- a/test/core/handshake/BUILD +++ b/test/core/handshake/BUILD @@ -27,12 +27,14 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_cc_binary") + licenses(["notice"]) # 3-clause BSD -cc_test( +grpc_cc_test( name = "client_ssl", srcs = ["client_ssl.c"], - copts = ["-std=c99"], + language = "C", data = [ "//src/core/tsi/test_creds:ca.pem", "//src/core/tsi/test_creds:server1.key", @@ -46,10 +48,10 @@ cc_test( ], ) -cc_test( +grpc_cc_test( name = "server_ssl", srcs = ["server_ssl.c"], - copts = ["-std=c99"], + language = "C", data = [ "//src/core/tsi/test_creds:ca.pem", "//src/core/tsi/test_creds:server1.key", diff --git a/test/core/http/BUILD b/test/core/http/BUILD index abfa759179..9350daccf4 100644 --- a/test/core/http/BUILD +++ b/test/core/http/BUILD @@ -27,24 +27,34 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_cc_binary") + licenses(["notice"]) # 3-clause BSD load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer") grpc_fuzzer( - name = "response_fuzzer", - srcs = ["response_fuzzer.c"], - deps = ["//:gpr", "//:grpc", "//test/core/util:grpc_test_util"], - corpus = "response_corpus", - copts = ["-std=c99"], + name = "response_fuzzer", + srcs = ["response_fuzzer.c"], + language = "C", + corpus = "response_corpus", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:grpc_test_util", + ], ) grpc_fuzzer( - name = "request_fuzzer", - srcs = ["request_fuzzer.c"], - deps = ["//:gpr", "//:grpc", "//test/core/util:grpc_test_util"], - corpus = "request_corpus", - copts = ["-std=c99"], + name = "request_fuzzer", + srcs = ["request_fuzzer.c"], + language = "C", + corpus = "request_corpus", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:grpc_test_util", + ], ) # Copyright 2017, Google Inc. @@ -80,25 +90,43 @@ licenses(["notice"]) # 3-clause BSD load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer") -cc_test( +grpc_cc_test( name = "httpcli_test", srcs = ["httpcli_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util", "//test/core/end2end:ssl_test_data"], - copts = ['-std=c99'], - data = ['test_server.py'] + language = "C", + data = ["test_server.py"], + deps = [ + "//:gpr", + "//:grpc", + "//test/core/end2end:ssl_test_data", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "httpscli_test", srcs = ["httpscli_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util", "//test/core/end2end:ssl_test_data"], - copts = ['-std=c99'], - data = ['test_server.py'] + language = "C", + data = ["test_server.py"], + deps = [ + "//:gpr", + "//:grpc", + "//test/core/end2end:ssl_test_data", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "parser_test", srcs = ["parser_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util", "//test/core/end2end:ssl_test_data"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/end2end:ssl_test_data", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) diff --git a/test/core/iomgr/BUILD b/test/core/iomgr/BUILD index 808faf57c9..269ca949f6 100644 --- a/test/core/iomgr/BUILD +++ b/test/core/iomgr/BUILD @@ -27,155 +27,266 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_cc_binary") + licenses(["notice"]) # 3-clause BSD load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer") -cc_library( +package(default_visibility = ["//visibility:public"]) # Useful for third party devs to test their io manager implementation. + +grpc_cc_library( name = "endpoint_tests", srcs = ["endpoint_tests.c"], hdrs = ["endpoint_tests.h"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], + language = "C", visibility = ["//test:__subpackages__"], - copts = ['-std=c99'] + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "combiner_test", srcs = ["combiner_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "endpoint_pair_test", srcs = ["endpoint_pair_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util", ":endpoint_tests"], - copts = ['-std=c99'] + language = "C", + deps = [ + ":endpoint_tests", + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "ev_epollsig_linux_test", srcs = ["ev_epollsig_linux_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], + language = "C", ) -cc_test( +grpc_cc_test( name = "fd_conservation_posix_test", srcs = ["fd_conservation_posix_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "fd_posix_test", srcs = ["fd_posix_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "load_file_test", srcs = ["load_file_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "pollset_set_test", srcs = ["pollset_set_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "resolve_address_posix_test", srcs = ["resolve_address_posix_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "resolve_address_test", srcs = ["resolve_address_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "resource_quota_test", srcs = ["resource_quota_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "sockaddr_utils_test", srcs = ["sockaddr_utils_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "socket_utils_test", srcs = ["socket_utils_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "tcp_client_posix_test", srcs = ["tcp_client_posix_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "tcp_posix_test", srcs = ["tcp_posix_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util", ":endpoint_tests"], - copts = ['-std=c99'] + language = "C", + deps = [ + ":endpoint_tests", + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "tcp_server_posix_test", srcs = ["tcp_server_posix_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "time_averaged_stats_test", srcs = ["time_averaged_stats_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "timer_heap_test", srcs = ["timer_heap_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "timer_list_test", srcs = ["timer_list_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "udp_server_test", srcs = ["udp_server_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "wakeup_fd_cv_test", srcs = ["wakeup_fd_cv_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) diff --git a/test/core/json/BUILD b/test/core/json/BUILD index f5a877e6af..aba2e2c522 100644 --- a/test/core/json/BUILD +++ b/test/core/json/BUILD @@ -27,44 +27,75 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_cc_binary") + licenses(["notice"]) # 3-clause BSD load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer") grpc_fuzzer( - name = "json_fuzzer", - srcs = ["fuzzer.c"], - deps = ["//:gpr", "//:grpc", "//test/core/util:grpc_test_util"], - corpus = "corpus", - copts = ["-std=c99"], + name = "json_fuzzer", + srcs = ["fuzzer.c"], + language = "C", + corpus = "corpus", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:grpc_test_util", + ], ) -cc_binary( +grpc_cc_binary( name = "json_rewrite", - srcs = ["json_rewrite.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], testonly = 1, - copts = ['-std=c99'] + srcs = ["json_rewrite.c"], + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "json_rewrite_test", srcs = ["json_rewrite_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'], - data = ["rewrite_test_input.json", "rewrite_test_output_condensed.json", "rewrite_test_output_indented.json", ":json_stream_error_test"] + language = "C", + data = [ + "rewrite_test_input.json", + "rewrite_test_output_condensed.json", + "rewrite_test_output_indented.json", + ":json_stream_error_test", + ], + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "json_stream_error_test", srcs = ["json_stream_error_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "json_test", srcs = ["json_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) diff --git a/test/core/nanopb/BUILD b/test/core/nanopb/BUILD index b02d750f32..33e9338ed4 100644 --- a/test/core/nanopb/BUILD +++ b/test/core/nanopb/BUILD @@ -27,23 +27,32 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_cc_binary") + licenses(["notice"]) # 3-clause BSD load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer") grpc_fuzzer( - name = "fuzzer_response", - srcs = ["fuzzer_response.c"], - deps = ["//:gpr", "//:grpc", "//test/core/util:grpc_test_util"], - corpus = "corpus_response", - copts = ["-std=c99"], + name = "fuzzer_response", + srcs = ["fuzzer_response.c"], + language = "C", + corpus = "corpus_response", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:grpc_test_util", + ], ) grpc_fuzzer( - name = "fuzzer_serverlist", - srcs = ["fuzzer_serverlist.c"], - deps = ["//:gpr", "//:grpc", "//test/core/util:grpc_test_util"], - corpus = "corpus_serverlist", - copts = ["-std=c99"], + name = "fuzzer_serverlist", + srcs = ["fuzzer_serverlist.c"], + language = "C", + corpus = "corpus_serverlist", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:grpc_test_util", + ], ) - diff --git a/test/core/network_benchmarks/BUILD b/test/core/network_benchmarks/BUILD index a5209de4c9..5c243f7347 100644 --- a/test/core/network_benchmarks/BUILD +++ b/test/core/network_benchmarks/BUILD @@ -27,11 +27,18 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_cc_binary") + licenses(["notice"]) # 3-clause BSD -cc_binary( +grpc_cc_binary( name = "low_level_ping_pong", srcs = ["low_level_ping_pong.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) diff --git a/test/core/security/BUILD b/test/core/security/BUILD index a81e1d366b..b2d8774e80 100644 --- a/test/core/security/BUILD +++ b/test/core/security/BUILD @@ -27,72 +27,110 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_cc_binary") + licenses(["notice"]) # 3-clause BSD load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer") grpc_fuzzer( - name = "ssl_server_fuzzer", - srcs = ["ssl_server_fuzzer.c"], - deps = ["//:gpr", "//:grpc", "//test/core/util:grpc_test_util", "//test/core/end2end:ssl_test_data"], - corpus = "corpus", - copts = ["-std=c99"], + name = "ssl_server_fuzzer", + srcs = ["ssl_server_fuzzer.c"], + language = "C", + corpus = "corpus", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/end2end:ssl_test_data", + "//test/core/util:grpc_test_util", + ], ) -cc_library( +grpc_cc_library( name = "oauth2_utils", srcs = ["oauth2_utils.c"], hdrs = ["oauth2_utils.h"], + language = "C", deps = ["//:grpc"], - copts = ['-std=c99'], visibility = ["//test/cpp:__subpackages__"], ) -cc_test( +grpc_cc_test( name = "auth_context_test", srcs = ["auth_context_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "credentials_test", srcs = ["credentials_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "secure_endpoint_test", srcs = ["secure_endpoint_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util", "//test/core/iomgr:endpoint_tests"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/iomgr:endpoint_tests", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "security_connector_test", srcs = ["security_connector_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_binary( +grpc_cc_binary( name = "create_jwt", srcs = ["create_jwt.c"], - deps = ["//:grpc", "//:gpr"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + ], ) -cc_binary( +grpc_cc_binary( name = "fetch_oauth2", srcs = ["fetch_oauth2.c"], - deps = ["//:grpc", "//:gpr", ":oauth2_utils"], - copts = ['-std=c99'] + language = "C", + deps = [ + ":oauth2_utils", + "//:gpr", + "//:grpc", + ], ) -cc_binary( +grpc_cc_binary( name = "verify_jwt", srcs = ["verify_jwt.c"], - deps = ["//:grpc", "//:gpr"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + ], ) diff --git a/test/core/slice/BUILD b/test/core/slice/BUILD index 18cf6f60af..8dc34e7492 100644 --- a/test/core/slice/BUILD +++ b/test/core/slice/BUILD @@ -27,56 +27,77 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_cc_binary") + licenses(["notice"]) # 3-clause BSD load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer") grpc_fuzzer( - name = "percent_decode_fuzzer", - srcs = ["percent_decode_fuzzer.c"], - deps = ["//:gpr", "//:grpc", "//test/core/util:grpc_test_util"], - corpus = "response_corpus", - copts = ["-std=c99"], + name = "percent_decode_fuzzer", + srcs = ["percent_decode_fuzzer.c"], + language = "C", + corpus = "response_corpus", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "percent_encoding_test", srcs = ["percent_encoding_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "slice_test", srcs = ["slice_test.c"], deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", ) -cc_test( +grpc_cc_test( name = "slice_string_helpers_test", srcs = ["slice_string_helpers_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "slice_buffer_test", srcs = ["slice_buffer_test.c"], deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", ) -cc_test( +grpc_cc_test( name = "slice_hash_table_test", srcs = ["slice_hash_table_test.c"], deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", ) -cc_test( +grpc_cc_test( name = "b64_test", srcs = ["b64_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) diff --git a/test/core/support/BUILD b/test/core/support/BUILD index 3183510db9..db408199fc 100644 --- a/test/core/support/BUILD +++ b/test/core/support/BUILD @@ -27,137 +27,196 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_cc_binary") + licenses(["notice"]) # 3-clause BSD -cc_test( +grpc_cc_test( name = "alloc_test", srcs = ["alloc_test.c"], - deps = ["//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//test/core/util:gpr_test_util", + ], ) -cc_test( +grpc_cc_test( name = "avl_test", srcs = ["avl_test.c"], - deps = ["//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//test/core/util:gpr_test_util", + ], ) -cc_test( +grpc_cc_test( name = "backoff_test", srcs = ["backoff_test.c"], - deps = ["//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//test/core/util:gpr_test_util", + ], ) -cc_test( +grpc_cc_test( name = "cmdline_test", srcs = ["cmdline_test.c"], - deps = ["//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//test/core/util:gpr_test_util", + ], ) -cc_test( +grpc_cc_test( name = "cpu_test", srcs = ["cpu_test.c"], - deps = ["//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//test/core/util:gpr_test_util", + ], ) -cc_test( +grpc_cc_test( name = "env_test", srcs = ["env_test.c"], - deps = ["//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//test/core/util:gpr_test_util", + ], ) -cc_test( +grpc_cc_test( name = "histogram_test", srcs = ["histogram_test.c"], - deps = ["//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//test/core/util:gpr_test_util", + ], ) -cc_test( +grpc_cc_test( name = "host_port_test", srcs = ["host_port_test.c"], - deps = ["//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//test/core/util:gpr_test_util", + ], ) -cc_test( +grpc_cc_test( name = "log_test", srcs = ["log_test.c"], - deps = ["//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//test/core/util:gpr_test_util", + ], ) -cc_test( +grpc_cc_test( name = "mpscq_test", srcs = ["mpscq_test.c"], - deps = ["//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//test/core/util:gpr_test_util", + ], ) -cc_test( +grpc_cc_test( name = "murmur_hash_test", srcs = ["murmur_hash_test.c"], - deps = ["//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//test/core/util:gpr_test_util", + ], ) -cc_test( +grpc_cc_test( name = "stack_lockfree_test", srcs = ["stack_lockfree_test.c"], - deps = ["//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//test/core/util:gpr_test_util", + ], ) -cc_test( +grpc_cc_test( name = "string_test", srcs = ["string_test.c"], - deps = ["//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//test/core/util:gpr_test_util", + ], ) -cc_test( +grpc_cc_test( name = "spinlock_test", srcs = ["spinlock_test.c"], - deps = ["//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//test/core/util:gpr_test_util", + ], ) -cc_test( +grpc_cc_test( name = "sync_test", srcs = ["sync_test.c"], - deps = ["//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//test/core/util:gpr_test_util", + ], ) -cc_test( +grpc_cc_test( name = "thd_test", srcs = ["thd_test.c"], - deps = ["//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//test/core/util:gpr_test_util", + ], ) -cc_test( +grpc_cc_test( name = "time_test", srcs = ["time_test.c"], - deps = ["//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//test/core/util:gpr_test_util", + ], ) -cc_test( +grpc_cc_test( name = "tls_test", srcs = ["tls_test.c"], - deps = ["//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//test/core/util:gpr_test_util", + ], ) -cc_test( +grpc_cc_test( name = "useful_test", srcs = ["useful_test.c"], - deps = ["//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//test/core/util:gpr_test_util", + ], ) diff --git a/test/core/surface/BUILD b/test/core/surface/BUILD index 3d5e26ced3..44d37da0b9 100644 --- a/test/core/surface/BUILD +++ b/test/core/surface/BUILD @@ -27,12 +27,14 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_cc_binary") + licenses(["notice"]) # 3-clause BSD -cc_test( +grpc_cc_test( name = "alarm_test", srcs = ["alarm_test.c"], - copts = ["-std=c99"], + language = "C", deps = [ "//:gpr", "//:grpc", @@ -41,10 +43,10 @@ cc_test( ], ) -cc_test( +grpc_cc_test( name = "grpc_byte_buffer_reader_test", srcs = ["byte_buffer_reader_test.c"], - copts = ["-std=c99"], + language = "C", deps = [ "//:gpr", "//:grpc", @@ -53,10 +55,10 @@ cc_test( ], ) -cc_test( +grpc_cc_test( name = "channel_create_test", srcs = ["channel_create_test.c"], - copts = ["-std=c99"], + language = "C", deps = [ "//:gpr", "//:grpc", @@ -65,10 +67,10 @@ cc_test( ], ) -cc_test( +grpc_cc_test( name = "grpc_completion_queue_test", srcs = ["completion_queue_test.c"], - copts = ["-std=c99"], + language = "C", deps = [ "//:gpr", "//:grpc", @@ -77,10 +79,10 @@ cc_test( ], ) -cc_test( +grpc_cc_test( name = "concurrent_connectivity_test", srcs = ["concurrent_connectivity_test.c"], - copts = ["-std=c99"], + language = "C", deps = [ "//:gpr", "//:grpc", @@ -89,10 +91,10 @@ cc_test( ], ) -cc_test( +grpc_cc_test( name = "init_test", srcs = ["init_test.c"], - copts = ["-std=c99"], + language = "C", deps = [ "//:gpr", "//:grpc", @@ -101,10 +103,10 @@ cc_test( ], ) -cc_test( +grpc_cc_test( name = "grpc_invalid_channel_args_test", srcs = ["invalid_channel_args_test.c"], - copts = ["-std=c99"], + language = "C", deps = [ "//:gpr", "//:grpc", @@ -113,10 +115,10 @@ cc_test( ], ) -cc_test( +grpc_cc_test( name = "lame_client_test", srcs = ["lame_client_test.c"], - copts = ["-std=c99"], + language = "C", deps = [ "//:gpr", "//:grpc", @@ -126,10 +128,10 @@ cc_test( ], ) -cc_test( +grpc_cc_test( name = "public_headers_must_be_c89", srcs = ["public_headers_must_be_c89.c"], - copts = ["-std=c99"], + language = "C", deps = [ "//:gpr", "//:grpc", @@ -138,10 +140,10 @@ cc_test( ], ) -cc_test( +grpc_cc_test( name = "secure_channel_create_test", srcs = ["secure_channel_create_test.c"], - copts = ["-std=c99"], + language = "C", deps = [ "//:gpr", "//:grpc", @@ -150,10 +152,10 @@ cc_test( ], ) -cc_test( +grpc_cc_test( name = "sequential_connectivity_test", srcs = ["sequential_connectivity_test.c"], - copts = ["-std=c99"], + language = "C", deps = [ "//:gpr", "//:grpc", @@ -163,10 +165,10 @@ cc_test( ], ) -cc_test( +grpc_cc_test( name = "server_chttp2_test", srcs = ["server_chttp2_test.c"], - copts = ["-std=c99"], + language = "C", deps = [ "//:gpr", "//:grpc", @@ -175,10 +177,10 @@ cc_test( ], ) -cc_test( +grpc_cc_test( name = "server_test", srcs = ["server_test.c"], - copts = ["-std=c99"], + language = "C", deps = [ "//:gpr", "//:grpc", diff --git a/test/core/surface/concurrent_connectivity_test.c b/test/core/surface/concurrent_connectivity_test.c index f0e3394b2e..87ad095170 100644 --- a/test/core/surface/concurrent_connectivity_test.c +++ b/test/core/surface/concurrent_connectivity_test.c @@ -112,7 +112,9 @@ static void on_connect(grpc_exec_ctx *exec_ctx, void *vargs, grpc_endpoint *tcp, grpc_endpoint_shutdown(exec_ctx, tcp, GRPC_ERROR_CREATE_FROM_STATIC_STRING("Connected")); grpc_endpoint_destroy(exec_ctx, tcp); + gpr_mu_lock(args->mu); GRPC_LOG_IF_ERROR("pollset_kick", grpc_pollset_kick(args->pollset, NULL)); + gpr_mu_unlock(args->mu); } void bad_server_thread(void *vargs) { diff --git a/test/core/surface/public_headers_must_be_c89.c b/test/core/surface/public_headers_must_be_c89.c index 330da46849..aa4769c490 100644 --- a/test/core/surface/public_headers_must_be_c89.c +++ b/test/core/surface/public_headers_must_be_c89.c @@ -73,5 +73,6 @@ #include <grpc/support/time.h> #include <grpc/support/tls.h> #include <grpc/support/useful.h> +#include <grpc/support/workaround_list.h> int main(int argc, char **argv) { return 0; } diff --git a/test/core/transport/BUILD b/test/core/transport/BUILD index 08b2fd3332..2628c891ec 100644 --- a/test/core/transport/BUILD +++ b/test/core/transport/BUILD @@ -27,53 +27,90 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_cc_binary") + licenses(["notice"]) # 3-clause BSD -cc_test( +grpc_cc_test( name = "bdp_estimator_test", srcs = ["bdp_estimator_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "connectivity_state_test", srcs = ["connectivity_state_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "metadata_test", srcs = ["metadata_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "pid_controller_test", srcs = ["pid_controller_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "status_conversion_test", srcs = ["status_conversion_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "stream_owned_slice_test", srcs = ["stream_owned_slice_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "timeout_encoding_test", srcs = ["timeout_encoding_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) diff --git a/test/core/transport/chttp2/BUILD b/test/core/transport/chttp2/BUILD index b507e27efe..af2a4aed34 100644 --- a/test/core/transport/chttp2/BUILD +++ b/test/core/transport/chttp2/BUILD @@ -27,69 +27,114 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_cc_binary") + licenses(["notice"]) # 3-clause BSD load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer") grpc_fuzzer( - name = "hpack_parser_fuzzer", - srcs = ["hpack_parser_fuzzer_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util"], - corpus = "hpack_parser_corpus" + name = "hpack_parser_fuzzer", + srcs = ["hpack_parser_fuzzer_test.c"], + corpus = "hpack_parser_corpus", + deps = [ + "//:grpc", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "alpn_test", srcs = ["alpn_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "bin_decoder_test", srcs = ["bin_decoder_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "bin_encoder_test", srcs = ["bin_encoder_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "hpack_encoder_test", srcs = ["hpack_encoder_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "hpack_parser_test", srcs = ["hpack_parser_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "hpack_table_test", srcs = ["hpack_table_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "stream_map_test", srcs = ["stream_map_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) -cc_test( +grpc_cc_test( name = "varint_test", srcs = ["varint_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) diff --git a/test/core/tsi/BUILD b/test/core/tsi/BUILD index e6cba344ee..a0f2910f73 100644 --- a/test/core/tsi/BUILD +++ b/test/core/tsi/BUILD @@ -27,11 +27,18 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_cc_binary") + licenses(["notice"]) # 3-clause BSD -cc_test( +grpc_cc_test( name = "transport_security_test", srcs = ["transport_security_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] + language = "C", + deps = [ + "//:gpr", + "//:grpc", + "//test/core/util:gpr_test_util", + "//test/core/util:grpc_test_util", + ], ) diff --git a/test/core/util/BUILD b/test/core/util/BUILD index 03c79f1f15..6b994625b9 100644 --- a/test/core/util/BUILD +++ b/test/core/util/BUILD @@ -27,23 +27,26 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_cc_binary") + licenses(["notice"]) # 3-clause BSD -cc_library( +package(default_visibility = ["//visibility:public"]) + +grpc_cc_library( name = "gpr_test_util", srcs = [ - "test_config.c", "memory_counters.c", + "test_config.c", ], hdrs = [ - "test_config.h", "memory_counters.h", + "test_config.h", ], deps = ["//:gpr"], - visibility = ["//:__subpackages__"], ) -cc_library( +grpc_cc_library( name = "grpc_test_util", srcs = [ "debugger_macros.c", @@ -60,7 +63,6 @@ cc_library( ], hdrs = [ "debugger_macros.h", - "trickle_endpoint.h", "grpc_profiler.h", "mock_endpoint.h", "parse_hexstring.h", @@ -70,21 +72,25 @@ cc_library( "reconnect_server.h", "slice_splitter.h", "test_tcp_server.h", + "trickle_endpoint.h", + ], + language = "C", + deps = [ + ":gpr_test_util", + "//:grpc", ], - deps = [":gpr_test_util", "//:grpc"], - visibility = ["//test:__subpackages__"], - copts = ["-std=c99"], ) -cc_library( - name = "one_corpus_entry_fuzzer", - srcs = ["one_corpus_entry_fuzzer.c"], - deps = [":gpr_test_util", "//:grpc"], - visibility = ["//test:__subpackages__"], +grpc_cc_library( + name = "one_corpus_entry_fuzzer", + srcs = ["one_corpus_entry_fuzzer.c"], + deps = [ + ":gpr_test_util", + "//:grpc", + ], ) sh_library( - name = "fuzzer_one_entry_runner", - srcs = ["fuzzer_one_entry_runner.sh"], - visibility = ["//test:__subpackages__"], + name = "fuzzer_one_entry_runner", + srcs = ["fuzzer_one_entry_runner.sh"], ) diff --git a/test/core/util/grpc_fuzzer.bzl b/test/core/util/grpc_fuzzer.bzl index 2f552a9fdb..2fcb58b5a9 100644 --- a/test/core/util/grpc_fuzzer.bzl +++ b/test/core/util/grpc_fuzzer.bzl @@ -27,8 +27,10 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +load("//bazel:grpc_build_system.bzl", "grpc_cc_binary") + def grpc_fuzzer(name, corpus, srcs = [], deps = [], **kwargs): - native.cc_binary( + grpc_cc_binary( name = '%s/one_entry.bin' % name, srcs = srcs, deps = deps + ["//test/core/util:one_corpus_entry_fuzzer"], diff --git a/test/core/util/port.c b/test/core/util/port.c index da1ed4e052..271ff226a7 100644 --- a/test/core/util/port.c +++ b/test/core/util/port.c @@ -77,9 +77,11 @@ static int free_chosen_port(int port) { static void free_chosen_ports(void) { size_t i; + grpc_init(); for (i = 0; i < num_chosen_ports; i++) { grpc_free_port_using_server(chosen_ports[i]); } + grpc_shutdown(); gpr_free(chosen_ports); } diff --git a/test/cpp/codegen/BUILD b/test/cpp/codegen/BUILD index 43d133fc34..f974e63eb4 100644 --- a/test/cpp/codegen/BUILD +++ b/test/cpp/codegen/BUILD @@ -29,37 +29,45 @@ licenses(["notice"]) # 3-clause BSD -cc_test( +load("//bazel:grpc_build_system.bzl", "grpc_cc_test") + +grpc_cc_test( name = "codegen_test_full", srcs = ["codegen_test_full.cc"], deps = [ "//:grpc++", - "//external:gtest", "//test/core/util:gpr_test_util", ], + external_deps = [ + "gtest", + ], ) -cc_test( +grpc_cc_test( name = "codegen_test_minimal", srcs = ["codegen_test_minimal.cc"], deps = [ "//:grpc++", - "//external:gtest", "//test/core/util:gpr_test_util", ], + external_deps = [ + "gtest", + ], ) -cc_test( +grpc_cc_test( name = "proto_utils_test", srcs = ["proto_utils_test.cc"], deps = [ "//:grpc++", - "//external:gtest", "//test/core/util:gpr_test_util", ], + external_deps = [ + "gtest", + ], ) -cc_test( +grpc_cc_test( name = "golden_file_test", srcs = ["golden_file_test.cc"], args = ["--generated_file_path=$(GENDIR)/src/proto/grpc/testing/"], @@ -69,9 +77,11 @@ cc_test( ], deps = [ "//:grpc++", - "//external:gflags", - "//external:gtest", "//src/proto/grpc/testing:compiler_test_proto", "//test/core/util:gpr_test_util", ], + external_deps = [ + "gtest", + "gflags", + ], ) diff --git a/test/cpp/common/BUILD b/test/cpp/common/BUILD index 48ad583981..c8b3e46f5f 100644 --- a/test/cpp/common/BUILD +++ b/test/cpp/common/BUILD @@ -29,32 +29,66 @@ licenses(["notice"]) # 3-clause BSD -cc_test( +load("//bazel:grpc_build_system.bzl", "grpc_cc_test") + +grpc_cc_test( name = "alarm_cpp_test", srcs = ["alarm_cpp_test.cc"], - deps = ["//:grpc++", "//external:gtest", "//test/core/util:gpr_test_util"], + deps = [ + "//:grpc++", + "//test/core/util:gpr_test_util", + ], + external_deps = [ + "gtest", + ], ) -cc_test( +grpc_cc_test( name = "auth_property_iterator_test", srcs = ["auth_property_iterator_test.cc"], - deps = ["//:grpc++", "//external:gtest", "//test/core/util:gpr_test_util", "//test/cpp/util:test_util"], + deps = [ + "//:grpc++", + "//test/core/util:gpr_test_util", + "//test/cpp/util:test_util", + ], + external_deps = [ + "gtest", + ], ) -cc_test( +grpc_cc_test( name = "channel_arguments_test", srcs = ["channel_arguments_test.cc"], - deps = ["//:grpc++", "//external:gtest", "//test/core/util:gpr_test_util"], + deps = [ + "//:grpc++", + "//test/core/util:gpr_test_util", + ], + external_deps = [ + "gtest", + ], ) -cc_test( +grpc_cc_test( name = "channel_filter_test", srcs = ["channel_filter_test.cc"], - deps = ["//:grpc++", "//external:gtest", "//test/core/util:gpr_test_util"], + deps = [ + "//:grpc++", + "//test/core/util:gpr_test_util", + ], + external_deps = [ + "gtest", + ], ) -cc_test( +grpc_cc_test( name = "secure_auth_context_test", srcs = ["secure_auth_context_test.cc"], - deps = ["//:grpc++", "//external:gtest", "//test/core/util:gpr_test_util", "//test/cpp/util:test_util"], + deps = [ + "//:grpc++", + "//test/core/util:gpr_test_util", + "//test/cpp/util:test_util", + ], + external_deps = [ + "gtest", + ], ) diff --git a/test/cpp/end2end/BUILD b/test/cpp/end2end/BUILD index e867493fb9..9b691a83e0 100644 --- a/test/cpp/end2end/BUILD +++ b/test/cpp/end2end/BUILD @@ -29,25 +29,30 @@ licenses(["notice"]) # 3-clause BSD -cc_library( +load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test") + +package(default_visibility=["//visibility:public"]) # Allows external users to implement end2end tests. + +grpc_cc_library( name = "test_service_impl", srcs = ["test_service_impl.cc"], hdrs = ["test_service_impl.h"], deps = [ - "//external:gtest", "//src/proto/grpc/testing:echo_proto", "//test/cpp/util:test_util", ], + external_deps = [ + "gtest", + ], ) -cc_test( +grpc_cc_test( name = "async_end2end_test", srcs = ["async_end2end_test.cc"], deps = [ "//:gpr", "//:grpc", "//:grpc++", - "//external:gtest", "//src/proto/grpc/health/v1:health_proto", "//src/proto/grpc/testing:echo_messages_proto", "//src/proto/grpc/testing:echo_proto", @@ -56,16 +61,18 @@ cc_test( "//test/core/util:grpc_test_util", "//test/cpp/util:test_util", ], + external_deps = [ + "gtest", + ], ) -cc_test( +grpc_cc_test( name = "client_crash_test", srcs = ["client_crash_test.cc"], deps = [ "//:gpr", "//:grpc", "//:grpc++", - "//external:gtest", "//src/proto/grpc/testing:echo_messages_proto", "//src/proto/grpc/testing:echo_proto", "//src/proto/grpc/testing/duplicate:echo_duplicate_proto", @@ -73,17 +80,18 @@ cc_test( "//test/core/util:grpc_test_util", "//test/cpp/util:test_util", ], + external_deps = [ + "gtest", + ], ) -cc_test( +grpc_cc_test( name = "client_crash_test_server", srcs = ["client_crash_test_server.cc"], deps = [ "//:gpr", "//:grpc", "//:grpc++", - "//external:gflags", - "//external:gtest", "//src/proto/grpc/testing:echo_messages_proto", "//src/proto/grpc/testing:echo_proto", "//src/proto/grpc/testing/duplicate:echo_duplicate_proto", @@ -91,17 +99,21 @@ cc_test( "//test/core/util:grpc_test_util", "//test/cpp/util:test_util", ], + external_deps = [ + "gflags", + "gtest", + ], ) -cc_test( - name = "end2end_test", +grpc_cc_library( + name = "end2end_test_lib", srcs = ["end2end_test.cc"], + testonly = True, deps = [ ":test_service_impl", "//:gpr", "//:grpc", "//:grpc++", - "//external:gtest", "//src/proto/grpc/testing:echo_messages_proto", "//src/proto/grpc/testing:echo_proto", "//src/proto/grpc/testing/duplicate:echo_duplicate_proto", @@ -109,16 +121,25 @@ cc_test( "//test/core/util:grpc_test_util", "//test/cpp/util:test_util", ], + external_deps = [ + "gtest", + ], ) -cc_test( +grpc_cc_test( + name = "end2end_test", + deps = [ + ":end2end_test_lib" + ], +) + +grpc_cc_test( name = "filter_end2end_test", srcs = ["filter_end2end_test.cc"], deps = [ "//:gpr", "//:grpc", "//:grpc++", - "//external:gtest", "//src/proto/grpc/testing:echo_messages_proto", "//src/proto/grpc/testing:echo_proto", "//src/proto/grpc/testing/duplicate:echo_duplicate_proto", @@ -126,16 +147,18 @@ cc_test( "//test/core/util:grpc_test_util", "//test/cpp/util:test_util", ], + external_deps = [ + "gtest", + ], ) -cc_test( +grpc_cc_test( name = "generic_end2end_test", srcs = ["generic_end2end_test.cc"], deps = [ "//:gpr", "//:grpc", "//:grpc++", - "//external:gtest", "//src/proto/grpc/testing:echo_messages_proto", "//src/proto/grpc/testing:echo_proto", "//src/proto/grpc/testing/duplicate:echo_duplicate_proto", @@ -143,9 +166,12 @@ cc_test( "//test/core/util:grpc_test_util", "//test/cpp/util:test_util", ], + external_deps = [ + "gtest", + ], ) -cc_test( +grpc_cc_test( name = "hybrid_end2end_test", srcs = ["hybrid_end2end_test.cc"], deps = [ @@ -153,7 +179,6 @@ cc_test( "//:gpr", "//:grpc", "//:grpc++", - "//external:gtest", "//src/proto/grpc/testing:echo_messages_proto", "//src/proto/grpc/testing:echo_proto", "//src/proto/grpc/testing/duplicate:echo_duplicate_proto", @@ -161,16 +186,19 @@ cc_test( "//test/core/util:grpc_test_util", "//test/cpp/util:test_util", ], + external_deps = [ + "gtest", + ], ) -cc_test( +grpc_cc_test( name = "mock_test", srcs = ["mock_test.cc"], deps = [ "//:gpr", "//:grpc", "//:grpc++", - "//external:gtest", + "//:grpc++_test", "//src/proto/grpc/testing:echo_messages_proto", "//src/proto/grpc/testing:echo_proto", "//src/proto/grpc/testing/duplicate:echo_duplicate_proto", @@ -178,9 +206,12 @@ cc_test( "//test/core/util:grpc_test_util", "//test/cpp/util:test_util", ], + external_deps = [ + "gtest", + ], ) -cc_test( +grpc_cc_test( name = "round_robin_end2end_test", srcs = ["round_robin_end2end_test.cc"], deps = [ @@ -188,7 +219,6 @@ cc_test( "//:gpr", "//:grpc", "//:grpc++", - "//external:gtest", "//src/proto/grpc/testing:echo_messages_proto", "//src/proto/grpc/testing:echo_proto", "//src/proto/grpc/testing/duplicate:echo_duplicate_proto", @@ -196,10 +226,12 @@ cc_test( "//test/core/util:grpc_test_util", "//test/cpp/util:test_util", ], + external_deps = [ + "gtest", + ], ) - -cc_test( +grpc_cc_test( name = "grpclb_end2end_test", srcs = ["grpclb_end2end_test.cc"], deps = [ @@ -207,7 +239,6 @@ cc_test( "//:gpr", "//:grpc", "//:grpc++", - "//external:gtest", "//src/proto/grpc/lb/v1:load_balancer_proto", "//src/proto/grpc/testing:echo_messages_proto", "//src/proto/grpc/testing:echo_proto", @@ -217,9 +248,12 @@ cc_test( "//test/core/util:grpc_test_util", "//test/cpp/util:test_util", ], + external_deps = [ + "gtest", + ], ) -cc_test( +grpc_cc_test( name = "proto_server_reflection_test", srcs = ["proto_server_reflection_test.cc"], deps = [ @@ -228,8 +262,6 @@ cc_test( "//:grpc", "//:grpc++", "//:grpc++_reflection", - "//external:gflags", - "//external:gtest", "//src/proto/grpc/testing:echo_messages_proto", "//src/proto/grpc/testing:echo_proto", "//src/proto/grpc/testing/duplicate:echo_duplicate_proto", @@ -238,9 +270,13 @@ cc_test( "//test/cpp/util:grpc++_proto_reflection_desc_db", "//test/cpp/util:test_util", ], + external_deps = [ + "gtest", + "gflags", + ], ) -cc_test( +grpc_cc_test( name = "server_builder_plugin_test", srcs = ["server_builder_plugin_test.cc"], deps = [ @@ -248,7 +284,6 @@ cc_test( "//:gpr", "//:grpc", "//:grpc++", - "//external:gtest", "//src/proto/grpc/testing:echo_messages_proto", "//src/proto/grpc/testing:echo_proto", "//src/proto/grpc/testing/duplicate:echo_duplicate_proto", @@ -256,16 +291,18 @@ cc_test( "//test/core/util:grpc_test_util", "//test/cpp/util:test_util", ], + external_deps = [ + "gtest", + ], ) -cc_test( +grpc_cc_test( name = "server_crash_test", srcs = ["server_crash_test.cc"], deps = [ "//:gpr", "//:grpc", "//:grpc++", - "//external:gtest", "//src/proto/grpc/testing:echo_messages_proto", "//src/proto/grpc/testing:echo_proto", "//src/proto/grpc/testing/duplicate:echo_duplicate_proto", @@ -273,17 +310,18 @@ cc_test( "//test/core/util:grpc_test_util", "//test/cpp/util:test_util", ], + external_deps = [ + "gtest", + ], ) -cc_test( +grpc_cc_test( name = "server_crash_test_client", srcs = ["server_crash_test_client.cc"], deps = [ "//:gpr", "//:grpc", "//:grpc++", - "//external:gflags", - "//external:gtest", "//src/proto/grpc/testing:echo_messages_proto", "//src/proto/grpc/testing:echo_proto", "//src/proto/grpc/testing/duplicate:echo_duplicate_proto", @@ -291,16 +329,19 @@ cc_test( "//test/core/util:grpc_test_util", "//test/cpp/util:test_util", ], + external_deps = [ + "gflags", + "gtest", + ], ) -cc_test( +grpc_cc_test( name = "shutdown_test", srcs = ["shutdown_test.cc"], deps = [ "//:gpr", "//:grpc", "//:grpc++", - "//external:gtest", "//src/proto/grpc/testing:echo_messages_proto", "//src/proto/grpc/testing:echo_proto", "//src/proto/grpc/testing/duplicate:echo_duplicate_proto", @@ -308,16 +349,18 @@ cc_test( "//test/core/util:grpc_test_util", "//test/cpp/util:test_util", ], + external_deps = [ + "gtest", + ], ) -cc_test( +grpc_cc_test( name = "streaming_throughput_test", srcs = ["streaming_throughput_test.cc"], deps = [ "//:gpr", "//:grpc", "//:grpc++", - "//external:gtest", "//src/proto/grpc/testing:echo_messages_proto", "//src/proto/grpc/testing:echo_proto", "//src/proto/grpc/testing/duplicate:echo_duplicate_proto", @@ -325,16 +368,18 @@ cc_test( "//test/core/util:grpc_test_util", "//test/cpp/util:test_util", ], + external_deps = [ + "gtest", + ], ) -cc_test( +grpc_cc_test( name = "thread_stress_test", srcs = ["thread_stress_test.cc"], deps = [ "//:gpr", "//:grpc", "//:grpc++", - "//external:gtest", "//src/proto/grpc/testing:echo_messages_proto", "//src/proto/grpc/testing:echo_proto", "//src/proto/grpc/testing/duplicate:echo_duplicate_proto", @@ -342,4 +387,7 @@ cc_test( "//test/core/util:grpc_test_util", "//test/cpp/util:test_util", ], + external_deps = [ + "gtest", + ], ) diff --git a/test/cpp/end2end/async_end2end_test.cc b/test/cpp/end2end/async_end2end_test.cc index cc3958bf13..8d59cbb7e0 100644 --- a/test/cpp/end2end/async_end2end_test.cc +++ b/test/cpp/end2end/async_end2end_test.cc @@ -47,7 +47,6 @@ #include <grpc/support/thd.h> #include <grpc/support/time.h> #include <grpc/support/tls.h> -#include <gtest/gtest.h> #include "src/core/lib/iomgr/port.h" #include "src/proto/grpc/health/v1/health.grpc.pb.h" @@ -58,6 +57,8 @@ #include "test/cpp/util/string_ref_helper.h" #include "test/cpp/util/test_credentials_provider.h" +#include <gtest/gtest.h> + #ifdef GRPC_POSIX_SOCKET #include "src/core/lib/iomgr/ev_posix.h" #endif diff --git a/test/cpp/end2end/client_crash_test.cc b/test/cpp/end2end/client_crash_test.cc index 966c04b0e3..0ea520925f 100644 --- a/test/cpp/end2end/client_crash_test.cc +++ b/test/cpp/end2end/client_crash_test.cc @@ -41,7 +41,6 @@ #include <grpc/support/log.h> #include <grpc/support/thd.h> #include <grpc/support/time.h> -#include <gtest/gtest.h> #include "src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.h" #include "src/proto/grpc/testing/echo.grpc.pb.h" @@ -49,6 +48,8 @@ #include "test/core/util/test_config.h" #include "test/cpp/util/subprocess.h" +#include <gtest/gtest.h> + using grpc::testing::EchoRequest; using grpc::testing::EchoResponse; using std::chrono::system_clock; diff --git a/test/cpp/end2end/end2end_test.cc b/test/cpp/end2end/end2end_test.cc index df71777e4b..9a9e81853f 100644 --- a/test/cpp/end2end/end2end_test.cc +++ b/test/cpp/end2end/end2end_test.cc @@ -48,7 +48,6 @@ #include <grpc/support/log.h> #include <grpc/support/thd.h> #include <grpc/support/time.h> -#include <gtest/gtest.h> #include "src/core/lib/security/credentials/credentials.h" #include "src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.h" @@ -59,6 +58,8 @@ #include "test/cpp/util/string_ref_helper.h" #include "test/cpp/util/test_credentials_provider.h" +#include <gtest/gtest.h> + using grpc::testing::EchoRequest; using grpc::testing::EchoResponse; using grpc::testing::kTlsCredentialsType; diff --git a/test/cpp/end2end/filter_end2end_test.cc b/test/cpp/end2end/filter_end2end_test.cc index 2f873eeaa8..5589e2fddc 100644 --- a/test/cpp/end2end/filter_end2end_test.cc +++ b/test/cpp/end2end/filter_end2end_test.cc @@ -48,7 +48,6 @@ #include <grpc/grpc.h> #include <grpc/support/thd.h> #include <grpc/support/time.h> -#include <gtest/gtest.h> #include "src/cpp/common/channel_filter.h" #include "src/proto/grpc/testing/echo.grpc.pb.h" @@ -56,6 +55,8 @@ #include "test/core/util/test_config.h" #include "test/cpp/util/byte_buffer_proto_helper.h" +#include <gtest/gtest.h> + using grpc::testing::EchoRequest; using grpc::testing::EchoResponse; using std::chrono::system_clock; diff --git a/test/cpp/end2end/generic_end2end_test.cc b/test/cpp/end2end/generic_end2end_test.cc index 25c221bb2b..281c58efad 100644 --- a/test/cpp/end2end/generic_end2end_test.cc +++ b/test/cpp/end2end/generic_end2end_test.cc @@ -46,13 +46,14 @@ #include <grpc/grpc.h> #include <grpc/support/thd.h> #include <grpc/support/time.h> -#include <gtest/gtest.h> #include "src/proto/grpc/testing/echo.grpc.pb.h" #include "test/core/util/port.h" #include "test/core/util/test_config.h" #include "test/cpp/util/byte_buffer_proto_helper.h" +#include <gtest/gtest.h> + using grpc::testing::EchoRequest; using grpc::testing::EchoResponse; using std::chrono::system_clock; @@ -115,6 +116,10 @@ class GenericEnd2endTest : public ::testing::Test { void client_fail(int i) { verify_ok(&cli_cq_, i, false); } void SendRpc(int num_rpcs) { + SendRpc(num_rpcs, false, gpr_inf_future(GPR_CLOCK_MONOTONIC)); + } + + void SendRpc(int num_rpcs, bool check_deadline, gpr_timespec deadline) { const grpc::string kMethodName("/grpc.cpp.test.util.EchoTestService/Echo"); for (int i = 0; i < num_rpcs; i++) { EchoRequest send_request; @@ -129,6 +134,11 @@ class GenericEnd2endTest : public ::testing::Test { // The string needs to be long enough to test heap-based slice. send_request.set_message("Hello world. Hello world. Hello world."); + + if (check_deadline) { + cli_ctx.set_deadline(deadline); + } + std::unique_ptr<GenericClientAsyncReaderWriter> call = generic_stub_->Call(&cli_ctx, kMethodName, &cli_cq_, tag(1)); client_ok(1); @@ -147,6 +157,12 @@ class GenericEnd2endTest : public ::testing::Test { verify_ok(srv_cq_.get(), 4, true); EXPECT_EQ(server_host_, srv_ctx.host().substr(0, server_host_.length())); EXPECT_EQ(kMethodName, srv_ctx.method()); + + if (check_deadline) { + EXPECT_TRUE(gpr_time_similar(deadline, srv_ctx.raw_deadline(), + gpr_time_from_millis(100, GPR_TIMESPAN))); + } + ByteBuffer recv_buffer; stream.Read(&recv_buffer, tag(5)); server_ok(5); @@ -262,6 +278,12 @@ TEST_F(GenericEnd2endTest, SimpleBidiStreaming) { EXPECT_TRUE(recv_status.ok()); } +TEST_F(GenericEnd2endTest, Deadline) { + ResetStub(); + SendRpc(1, true, gpr_time_add(gpr_now(GPR_CLOCK_MONOTONIC), + gpr_time_from_seconds(10, GPR_TIMESPAN))); +} + } // namespace } // namespace testing } // namespace grpc diff --git a/test/cpp/end2end/grpclb_end2end_test.cc b/test/cpp/end2end/grpclb_end2end_test.cc index 8417f1a99c..4e1bcc7a60 100644 --- a/test/cpp/end2end/grpclb_end2end_test.cc +++ b/test/cpp/end2end/grpclb_end2end_test.cc @@ -98,12 +98,12 @@ namespace { template <typename ServiceType> class CountedService : public ServiceType { public: - int request_count() { + size_t request_count() { std::unique_lock<std::mutex> lock(mu_); return request_count_; } - int response_count() { + size_t response_count() { std::unique_lock<std::mutex> lock(mu_); return response_count_; } @@ -121,8 +121,8 @@ class CountedService : public ServiceType { std::mutex mu_; private: - int request_count_ = 0; - int response_count_ = 0; + size_t request_count_ = 0; + size_t response_count_ = 0; }; using BackendService = CountedService<TestServiceImpl>; @@ -243,9 +243,18 @@ class BalancerServiceImpl : public BalancerService { } static LoadBalanceResponse BuildResponseForBackends( - const std::vector<int>& backend_ports) { + const std::vector<int>& backend_ports, int num_drops_for_rate_limiting, + int num_drops_for_load_balancing) { LoadBalanceResponse response; - for (const int backend_port : backend_ports) { + for (int i = 0; i < num_drops_for_rate_limiting; ++i) { + auto* server = response.mutable_server_list()->add_servers(); + server->set_drop_for_rate_limiting(true); + } + for (int i = 0; i < num_drops_for_load_balancing; ++i) { + auto* server = response.mutable_server_list()->add_servers(); + server->set_drop_for_load_balancing(true); + } + for (const int& backend_port : backend_ports) { auto* server = response.mutable_server_list()->add_servers(); server->set_ip_address(Ip4ToPackedString("127.0.0.1")); server->set_port(backend_port); @@ -327,10 +336,8 @@ class GrpclbEnd2endTest : public ::testing::Test { ChannelArguments args; args.SetPointer(GRPC_ARG_FAKE_RESOLVER_RESPONSE_GENERATOR, response_generator_); - std::ostringstream uri; - uri << "test:///servername_not_used"; - channel_ = - CreateCustomChannel(uri.str(), InsecureChannelCredentials(), args); + channel_ = CreateCustomChannel("test:///not_used", + InsecureChannelCredentials(), args); stub_ = grpc::testing::EchoTestService::NewStub(channel_); } @@ -467,26 +474,33 @@ class SingleBalancerTest : public GrpclbEnd2endTest { }; TEST_F(SingleBalancerTest, Vanilla) { + const size_t kNumRpcsPerAddress = 100; ScheduleResponseForBalancer( - 0, BalancerServiceImpl::BuildResponseForBackends(GetBackendPorts()), 0); + 0, BalancerServiceImpl::BuildResponseForBackends(GetBackendPorts(), 0, 0), + 0); // Make sure that trying to connect works without a call. channel_->GetState(true /* try_to_connect */); - // Start servers and send 100 RPCs per server. - const auto& statuses_and_responses = SendRpc(kMessage_, 100 * num_backends_); + // Send 100 RPCs per server. + const auto& statuses_and_responses = + SendRpc(kMessage_, kNumRpcsPerAddress * num_backends_); for (const auto& status_and_response : statuses_and_responses) { - EXPECT_TRUE(status_and_response.first.ok()); - EXPECT_EQ(status_and_response.second.message(), kMessage_); + const Status& status = status_and_response.first; + const EchoResponse& response = status_and_response.second; + EXPECT_TRUE(status.ok()) << "code=" << status.error_code() + << " message=" << status.error_message(); + EXPECT_EQ(response.message(), kMessage_); } // Each backend should have gotten 100 requests. for (size_t i = 0; i < backends_.size(); ++i) { - EXPECT_EQ(100, backend_servers_[i].service_->request_count()); + EXPECT_EQ(kNumRpcsPerAddress, + backend_servers_[i].service_->request_count()); } // The balancer got a single request. - EXPECT_EQ(1, balancer_servers_[0].service_->request_count()); + EXPECT_EQ(1U, balancer_servers_[0].service_->request_count()); // and sent a single response. - EXPECT_EQ(1, balancer_servers_[0].service_->response_count()); + EXPECT_EQ(1U, balancer_servers_[0].service_->response_count()); // Check LB policy name for the channel. EXPECT_EQ("grpclb", channel_->GetLoadBalancingPolicyName()); @@ -500,7 +514,7 @@ TEST_F(SingleBalancerTest, InitiallyEmptyServerlist) { ScheduleResponseForBalancer(0, LoadBalanceResponse(), 0); // Send non-empty serverlist only after kServerlistDelayMs ScheduleResponseForBalancer( - 0, BalancerServiceImpl::BuildResponseForBackends(GetBackendPorts()), + 0, BalancerServiceImpl::BuildResponseForBackends(GetBackendPorts(), 0, 0), kServerlistDelayMs); const auto t0 = system_clock::now(); @@ -518,17 +532,20 @@ TEST_F(SingleBalancerTest, InitiallyEmptyServerlist) { // Each backend should have gotten 1 request. for (size_t i = 0; i < backends_.size(); ++i) { - EXPECT_EQ(1, backend_servers_[i].service_->request_count()); + EXPECT_EQ(1U, backend_servers_[i].service_->request_count()); } for (const auto& status_and_response : statuses_and_responses) { - EXPECT_TRUE(status_and_response.first.ok()); - EXPECT_EQ(status_and_response.second.message(), kMessage_); + const Status& status = status_and_response.first; + const EchoResponse& response = status_and_response.second; + EXPECT_TRUE(status.ok()) << "code=" << status.error_code() + << " message=" << status.error_message(); + EXPECT_EQ(response.message(), kMessage_); } // The balancer got a single request. - EXPECT_EQ(1, balancer_servers_[0].service_->request_count()); + EXPECT_EQ(1U, balancer_servers_[0].service_->request_count()); // and sent two responses. - EXPECT_EQ(2, balancer_servers_[0].service_->response_count()); + EXPECT_EQ(2U, balancer_servers_[0].service_->response_count()); // Check LB policy name for the channel. EXPECT_EQ("grpclb", channel_->GetLoadBalancingPolicyName()); @@ -539,10 +556,11 @@ TEST_F(SingleBalancerTest, RepeatedServerlist) { // Send a serverlist right away. ScheduleResponseForBalancer( - 0, BalancerServiceImpl::BuildResponseForBackends(GetBackendPorts()), 0); + 0, BalancerServiceImpl::BuildResponseForBackends(GetBackendPorts(), 0, 0), + 0); // ... and the same one a bit later. ScheduleResponseForBalancer( - 0, BalancerServiceImpl::BuildResponseForBackends(GetBackendPorts()), + 0, BalancerServiceImpl::BuildResponseForBackends(GetBackendPorts(), 0, 0), kServerlistDelayMs); // Send num_backends/2 requests. @@ -550,14 +568,17 @@ TEST_F(SingleBalancerTest, RepeatedServerlist) { // only the first half of the backends will receive them. for (size_t i = 0; i < backends_.size(); ++i) { if (i < backends_.size() / 2) - EXPECT_EQ(1, backend_servers_[i].service_->request_count()); + EXPECT_EQ(1U, backend_servers_[i].service_->request_count()); else - EXPECT_EQ(0, backend_servers_[i].service_->request_count()); + EXPECT_EQ(0U, backend_servers_[i].service_->request_count()); } EXPECT_EQ(statuses_and_responses.size(), num_backends_ / 2); for (const auto& status_and_response : statuses_and_responses) { - EXPECT_TRUE(status_and_response.first.ok()); - EXPECT_EQ(status_and_response.second.message(), kMessage_); + const Status& status = status_and_response.first; + const EchoResponse& response = status_and_response.second; + EXPECT_TRUE(status.ok()) << "code=" << status.error_code() + << " message=" << status.error_message(); + EXPECT_EQ(response.message(), kMessage_); } // Wait for the (duplicated) serverlist update. @@ -566,7 +587,7 @@ TEST_F(SingleBalancerTest, RepeatedServerlist) { gpr_time_from_millis(kServerlistDelayMs * 1.1, GPR_TIMESPAN))); // Verify the LB has sent two responses. - EXPECT_EQ(2, balancer_servers_[0].service_->response_count()); + EXPECT_EQ(2U, balancer_servers_[0].service_->response_count()); // Some more calls to complete the total number of backends. statuses_and_responses = SendRpc( @@ -575,52 +596,146 @@ TEST_F(SingleBalancerTest, RepeatedServerlist) { // Because a duplicated serverlist should have no effect, all backends must // have been hit once now. for (size_t i = 0; i < backends_.size(); ++i) { - EXPECT_EQ(1, backend_servers_[i].service_->request_count()); + EXPECT_EQ(1U, backend_servers_[i].service_->request_count()); } EXPECT_EQ(statuses_and_responses.size(), num_backends_ / 2); for (const auto& status_and_response : statuses_and_responses) { - EXPECT_TRUE(status_and_response.first.ok()); - EXPECT_EQ(status_and_response.second.message(), kMessage_); + const Status& status = status_and_response.first; + const EchoResponse& response = status_and_response.second; + EXPECT_TRUE(status.ok()) << "code=" << status.error_code() + << " message=" << status.error_message(); + EXPECT_EQ(response.message(), kMessage_); } // The balancer got a single request. - EXPECT_EQ(1, balancer_servers_[0].service_->request_count()); + EXPECT_EQ(1U, balancer_servers_[0].service_->request_count()); // Check LB policy name for the channel. EXPECT_EQ("grpclb", channel_->GetLoadBalancingPolicyName()); } +TEST_F(SingleBalancerTest, Drop) { + const size_t kNumRpcsPerAddress = 100; + ScheduleResponseForBalancer( + 0, BalancerServiceImpl::BuildResponseForBackends(GetBackendPorts(), 1, 2), + 0); + // Send 100 RPCs for each server and drop address. + const auto& statuses_and_responses = + SendRpc(kMessage_, kNumRpcsPerAddress * (num_backends_ + 3)); + + size_t num_drops = 0; + for (const auto& status_and_response : statuses_and_responses) { + const Status& status = status_and_response.first; + const EchoResponse& response = status_and_response.second; + if (!status.ok() && + status.error_message() == "Call dropped by load balancing policy") { + ++num_drops; + } else { + EXPECT_TRUE(status.ok()) << "code=" << status.error_code() + << " message=" << status.error_message(); + EXPECT_EQ(response.message(), kMessage_); + } + } + EXPECT_EQ(kNumRpcsPerAddress * 3, num_drops); + + // Each backend should have gotten 100 requests. + for (size_t i = 0; i < backends_.size(); ++i) { + EXPECT_EQ(kNumRpcsPerAddress, + backend_servers_[i].service_->request_count()); + } + // The balancer got a single request. + EXPECT_EQ(1U, balancer_servers_[0].service_->request_count()); + // and sent a single response. + EXPECT_EQ(1U, balancer_servers_[0].service_->response_count()); +} + class SingleBalancerWithClientLoadReportingTest : public GrpclbEnd2endTest { public: SingleBalancerWithClientLoadReportingTest() : GrpclbEnd2endTest(4, 1, 2) {} }; TEST_F(SingleBalancerWithClientLoadReportingTest, Vanilla) { + const size_t kNumRpcsPerAddress = 100; ScheduleResponseForBalancer( - 0, BalancerServiceImpl::BuildResponseForBackends(GetBackendPorts()), 0); - // Start servers and send 100 RPCs per server. - const auto& statuses_and_responses = SendRpc(kMessage_, 100 * num_backends_); + 0, BalancerServiceImpl::BuildResponseForBackends(GetBackendPorts(), 0, 0), + 0); + // Send 100 RPCs per server. + const auto& statuses_and_responses = + SendRpc(kMessage_, kNumRpcsPerAddress * num_backends_); for (const auto& status_and_response : statuses_and_responses) { - EXPECT_TRUE(status_and_response.first.ok()); - EXPECT_EQ(status_and_response.second.message(), kMessage_); + const Status& status = status_and_response.first; + const EchoResponse& response = status_and_response.second; + EXPECT_TRUE(status.ok()) << "code=" << status.error_code() + << " message=" << status.error_message(); + EXPECT_EQ(response.message(), kMessage_); } // Each backend should have gotten 100 requests. for (size_t i = 0; i < backends_.size(); ++i) { - EXPECT_EQ(100, backend_servers_[i].service_->request_count()); + EXPECT_EQ(kNumRpcsPerAddress, + backend_servers_[i].service_->request_count()); } // The balancer got a single request. - EXPECT_EQ(1, balancer_servers_[0].service_->request_count()); + EXPECT_EQ(1U, balancer_servers_[0].service_->request_count()); // and sent a single response. - EXPECT_EQ(1, balancer_servers_[0].service_->response_count()); + EXPECT_EQ(1U, balancer_servers_[0].service_->response_count()); const ClientStats client_stats = WaitForLoadReports(); - EXPECT_EQ(100 * num_backends_, client_stats.num_calls_started); - EXPECT_EQ(100 * num_backends_, client_stats.num_calls_finished); + EXPECT_EQ(kNumRpcsPerAddress * num_backends_, client_stats.num_calls_started); + EXPECT_EQ(kNumRpcsPerAddress * num_backends_, + client_stats.num_calls_finished); EXPECT_EQ(0U, client_stats.num_calls_finished_with_drop_for_rate_limiting); EXPECT_EQ(0U, client_stats.num_calls_finished_with_drop_for_load_balancing); EXPECT_EQ(0U, client_stats.num_calls_finished_with_client_failed_to_send); - EXPECT_EQ(100 * num_backends_, + EXPECT_EQ(kNumRpcsPerAddress * num_backends_, + client_stats.num_calls_finished_known_received); +} + +TEST_F(SingleBalancerWithClientLoadReportingTest, Drop) { + const size_t kNumRpcsPerAddress = 3; + ScheduleResponseForBalancer( + 0, BalancerServiceImpl::BuildResponseForBackends(GetBackendPorts(), 2, 1), + 0); + // Send 100 RPCs for each server and drop address. + const auto& statuses_and_responses = + SendRpc(kMessage_, kNumRpcsPerAddress * (num_backends_ + 3)); + + size_t num_drops = 0; + for (const auto& status_and_response : statuses_and_responses) { + const Status& status = status_and_response.first; + const EchoResponse& response = status_and_response.second; + if (!status.ok() && + status.error_message() == "Call dropped by load balancing policy") { + ++num_drops; + } else { + EXPECT_TRUE(status.ok()) << "code=" << status.error_code() + << " message=" << status.error_message(); + EXPECT_EQ(response.message(), kMessage_); + } + } + EXPECT_EQ(kNumRpcsPerAddress * 3, num_drops); + + // Each backend should have gotten 100 requests. + for (size_t i = 0; i < backends_.size(); ++i) { + EXPECT_EQ(kNumRpcsPerAddress, + backend_servers_[i].service_->request_count()); + } + // The balancer got a single request. + EXPECT_EQ(1U, balancer_servers_[0].service_->request_count()); + // and sent a single response. + EXPECT_EQ(1U, balancer_servers_[0].service_->response_count()); + + const ClientStats client_stats = WaitForLoadReports(); + EXPECT_EQ(kNumRpcsPerAddress * (num_backends_ + 3), + client_stats.num_calls_started); + EXPECT_EQ(kNumRpcsPerAddress * (num_backends_ + 3), + client_stats.num_calls_finished); + EXPECT_EQ(kNumRpcsPerAddress * 2, + client_stats.num_calls_finished_with_drop_for_rate_limiting); + EXPECT_EQ(kNumRpcsPerAddress, + client_stats.num_calls_finished_with_drop_for_load_balancing); + EXPECT_EQ(0U, client_stats.num_calls_finished_with_client_failed_to_send); + EXPECT_EQ(kNumRpcsPerAddress * num_backends_, client_stats.num_calls_finished_known_received); } diff --git a/test/cpp/end2end/health_service_end2end_test.cc b/test/cpp/end2end/health_service_end2end_test.cc index 3d51007857..c320c78697 100644 --- a/test/cpp/end2end/health_service_end2end_test.cc +++ b/test/cpp/end2end/health_service_end2end_test.cc @@ -46,7 +46,6 @@ #include <grpc++/server_context.h> #include <grpc/grpc.h> #include <grpc/support/log.h> -#include <gtest/gtest.h> #include "src/proto/grpc/health/v1/health.grpc.pb.h" #include "src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.h" @@ -55,6 +54,8 @@ #include "test/core/util/test_config.h" #include "test/cpp/end2end/test_service_impl.h" +#include <gtest/gtest.h> + using grpc::health::v1::Health; using grpc::health::v1::HealthCheckRequest; using grpc::health::v1::HealthCheckResponse; diff --git a/test/cpp/end2end/hybrid_end2end_test.cc b/test/cpp/end2end/hybrid_end2end_test.cc index a4ba76fed1..1cd515a23b 100644 --- a/test/cpp/end2end/hybrid_end2end_test.cc +++ b/test/cpp/end2end/hybrid_end2end_test.cc @@ -42,7 +42,6 @@ #include <grpc++/server_builder.h> #include <grpc++/server_context.h> #include <grpc/grpc.h> -#include <gtest/gtest.h> #include "src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.h" #include "src/proto/grpc/testing/echo.grpc.pb.h" @@ -51,6 +50,8 @@ #include "test/cpp/end2end/test_service_impl.h" #include "test/cpp/util/byte_buffer_proto_helper.h" +#include <gtest/gtest.h> + namespace grpc { namespace testing { diff --git a/test/cpp/end2end/mock_test.cc b/test/cpp/end2end/mock_test.cc index 7e330063ed..3a82b3a5d6 100644 --- a/test/cpp/end2end/mock_test.cc +++ b/test/cpp/end2end/mock_test.cc @@ -45,7 +45,6 @@ #include <grpc/support/log.h> #include <grpc/support/thd.h> #include <grpc/support/time.h> -#include <gtest/gtest.h> #include <grpc++/test/mock_stream.h> @@ -55,6 +54,8 @@ #include "test/core/util/port.h" #include "test/core/util/test_config.h" +#include <gtest/gtest.h> + #include <iostream> using namespace std; diff --git a/test/cpp/end2end/proto_server_reflection_test.cc b/test/cpp/end2end/proto_server_reflection_test.cc index 8b9688d200..25cb0d5f73 100644 --- a/test/cpp/end2end/proto_server_reflection_test.cc +++ b/test/cpp/end2end/proto_server_reflection_test.cc @@ -41,7 +41,6 @@ #include <grpc++/server_builder.h> #include <grpc++/server_context.h> #include <grpc/grpc.h> -#include <gtest/gtest.h> #include "src/proto/grpc/testing/echo.grpc.pb.h" #include "test/core/util/port.h" @@ -49,6 +48,8 @@ #include "test/cpp/end2end/test_service_impl.h" #include "test/cpp/util/proto_reflection_descriptor_database.h" +#include <gtest/gtest.h> + namespace grpc { namespace testing { diff --git a/test/cpp/end2end/round_robin_end2end_test.cc b/test/cpp/end2end/round_robin_end2end_test.cc index cc340b96b3..f8e3cc06c0 100644 --- a/test/cpp/end2end/round_robin_end2end_test.cc +++ b/test/cpp/end2end/round_robin_end2end_test.cc @@ -44,13 +44,14 @@ #include <grpc/support/log.h> #include <grpc/support/thd.h> #include <grpc/support/time.h> -#include <gtest/gtest.h> #include "src/proto/grpc/testing/echo.grpc.pb.h" #include "test/core/util/port.h" #include "test/core/util/test_config.h" #include "test/cpp/end2end/test_service_impl.h" +#include <gtest/gtest.h> + using grpc::testing::EchoRequest; using grpc::testing::EchoResponse; using std::chrono::system_clock; diff --git a/test/cpp/end2end/server_builder_plugin_test.cc b/test/cpp/end2end/server_builder_plugin_test.cc index 1b6f4ce37d..81b747a7af 100644 --- a/test/cpp/end2end/server_builder_plugin_test.cc +++ b/test/cpp/end2end/server_builder_plugin_test.cc @@ -45,13 +45,14 @@ #include <grpc++/server_builder.h> #include <grpc++/server_context.h> #include <grpc/grpc.h> -#include <gtest/gtest.h> #include "src/proto/grpc/testing/echo.grpc.pb.h" #include "test/core/util/port.h" #include "test/core/util/test_config.h" #include "test/cpp/end2end/test_service_impl.h" +#include <gtest/gtest.h> + #define PLUGIN_NAME "TestServerBuilderPlugin" namespace grpc { diff --git a/test/cpp/end2end/server_crash_test.cc b/test/cpp/end2end/server_crash_test.cc index b1f9216055..4b7041aebe 100644 --- a/test/cpp/end2end/server_crash_test.cc +++ b/test/cpp/end2end/server_crash_test.cc @@ -41,7 +41,6 @@ #include <grpc/support/log.h> #include <grpc/support/thd.h> #include <grpc/support/time.h> -#include <gtest/gtest.h> #include "src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.h" #include "src/proto/grpc/testing/echo.grpc.pb.h" @@ -49,6 +48,8 @@ #include "test/core/util/test_config.h" #include "test/cpp/util/subprocess.h" +#include <gtest/gtest.h> + using grpc::testing::EchoRequest; using grpc::testing::EchoResponse; using std::chrono::system_clock; diff --git a/test/cpp/end2end/shutdown_test.cc b/test/cpp/end2end/shutdown_test.cc index bd68e851d3..63b397dd1c 100644 --- a/test/cpp/end2end/shutdown_test.cc +++ b/test/cpp/end2end/shutdown_test.cc @@ -33,8 +33,6 @@ #include <thread> -#include <gtest/gtest.h> - #include <grpc++/channel.h> #include <grpc++/client_context.h> #include <grpc++/create_channel.h> @@ -51,6 +49,8 @@ #include "test/core/util/test_config.h" #include "test/cpp/util/test_credentials_provider.h" +#include <gtest/gtest.h> + using grpc::testing::EchoRequest; using grpc::testing::EchoResponse; diff --git a/test/cpp/end2end/streaming_throughput_test.cc b/test/cpp/end2end/streaming_throughput_test.cc index 302583766b..ec5b83d1da 100644 --- a/test/cpp/end2end/streaming_throughput_test.cc +++ b/test/cpp/end2end/streaming_throughput_test.cc @@ -35,8 +35,6 @@ #include <mutex> #include <thread> -#include <gtest/gtest.h> - #include <grpc++/channel.h> #include <grpc++/client_context.h> #include <grpc++/create_channel.h> @@ -56,6 +54,8 @@ #include "test/core/util/port.h" #include "test/core/util/test_config.h" +#include <gtest/gtest.h> + using grpc::testing::EchoRequest; using grpc::testing::EchoResponse; using std::chrono::system_clock; diff --git a/test/cpp/end2end/test_service_impl.cc b/test/cpp/end2end/test_service_impl.cc index b473dd1f52..5411b35f16 100644 --- a/test/cpp/end2end/test_service_impl.cc +++ b/test/cpp/end2end/test_service_impl.cc @@ -40,11 +40,11 @@ #include <grpc++/server_context.h> #include <grpc/support/log.h> -#include <gtest/gtest.h> - #include "src/proto/grpc/testing/echo.grpc.pb.h" #include "test/cpp/util/string_ref_helper.h" +#include <gtest/gtest.h> + using std::chrono::system_clock; namespace grpc { diff --git a/test/cpp/end2end/thread_stress_test.cc b/test/cpp/end2end/thread_stress_test.cc index d353f9894b..defa7894ff 100644 --- a/test/cpp/end2end/thread_stress_test.cc +++ b/test/cpp/end2end/thread_stress_test.cc @@ -43,7 +43,6 @@ #include <grpc/grpc.h> #include <grpc/support/thd.h> #include <grpc/support/time.h> -#include <gtest/gtest.h> #include "src/core/lib/surface/api_trace.h" #include "src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.h" @@ -51,6 +50,8 @@ #include "test/core/util/port.h" #include "test/core/util/test_config.h" +#include <gtest/gtest.h> + using grpc::testing::EchoRequest; using grpc::testing::EchoResponse; using std::chrono::system_clock; diff --git a/test/cpp/microbenchmarks/BUILD b/test/cpp/microbenchmarks/BUILD index 208ac6d794..3a968a020a 100644 --- a/test/cpp/microbenchmarks/BUILD +++ b/test/cpp/microbenchmarks/BUILD @@ -29,14 +29,17 @@ licenses(["notice"]) # 3-clause BSD -cc_test( +load("//bazel:grpc_build_system.bzl", "grpc_cc_test", "grpc_cc_library") + +grpc_cc_test( name = "noop-benchmark", srcs = ["noop-benchmark.cc"], - linkopts = ["-pthread"], - deps = ["//external:benchmark"], + external_deps = [ + "benchmark", + ], ) -cc_library( +grpc_cc_library( name = "helpers", srcs = ["helpers.cc"], hdrs = [ @@ -44,64 +47,68 @@ cc_library( "fullstack_fixtures.h", "helpers.h", ], - linkopts = ["-pthread"], deps = [ "//:grpc++", - "//external:benchmark", "//src/proto/grpc/testing:echo_proto", "//test/core/util:grpc_test_util", ], + external_deps = [ + "benchmark", + ], ) -cc_test( +grpc_cc_test( name = "bm_closure", srcs = ["bm_closure.cc"], deps = [":helpers"], ) -cc_test( +grpc_cc_test( name = "bm_cq", srcs = ["bm_cq.cc"], deps = [":helpers"], ) -cc_test( +grpc_cc_test( name = "bm_cq_multiple_threads", srcs = ["bm_cq_multiple_threads.cc"], deps = [":helpers"], ) -cc_test( +grpc_cc_test( name = "bm_error", srcs = ["bm_error.cc"], deps = [":helpers"], ) -cc_test( +grpc_cc_test( name = "bm_fullstack_streaming_ping_pong", srcs = ["bm_fullstack_streaming_ping_pong.cc"], deps = [":helpers"], ) -cc_test( +grpc_cc_test( name = "bm_fullstack_streaming_pump", srcs = ["bm_fullstack_streaming_pump.cc"], deps = [":helpers"], ) -cc_test( +grpc_cc_test( name = "bm_fullstack_trickle", srcs = ["bm_fullstack_trickle.cc"], - deps = [":helpers", "//external:gflags"], + deps = [":helpers"], + external_deps = [ + "gflags", + ], ) -cc_test( +grpc_cc_test( name = "bm_fullstack_unary_ping_pong", srcs = ["bm_fullstack_unary_ping_pong.cc"], deps = [":helpers"], ) -cc_test( +grpc_cc_test( name = "bm_metadata", srcs = ["bm_metadata.cc"], deps = [":helpers"], diff --git a/test/cpp/microbenchmarks/bm_cq_multiple_threads.cc b/test/cpp/microbenchmarks/bm_cq_multiple_threads.cc index 0d267da723..704f255d5f 100644 --- a/test/cpp/microbenchmarks/bm_cq_multiple_threads.cc +++ b/test/cpp/microbenchmarks/bm_cq_multiple_threads.cc @@ -81,10 +81,16 @@ static void cq_done_cb(grpc_exec_ctx* exec_ctx, void* done_arg, gpr_free(cq_completion); } -/* Queues a completion tag. ZERO polling overhead */ +/* Queues a completion tag if deadline is > 0. + * Does nothing if deadline is 0 (i.e gpr_time_0(GPR_CLOCK_MONOTONIC)) */ static grpc_error* pollset_work(grpc_exec_ctx* exec_ctx, grpc_pollset* ps, grpc_pollset_worker** worker, gpr_timespec now, gpr_timespec deadline) { + if (gpr_time_cmp(deadline, gpr_time_0(GPR_CLOCK_MONOTONIC)) == 0) { + gpr_log(GPR_ERROR, "no-op"); + return GRPC_ERROR_NONE; + } + gpr_mu_unlock(&ps->mu); grpc_cq_begin_op(g_cq, g_tag); grpc_cq_end_op(exec_ctx, g_cq, g_tag, GRPC_ERROR_NONE, cq_done_cb, NULL, @@ -115,6 +121,14 @@ static void setup() { static void teardown() { grpc_completion_queue_shutdown(g_cq); + + /* Drain any events */ + gpr_timespec deadline = gpr_time_0(GPR_CLOCK_MONOTONIC); + while (grpc_completion_queue_next(g_cq, deadline, NULL).type != + GRPC_QUEUE_SHUTDOWN) { + /* Do nothing */ + } + grpc_completion_queue_destroy(g_cq); } diff --git a/test/cpp/microbenchmarks/bm_fullstack_trickle.cc b/test/cpp/microbenchmarks/bm_fullstack_trickle.cc index 6b9fa8b38d..d7e3a9cf47 100644 --- a/test/cpp/microbenchmarks/bm_fullstack_trickle.cc +++ b/test/cpp/microbenchmarks/bm_fullstack_trickle.cc @@ -101,6 +101,8 @@ class TrickledCHTTP2 : public EndpointPairFixture { } void AddToLabel(std::ostream& out, benchmark::State& state) { + grpc_chttp2_transport* client = + reinterpret_cast<grpc_chttp2_transport*>(client_transport_); out << " writes/iter:" << ((double)stats_.num_writes / (double)state.iterations()) << " cli_transport_stalls/iter:" @@ -116,7 +118,8 @@ class TrickledCHTTP2 : public EndpointPairFixture { (double)state.iterations()) << " svr_stream_stalls/iter:" << ((double)server_stats_.streams_stalled_due_to_stream_flow_control / - (double)state.iterations()); + (double)state.iterations()) + << " cli_bw_est:" << (double)client->bdp_estimator.bw_est; } void Log(int64_t iteration) { diff --git a/test/cpp/microbenchmarks/fullstack_fixtures.h b/test/cpp/microbenchmarks/fullstack_fixtures.h index 98aca1c346..aa71c2ae3f 100644 --- a/test/cpp/microbenchmarks/fullstack_fixtures.h +++ b/test/cpp/microbenchmarks/fullstack_fixtures.h @@ -100,6 +100,12 @@ class FullstackFixture : public BaseFixture { } } + void AddToLabel(std::ostream& out, benchmark::State& state) { + BaseFixture::AddToLabel(out, state); + out << " polls/iter:" + << (double)grpc_get_cq_poll_num(this->cq()->cq()) / state.iterations(); + } + ServerCompletionQueue* cq() { return cq_.get(); } std::shared_ptr<Channel> channel() { return channel_; } @@ -212,6 +218,12 @@ class EndpointPairFixture : public BaseFixture { } } + void AddToLabel(std::ostream& out, benchmark::State& state) { + BaseFixture::AddToLabel(out, state); + out << " polls/iter:" + << (double)grpc_get_cq_poll_num(this->cq()->cq()) / state.iterations(); + } + ServerCompletionQueue* cq() { return cq_.get(); } std::shared_ptr<Channel> channel() { return channel_; } @@ -245,7 +257,7 @@ class InProcessCHTTP2 : public EndpointPairFixture { void AddToLabel(std::ostream& out, benchmark::State& state) { EndpointPairFixture::AddToLabel(out, state); out << " writes/iter:" - << ((double)stats_.num_writes / (double)state.iterations()); + << (double)stats_.num_writes / (double)state.iterations(); } private: diff --git a/test/cpp/microbenchmarks/helpers.cc b/test/cpp/microbenchmarks/helpers.cc index 6550742453..73ab9e4a1a 100644 --- a/test/cpp/microbenchmarks/helpers.cc +++ b/test/cpp/microbenchmarks/helpers.cc @@ -36,11 +36,11 @@ void TrackCounters::Finish(benchmark::State &state) { std::ostringstream out; AddToLabel(out, state); - auto label = out.str(); + std::string label = out.str(); if (label.length() && label[0] == ' ') { label = label.substr(1); } - state.SetLabel(label); + state.SetLabel(label.c_str()); } void TrackCounters::AddToLabel(std::ostream &out, benchmark::State &state) { diff --git a/test/cpp/qps/BUILD b/test/cpp/qps/BUILD index 6492b63ec3..c6a1fd2fce 100644 --- a/test/cpp/qps/BUILD +++ b/test/cpp/qps/BUILD @@ -29,14 +29,17 @@ licenses(["notice"]) # 3-clause BSD -cc_library( +load("//bazel:grpc_build_system.bzl", "grpc_cc_test", "grpc_cc_library", "grpc_cc_binary") + +grpc_cc_library( name = "parse_json", srcs = ["parse_json.cc"], hdrs = ["parse_json.h"], deps = ["//:grpc++"], + external_deps = ["protobuf"], ) -cc_library( +grpc_cc_library( name = "qps_worker_impl", srcs = [ "client_async.cc", @@ -56,7 +59,6 @@ cc_library( ":usage_timer", "//:grpc", "//:grpc++", - "//external:gtest", "//src/proto/grpc/testing:control_proto", "//src/proto/grpc/testing:payloads_proto", "//src/proto/grpc/testing:services_proto", @@ -65,9 +67,12 @@ cc_library( "//test/core/util:grpc_test_util", "//test/cpp/util:test_util", ], + external_deps = [ + "gtest", + ], ) -cc_library( +grpc_cc_library( name = "driver_impl", srcs = [ "driver.cc", @@ -90,7 +95,7 @@ cc_library( ], ) -cc_library( +grpc_cc_library( name = "benchmark_config", srcs = [ "benchmark_config.cc", @@ -102,12 +107,14 @@ cc_library( ":driver_impl", ":histogram", "//:grpc++", - "//external:gflags", "//src/proto/grpc/testing:control_proto", ], + external_deps = [ + "gflags", + ], ) -cc_library( +grpc_cc_library( name = "histogram", hdrs = [ "histogram.h", @@ -116,13 +123,13 @@ cc_library( deps = ["//:gpr"], ) -cc_library( +grpc_cc_library( name = "interarrival", hdrs = ["interarrival.h"], deps = ["//:grpc++"], ) -cc_binary( +grpc_cc_binary( name = "json_run_localhost", srcs = ["json_run_localhost.cc"], deps = [ @@ -133,7 +140,7 @@ cc_binary( ], ) -cc_test( +grpc_cc_test( name = "qps_interarrival_test", srcs = ["qps_interarrival_test.cc"], deps = [ @@ -142,18 +149,20 @@ cc_test( ], ) -cc_binary( +grpc_cc_binary( name = "qps_json_driver", srcs = ["qps_json_driver.cc"], deps = [ ":benchmark_config", ":driver_impl", "//:grpc++", - "//external:gflags", + ], + external_deps = [ + "gflags", ], ) -cc_test( +grpc_cc_test( name = "qps_openloop_test", srcs = ["qps_openloop_test.cc"], deps = [ @@ -163,7 +172,7 @@ cc_test( ], ) -cc_test( +grpc_cc_test( name = "secure_sync_unary_ping_pong_test", srcs = ["secure_sync_unary_ping_pong_test.cc"], deps = [ @@ -173,14 +182,14 @@ cc_test( ], ) -cc_library( +grpc_cc_library( name = "usage_timer", srcs = ["usage_timer.cc"], hdrs = ["usage_timer.h"], deps = ["//:gpr"], ) -cc_binary( +grpc_cc_binary( name = "qps_worker", srcs = ["worker.cc"], deps = [ diff --git a/test/cpp/qps/client.h b/test/cpp/qps/client.h index c3197eb622..5ae6b54f89 100644 --- a/test/cpp/qps/client.h +++ b/test/cpp/qps/client.h @@ -46,6 +46,7 @@ #include <grpc/support/log.h> #include <grpc/support/time.h> +#include "src/core/lib/surface/completion_queue.h" #include "src/proto/grpc/testing/payloads.pb.h" #include "src/proto/grpc/testing/services.grpc.pb.h" @@ -150,7 +151,8 @@ class Client { Client() : timer_(new UsageTimer), interarrival_timer_(), - started_requests_(false) { + started_requests_(false), + last_reset_poll_count_(0) { gpr_event_init(&start_requests_); } virtual ~Client() {} @@ -162,6 +164,8 @@ class Client { MaybeStartRequests(); + int cur_poll_count = GetPollCount(); + int poll_count = cur_poll_count - last_reset_poll_count_; if (reset) { std::vector<Histogram> to_merge(threads_.size()); std::vector<StatusHistogram> to_merge_status(threads_.size()); @@ -176,6 +180,7 @@ class Client { MergeStatusHistogram(to_merge_status[i], &statuses); } timer_result = timer->Mark(); + last_reset_poll_count_ = cur_poll_count; } else { // merge snapshots of each thread histogram for (size_t i = 0; i < threads_.size(); i++) { @@ -195,6 +200,7 @@ class Client { stats.set_time_elapsed(timer_result.wall); stats.set_time_system(timer_result.system); stats.set_time_user(timer_result.user); + stats.set_cq_poll_count(poll_count); return stats; } @@ -209,6 +215,11 @@ class Client { } } + virtual int GetPollCount() { + // For sync client. + return 0; + } + protected: bool closed_loop_; gpr_atm thread_pool_done_; @@ -351,6 +362,8 @@ class Client { gpr_event start_requests_; bool started_requests_; + int last_reset_poll_count_; + void MaybeStartRequests() { if (!started_requests_) { started_requests_ = true; diff --git a/test/cpp/qps/client_async.cc b/test/cpp/qps/client_async.cc index 82c3356f02..6b8f736813 100644 --- a/test/cpp/qps/client_async.cc +++ b/test/cpp/qps/client_async.cc @@ -205,6 +205,14 @@ class AsyncClient : public ClientImpl<StubType, RequestType> { } } + int GetPollCount() override { + int count = 0; + for (auto cq = cli_cqs_.begin(); cq != cli_cqs_.end(); cq++) { + count += grpc_get_cq_poll_num((*cq)->cq()); + } + return count; + } + protected: const int num_async_threads_; diff --git a/test/cpp/qps/client_sync.cc b/test/cpp/qps/client_sync.cc index 9075033bd4..f35713280a 100644 --- a/test/cpp/qps/client_sync.cc +++ b/test/cpp/qps/client_sync.cc @@ -48,7 +48,6 @@ #include <grpc/support/host_port.h> #include <grpc/support/log.h> #include <grpc/support/time.h> -#include <gtest/gtest.h> #include "src/core/lib/profiling/timers.h" #include "src/proto/grpc/testing/services.grpc.pb.h" diff --git a/test/cpp/qps/driver.cc b/test/cpp/qps/driver.cc index 74fe3662c1..ace5028876 100644 --- a/test/cpp/qps/driver.cc +++ b/test/cpp/qps/driver.cc @@ -112,6 +112,8 @@ static deque<string> get_workers(const string& env_name) { static double WallTime(ClientStats s) { return s.time_elapsed(); } static double SystemTime(ClientStats s) { return s.time_system(); } static double UserTime(ClientStats s) { return s.time_user(); } +static double CliPollCount(ClientStats s) { return s.cq_poll_count(); } +static double SvrPollCount(ServerStats s) { return s.cq_poll_count(); } static double ServerWallTime(ServerStats s) { return s.time_elapsed(); } static double ServerSystemTime(ServerStats s) { return s.time_system(); } static double ServerUserTime(ServerStats s) { return s.time_user(); } @@ -180,6 +182,11 @@ static void postprocess_scenario_result(ScenarioResult* result) { result->mutable_summary()->set_failed_requests_per_second(failures / time_estimate); } + + result->mutable_summary()->set_client_polls_per_request( + sum(result->client_stats(), CliPollCount) / histogram.Count()); + result->mutable_summary()->set_server_polls_per_request( + sum(result->server_stats(), SvrPollCount) / histogram.Count()); } std::unique_ptr<ScenarioResult> RunScenario( diff --git a/test/cpp/qps/qps_json_driver.cc b/test/cpp/qps/qps_json_driver.cc index a906137474..f00f771ea0 100644 --- a/test/cpp/qps/qps_json_driver.cc +++ b/test/cpp/qps/qps_json_driver.cc @@ -94,6 +94,7 @@ static std::unique_ptr<ScenarioResult> RunAndReport(const Scenario& scenario, GetReporter()->ReportLatency(*result); GetReporter()->ReportTimes(*result); GetReporter()->ReportCpuUsage(*result); + GetReporter()->ReportPollCount(*result); for (int i = 0; *success && i < result->client_success_size(); i++) { *success = result->client_success(i); diff --git a/test/cpp/qps/report.cc b/test/cpp/qps/report.cc index a9130bf5d4..8bb4c9a3a5 100644 --- a/test/cpp/qps/report.cc +++ b/test/cpp/qps/report.cc @@ -80,6 +80,12 @@ void CompositeReporter::ReportCpuUsage(const ScenarioResult& result) { } } +void CompositeReporter::ReportPollCount(const ScenarioResult& result) { + for (size_t i = 0; i < reporters_.size(); ++i) { + reporters_[i]->ReportPollCount(result); + } +} + void GprLogReporter::ReportQPS(const ScenarioResult& result) { gpr_log(GPR_INFO, "QPS: %.1f", result.summary().qps()); if (result.summary().failed_requests_per_second() > 0) { @@ -121,6 +127,13 @@ void GprLogReporter::ReportCpuUsage(const ScenarioResult& result) { result.summary().server_cpu_usage()); } +void GprLogReporter::ReportPollCount(const ScenarioResult& result) { + gpr_log(GPR_INFO, "Client Polls per Request: %.2f", + result.summary().client_polls_per_request()); + gpr_log(GPR_INFO, "Server Polls per Request: %.2f", + result.summary().server_polls_per_request()); +} + void JsonReporter::ReportQPS(const ScenarioResult& result) { grpc::string json_string = SerializeJson(result, "type.googleapis.com/grpc.testing.ScenarioResult"); @@ -145,6 +158,10 @@ void JsonReporter::ReportCpuUsage(const ScenarioResult& result) { // NOP - all reporting is handled by ReportQPS. } +void JsonReporter::ReportPollCount(const ScenarioResult& result) { + // NOP - all reporting is handled by ReportQPS. +} + void RpcReporter::ReportQPS(const ScenarioResult& result) { grpc::ClientContext context; grpc::Status status; @@ -177,5 +194,9 @@ void RpcReporter::ReportCpuUsage(const ScenarioResult& result) { // NOP - all reporting is handled by ReportQPS. } +void RpcReporter::ReportPollCount(const ScenarioResult& result) { + // NOP - all reporting is handled by ReportQPS. +} + } // namespace testing } // namespace grpc diff --git a/test/cpp/qps/report.h b/test/cpp/qps/report.h index 1749be98c6..621fa7cb00 100644 --- a/test/cpp/qps/report.h +++ b/test/cpp/qps/report.h @@ -76,6 +76,9 @@ class Reporter { /** Reports server cpu usage. */ virtual void ReportCpuUsage(const ScenarioResult& result) = 0; + /** Reports client and server poll usage inside completion queue. */ + virtual void ReportPollCount(const ScenarioResult& result) = 0; + private: const string name_; }; @@ -93,6 +96,7 @@ class CompositeReporter : public Reporter { void ReportLatency(const ScenarioResult& result) override; void ReportTimes(const ScenarioResult& result) override; void ReportCpuUsage(const ScenarioResult& result) override; + void ReportPollCount(const ScenarioResult& result) override; private: std::vector<std::unique_ptr<Reporter> > reporters_; @@ -109,6 +113,7 @@ class GprLogReporter : public Reporter { void ReportLatency(const ScenarioResult& result) override; void ReportTimes(const ScenarioResult& result) override; void ReportCpuUsage(const ScenarioResult& result) override; + void ReportPollCount(const ScenarioResult& result) override; }; /** Dumps the report to a JSON file. */ @@ -123,6 +128,7 @@ class JsonReporter : public Reporter { void ReportLatency(const ScenarioResult& result) override; void ReportTimes(const ScenarioResult& result) override; void ReportCpuUsage(const ScenarioResult& result) override; + void ReportPollCount(const ScenarioResult& result) override; const string report_file_; }; @@ -138,6 +144,7 @@ class RpcReporter : public Reporter { void ReportLatency(const ScenarioResult& result) override; void ReportTimes(const ScenarioResult& result) override; void ReportCpuUsage(const ScenarioResult& result) override; + void ReportPollCount(const ScenarioResult& result) override; std::unique_ptr<ReportQpsScenarioService::Stub> stub_; }; diff --git a/test/cpp/qps/server.h b/test/cpp/qps/server.h index 8fbf37a095..a03dd1a695 100644 --- a/test/cpp/qps/server.h +++ b/test/cpp/qps/server.h @@ -38,6 +38,7 @@ #include <grpc/support/cpu.h> #include <vector> +#include "src/core/lib/surface/completion_queue.h" #include "src/proto/grpc/testing/control.pb.h" #include "src/proto/grpc/testing/messages.pb.h" #include "test/core/end2end/data/ssl_test_data.h" @@ -49,7 +50,8 @@ namespace testing { class Server { public: - explicit Server(const ServerConfig& config) : timer_(new UsageTimer) { + explicit Server(const ServerConfig& config) + : timer_(new UsageTimer), last_reset_poll_count_(0) { cores_ = gpr_cpu_num_cores(); if (config.port()) { port_ = config.port(); @@ -62,10 +64,13 @@ class Server { ServerStats Mark(bool reset) { UsageTimer::Result timer_result; + int cur_poll_count = GetPollCount(); + int poll_count = cur_poll_count - last_reset_poll_count_; if (reset) { std::unique_ptr<UsageTimer> timer(new UsageTimer); timer.swap(timer_); timer_result = timer->Mark(); + last_reset_poll_count_ = cur_poll_count; } else { timer_result = timer_->Mark(); } @@ -76,6 +81,7 @@ class Server { stats.set_time_user(timer_result.user); stats.set_total_cpu_time(timer_result.total_cpu_time); stats.set_idle_cpu_time(timer_result.idle_cpu_time); + stats.set_cq_poll_count(poll_count); return stats; } @@ -106,10 +112,16 @@ class Server { } } + virtual int GetPollCount() { + // For sync server. + return 0; + } + private: int port_; int cores_; std::unique_ptr<UsageTimer> timer_; + int last_reset_poll_count_; }; std::unique_ptr<Server> CreateSynchronousServer(const ServerConfig& config); diff --git a/test/cpp/qps/server_async.cc b/test/cpp/qps/server_async.cc index 84f1579c2f..3403ffd326 100644 --- a/test/cpp/qps/server_async.cc +++ b/test/cpp/qps/server_async.cc @@ -186,6 +186,14 @@ class AsyncQpsServerTest final : public grpc::testing::Server { shutdown_thread.join(); } + int GetPollCount() override { + int count = 0; + for (auto cq = srv_cqs_.begin(); cq != srv_cqs_.end(); cq++) { + count += grpc_get_cq_poll_num((*cq)->cq()); + } + return count; + } + private: void ShutdownThreadFunc() { // TODO (vpai): Remove this deadline and allow Shutdown to finish properly diff --git a/test/cpp/util/BUILD b/test/cpp/util/BUILD index 9dde22b4d1..453e9b6c0f 100644 --- a/test/cpp/util/BUILD +++ b/test/cpp/util/BUILD @@ -29,16 +29,20 @@ licenses(["notice"]) # 3-clause BSD +load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_binary") + +package(default_visibility = ["//visibility:public"]) + # The following builds a shared-object to confirm that grpc++_unsecure # builds properly. Build-only is sufficient here -cc_binary( +grpc_cc_binary( name = "testso.so", srcs = [], linkshared = 1, deps = ["//:grpc++_unsecure"], ) -cc_library( +grpc_cc_library( name = "test_config", srcs = [ "test_config_cc.cc", @@ -46,14 +50,15 @@ cc_library( hdrs = [ "test_config.h", ], - visibility = ["//test:__subpackages__"], + external_deps = [ + "gflags", + ], deps = [ "//:gpr", - "//external:gflags", ], ) -cc_library( +grpc_cc_library( name = "grpc++_proto_reflection_desc_db", srcs = [ "proto_reflection_descriptor_database.cc", @@ -61,14 +66,13 @@ cc_library( hdrs = [ "proto_reflection_descriptor_database.h", ], - visibility = ["//test:__subpackages__"], deps = [ "//:grpc++_config_proto", "//src/proto/grpc/reflection/v1alpha:reflection_proto", ], ) -cc_library( +grpc_cc_library( name = "test_util", srcs = [ "byte_buffer_proto_helper.cc", @@ -84,12 +88,57 @@ cc_library( "subprocess.h", "test_credentials_provider.h", ], - visibility = ["//test:__subpackages__"], deps = [ "//:grpc++", "//test/core/end2end:ssl_test_data", "//test/core/util:gpr_test_util", ], + external_deps = [ + "protobuf", + ], +) + +grpc_cc_library( + name = "grpc_cli_libs", + srcs = [ + "cli_call.cc", + "cli_credentials.cc", + "grpc_tool.cc", + "proto_file_parser.cc", + "service_describer.cc", + ], + hdrs = [ + "cli_call.h", + "cli_credentials.h", + "config_grpc_cli.h", + "grpc_tool.h", + "proto_file_parser.h", + "service_describer.h", + ], + deps = [ + "//:grpc++", + "//src/proto/grpc/reflection/v1alpha:reflection_proto", + ":grpc++_proto_reflection_desc_db", + ], + external_deps = [ + "gflags", + "protobuf", + "protobuf_clib", + ], +) + +grpc_cc_library( + name = "metrics_server_lib", + srcs = [ + "metrics_server.cc", + ], + hdrs = [ + "metrics_server.h", + ], + deps = [ + "//src/proto/grpc/testing:metrics_proto", + "//:grpc++", + ], ) cc_test( diff --git a/test/distrib/csharp/run_distrib_test.bat b/test/distrib/csharp/run_distrib_test.bat index cb5dd55273..aeadef37db 100644 --- a/test/distrib/csharp/run_distrib_test.bat +++ b/test/distrib/csharp/run_distrib_test.bat @@ -31,7 +31,7 @@ cd /d %~dp0 @rem extract input artifacts -powershell -Command "Add-Type -Assembly 'System.IO.Compression.FileSystem'; [System.IO.Compression.ZipFile]::ExtractToDirectory('../../../input_artifacts/csharp_nugets_windows_dotnetcli.zip', 'TestNugetFeed');" +powershell -Command "Add-Type -Assembly 'System.IO.Compression.FileSystem'; [System.IO.Compression.ZipFile]::ExtractToDirectory('../../../../input_artifacts/csharp_nugets_windows_dotnetcli.zip', 'TestNugetFeed');" update_version.sh auto |