aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/core
diff options
context:
space:
mode:
authorGravatar Alistair Veitch <aveitch@google.com>2015-06-01 13:34:15 -0700
committerGravatar Alistair Veitch <aveitch@google.com>2015-06-01 13:34:15 -0700
commitf3da552d5b62acabd6a3cdb37b1794fa9a50a9a5 (patch)
tree56d8b80561dab416b81e5309c60088aaa8bc570e /test/core
parent269676209ead4602e0cb0bd02ebf378dcd5df7b3 (diff)
parent7f61193cdeacfb21f4e99ac6b8e2c0da33a643e8 (diff)
merge with master
Diffstat (limited to 'test/core')
-rw-r--r--test/core/bad_client/bad_client.c137
-rw-r--r--test/core/bad_client/bad_client.h52
-rwxr-xr-xtest/core/bad_client/gen_build_json.py79
-rw-r--r--test/core/bad_client/tests/connection_prefix.c79
-rw-r--r--test/core/channel/channel_stack_test.c4
-rw-r--r--test/core/end2end/cq_verifier.c14
-rw-r--r--test/core/end2end/dualstack_socket_test.c3
-rw-r--r--test/core/end2end/fixtures/chttp2_fullstack_with_poll.c118
-rw-r--r--test/core/end2end/fixtures/chttp2_simple_ssl_fullstack_with_poll.c168
-rw-r--r--test/core/end2end/fixtures/chttp2_socket_pair.c3
-rw-r--r--test/core/end2end/fixtures/chttp2_socket_pair_one_byte_at_a_time.c3
-rw-r--r--test/core/end2end/fixtures/chttp2_socket_pair_with_grpc_trace.c157
-rwxr-xr-xtest/core/end2end/gen_build_json.py4
-rw-r--r--test/core/end2end/tests/bad_hostname.c2
-rw-r--r--test/core/end2end/tests/cancel_after_accept.c2
-rw-r--r--test/core/end2end/tests/cancel_after_accept_and_writes_closed.c2
-rw-r--r--test/core/end2end/tests/cancel_after_invoke.c2
-rw-r--r--test/core/end2end/tests/cancel_before_invoke.c2
-rw-r--r--test/core/end2end/tests/cancel_in_a_vacuum.c2
-rw-r--r--test/core/end2end/tests/census_simple_request.c2
-rw-r--r--test/core/end2end/tests/disappearing_server.c2
-rw-r--r--test/core/end2end/tests/early_server_shutdown_finishes_inflight_calls.c2
-rw-r--r--test/core/end2end/tests/early_server_shutdown_finishes_tags.c2
-rw-r--r--test/core/end2end/tests/empty_batch.c2
-rw-r--r--test/core/end2end/tests/graceful_server_shutdown.c2
-rw-r--r--test/core/end2end/tests/invoke_large_request.c25
-rw-r--r--test/core/end2end/tests/max_concurrent_streams.c2
-rw-r--r--test/core/end2end/tests/max_message_length.c6
-rw-r--r--test/core/end2end/tests/no_op.c2
-rw-r--r--test/core/end2end/tests/ping_pong_streaming.c2
-rw-r--r--test/core/end2end/tests/registered_call.c4
-rw-r--r--test/core/end2end/tests/request_response_with_binary_metadata_and_payload.c24
-rw-r--r--test/core/end2end/tests/request_response_with_metadata_and_payload.c24
-rw-r--r--test/core/end2end/tests/request_response_with_payload.c26
-rw-r--r--test/core/end2end/tests/request_response_with_payload_and_call_creds.c55
-rw-r--r--test/core/end2end/tests/request_response_with_trailing_metadata_and_payload.c24
-rw-r--r--test/core/end2end/tests/request_with_large_metadata.c22
-rw-r--r--test/core/end2end/tests/request_with_payload.c22
-rw-r--r--test/core/end2end/tests/server_finishes_request.c200
-rw-r--r--test/core/end2end/tests/simple_delayed_request.c4
-rw-r--r--test/core/end2end/tests/simple_request.c4
-rw-r--r--test/core/end2end/tests/simple_request_with_high_initial_sequence_number.c2
-rw-r--r--test/core/fling/fling_test.c4
-rw-r--r--test/core/httpcli/httpcli_test.c4
-rw-r--r--test/core/iomgr/endpoint_tests.c6
-rw-r--r--test/core/iomgr/sockaddr_utils_test.c8
-rw-r--r--test/core/iomgr/tcp_server_posix_test.c10
-rw-r--r--test/core/security/auth_context_test.c143
-rw-r--r--test/core/security/credentials_test.c163
-rw-r--r--test/core/support/cmdline_test.c55
-rw-r--r--test/core/support/env_test.c4
-rw-r--r--test/core/support/file_test.c10
-rw-r--r--test/core/support/histogram_test.c8
-rw-r--r--test/core/support/slice_test.c12
-rw-r--r--test/core/support/string_test.c10
-rw-r--r--test/core/surface/byte_buffer_reader_test.c8
-rw-r--r--test/core/surface/completion_queue_test.c12
-rw-r--r--test/core/transport/chttp2/hpack_table_test.c8
-rw-r--r--test/core/transport/chttp2/stream_map_test.c16
-rw-r--r--test/core/transport/chttp2/timeout_encoding_test.c8
-rw-r--r--test/core/transport/metadata_test.c20
61 files changed, 1549 insertions, 253 deletions
diff --git a/test/core/bad_client/bad_client.c b/test/core/bad_client/bad_client.c
new file mode 100644
index 0000000000..9d1c4ce2d7
--- /dev/null
+++ b/test/core/bad_client/bad_client.c
@@ -0,0 +1,137 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include "test/core/bad_client/bad_client.h"
+
+#include "src/core/channel/channel_stack.h"
+#include "src/core/channel/http_server_filter.h"
+#include "src/core/iomgr/endpoint_pair.h"
+#include "src/core/surface/completion_queue.h"
+#include "src/core/surface/server.h"
+#include "src/core/transport/chttp2_transport.h"
+
+#include <grpc/support/sync.h>
+#include <grpc/support/thd.h>
+
+typedef struct {
+ grpc_server *server;
+ grpc_completion_queue *cq;
+ grpc_bad_client_server_side_validator validator;
+ gpr_event done_thd;
+ gpr_event done_write;
+} thd_args;
+
+static void thd_func(void *arg) {
+ thd_args *a = arg;
+ a->validator(a->server, a->cq);
+ gpr_event_set(&a->done_thd, (void *)1);
+}
+
+static void done_write(void *arg, grpc_endpoint_cb_status status) {
+ thd_args *a = arg;
+ gpr_event_set(&a->done_write, (void *)1);
+}
+
+static grpc_transport_setup_result server_setup_transport(
+ void *ts, grpc_transport *transport, grpc_mdctx *mdctx) {
+ thd_args *a = ts;
+ static grpc_channel_filter const *extra_filters[] = {
+ &grpc_http_server_filter};
+ return grpc_server_setup_transport(a->server, transport, extra_filters,
+ GPR_ARRAY_SIZE(extra_filters), mdctx,
+ grpc_server_get_channel_args(a->server));
+}
+
+void grpc_run_bad_client_test(const char *name, const char *client_payload,
+ size_t client_payload_length,
+ grpc_bad_client_server_side_validator validator) {
+ grpc_endpoint_pair sfd;
+ thd_args a;
+ gpr_thd_id id;
+ gpr_slice slice =
+ gpr_slice_from_copied_buffer(client_payload, client_payload_length);
+
+ /* Add a debug log */
+ gpr_log(GPR_INFO, "TEST: %s", name);
+
+ /* Init grpc */
+ grpc_init();
+
+ /* Create endpoints */
+ sfd = grpc_iomgr_create_endpoint_pair(65536);
+
+ /* Create server, completion events */
+ a.server = grpc_server_create_from_filters(NULL, 0, NULL);
+ a.cq = grpc_completion_queue_create();
+ gpr_event_init(&a.done_thd);
+ gpr_event_init(&a.done_write);
+ a.validator = validator;
+ grpc_server_register_completion_queue(a.server, a.cq);
+ grpc_server_start(a.server);
+ grpc_create_chttp2_transport(server_setup_transport, &a, NULL, sfd.server,
+ NULL, 0, grpc_mdctx_create(), 0);
+
+ /* Bind everything into the same pollset */
+ grpc_endpoint_add_to_pollset(sfd.client, grpc_cq_pollset(a.cq));
+ grpc_endpoint_add_to_pollset(sfd.server, grpc_cq_pollset(a.cq));
+
+ /* Check a ground truth */
+ GPR_ASSERT(grpc_server_has_open_connections(a.server));
+
+ /* Start validator */
+ gpr_thd_new(&id, thd_func, &a, NULL);
+
+ /* Write data */
+ switch (grpc_endpoint_write(sfd.client, &slice, 1, done_write, &a)) {
+ case GRPC_ENDPOINT_WRITE_DONE:
+ done_write(&a, 1);
+ break;
+ case GRPC_ENDPOINT_WRITE_PENDING:
+ break;
+ case GRPC_ENDPOINT_WRITE_ERROR:
+ done_write(&a, 0);
+ break;
+ }
+
+ /* Await completion */
+ GPR_ASSERT(
+ gpr_event_wait(&a.done_write, GRPC_TIMEOUT_SECONDS_TO_DEADLINE(5)));
+ GPR_ASSERT(gpr_event_wait(&a.done_thd, GRPC_TIMEOUT_SECONDS_TO_DEADLINE(5)));
+
+ /* Shutdown */
+ grpc_endpoint_destroy(sfd.client);
+ grpc_server_destroy(a.server);
+ grpc_completion_queue_destroy(a.cq);
+
+ grpc_shutdown();
+}
diff --git a/test/core/bad_client/bad_client.h b/test/core/bad_client/bad_client.h
new file mode 100644
index 0000000000..4834e86cce
--- /dev/null
+++ b/test/core/bad_client/bad_client.h
@@ -0,0 +1,52 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#ifndef GRPC_TEST_CORE_BAD_CLIENT_BAD_CLIENT_H
+#define GRPC_TEST_CORE_BAD_CLIENT_BAD_CLIENT_H
+
+#include <grpc/grpc.h>
+#include "test/core/util/test_config.h"
+
+typedef void (*grpc_bad_client_server_side_validator)(
+ grpc_server *server, grpc_completion_queue *cq);
+
+/* Test runner.
+
+ Create a server, and send client_payload to it as bytes from a client.
+ Execute validator in a separate thread to assert that the bytes are
+ handled as expected. */
+void grpc_run_bad_client_test(const char *name, const char *client_payload,
+ size_t client_payload_length,
+ grpc_bad_client_server_side_validator validator);
+
+#endif /* GRPC_TEST_CORE_BAD_CLIENT_BAD_CLIENT_H */
diff --git a/test/core/bad_client/gen_build_json.py b/test/core/bad_client/gen_build_json.py
new file mode 100755
index 0000000000..67969a1a12
--- /dev/null
+++ b/test/core/bad_client/gen_build_json.py
@@ -0,0 +1,79 @@
+#!/usr/bin/env python
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+"""Generates the appropriate build.json data for all the end2end tests."""
+
+
+import simplejson
+import collections
+
+TestOptions = collections.namedtuple('TestOptions', 'flaky')
+default_test_options = TestOptions(False)
+
+# maps test names to options
+BAD_CLIENT_TESTS = {
+ 'connection_prefix': default_test_options,
+}
+
+def main():
+ json = {
+ '#': 'generated with test/bad_client/gen_build_json.py',
+ 'libs': [
+ {
+ 'name': 'bad_client_test',
+ 'build': 'private',
+ 'language': 'c',
+ 'src': [
+ 'test/core/bad_client/bad_client.c'
+ ]
+ }],
+ 'targets': [
+ {
+ 'name': '%s_bad_client_test' % t,
+ 'build': 'test',
+ 'language': 'c',
+ 'secure': 'no',
+ 'src': ['test/core/bad_client/tests/%s.c' % t],
+ 'flaky': 'invoke_large_request' in t,
+ 'deps': [
+ 'bad_client_test',
+ 'grpc_test_util_unsecure',
+ 'grpc_unsecure',
+ 'gpr_test_util',
+ 'gpr'
+ ]
+ }
+ for t in sorted(BAD_CLIENT_TESTS.keys())]}
+ print simplejson.dumps(json, sort_keys=True, indent=2 * ' ')
+
+
+if __name__ == '__main__':
+ main()
diff --git a/test/core/bad_client/tests/connection_prefix.c b/test/core/bad_client/tests/connection_prefix.c
new file mode 100644
index 0000000000..e8bf935710
--- /dev/null
+++ b/test/core/bad_client/tests/connection_prefix.c
@@ -0,0 +1,79 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include "test/core/bad_client/bad_client.h"
+#include "src/core/surface/server.h"
+
+static void verifier(grpc_server *server, grpc_completion_queue *cq) {
+ while (grpc_server_has_open_connections(server)) {
+ GPR_ASSERT(grpc_completion_queue_next(
+ cq, GRPC_TIMEOUT_MILLIS_TO_DEADLINE(20)).type ==
+ GRPC_QUEUE_TIMEOUT);
+ }
+}
+
+int main(int argc, char **argv) {
+ grpc_test_init(argc, argv);
+
+ grpc_run_bad_client_test("conpfx_1", "X", 1, verifier);
+ grpc_run_bad_client_test("conpfx_2", "PX", 2, verifier);
+ grpc_run_bad_client_test("conpfx_3", "PRX", 3, verifier);
+ grpc_run_bad_client_test("conpfx_4", "PRIX", 4, verifier);
+ grpc_run_bad_client_test("conpfx_5", "PRI X", 5, verifier);
+ grpc_run_bad_client_test("conpfx_6", "PRI *X", 6, verifier);
+ grpc_run_bad_client_test("conpfx_7", "PRI * X", 7, verifier);
+ grpc_run_bad_client_test("conpfx_8", "PRI * HX", 8, verifier);
+ grpc_run_bad_client_test("conpfx_9", "PRI * HTX", 9, verifier);
+ grpc_run_bad_client_test("conpfx_10", "PRI * HTTX", 10, verifier);
+ grpc_run_bad_client_test("conpfx_11", "PRI * HTTPX", 11, verifier);
+ grpc_run_bad_client_test("conpfx_12", "PRI * HTTP/X", 12, verifier);
+ grpc_run_bad_client_test("conpfx_13", "PRI * HTTP/2X", 13, verifier);
+ grpc_run_bad_client_test("conpfx_14", "PRI * HTTP/2.X", 14, verifier);
+ grpc_run_bad_client_test("conpfx_15", "PRI * HTTP/2.0X", 15, verifier);
+ grpc_run_bad_client_test("conpfx_16", "PRI * HTTP/2.0\rX", 16, verifier);
+ grpc_run_bad_client_test("conpfx_17", "PRI * HTTP/2.0\r\nX", 17, verifier);
+ grpc_run_bad_client_test("conpfx_18", "PRI * HTTP/2.0\r\n\rX", 18, verifier);
+ grpc_run_bad_client_test("conpfx_19", "PRI * HTTP/2.0\r\n\r\nX", 19,
+ verifier);
+ grpc_run_bad_client_test("conpfx_20", "PRI * HTTP/2.0\r\n\r\nSX", 20,
+ verifier);
+ grpc_run_bad_client_test("conpfx_21", "PRI * HTTP/2.0\r\n\r\nSMX", 21,
+ verifier);
+ grpc_run_bad_client_test("conpfx_22", "PRI * HTTP/2.0\r\n\r\nSM\rX", 22,
+ verifier);
+ grpc_run_bad_client_test("conpfx_23", "PRI * HTTP/2.0\r\n\r\nSM\r\nX", 23,
+ verifier);
+ grpc_run_bad_client_test("conpfx_24", "PRI * HTTP/2.0\r\n\r\nSM\r\n\rX", 24,
+ verifier);
+ return 0;
+}
diff --git a/test/core/channel/channel_stack_test.c b/test/core/channel/channel_stack_test.c
index 957dee1aa7..fe92f2f023 100644
--- a/test/core/channel/channel_stack_test.c
+++ b/test/core/channel/channel_stack_test.c
@@ -39,8 +39,6 @@
#include <grpc/support/log.h>
#include "test/core/util/test_config.h"
-#define LOG_TEST_NAME() gpr_log(GPR_INFO, "%s", __FUNCTION__)
-
static void channel_init_func(grpc_channel_element *elem,
const grpc_channel_args *args,
grpc_mdctx *metadata_context, int is_first,
@@ -91,8 +89,6 @@ static void test_create_channel_stack(void) {
int *channel_data;
int *call_data;
- LOG_TEST_NAME();
-
metadata_context = grpc_mdctx_create();
arg.type = GRPC_ARG_INTEGER;
diff --git a/test/core/end2end/cq_verifier.c b/test/core/end2end/cq_verifier.c
index 66480254d2..7822d001d1 100644
--- a/test/core/end2end/cq_verifier.c
+++ b/test/core/end2end/cq_verifier.c
@@ -127,11 +127,15 @@ static gpr_slice merge_slices(gpr_slice *slices, size_t nslices) {
}
static int byte_buffer_eq_slice(grpc_byte_buffer *bb, gpr_slice b) {
- gpr_slice a =
- merge_slices(bb->data.slice_buffer.slices, bb->data.slice_buffer.count);
- int ok = GPR_SLICE_LENGTH(a) == GPR_SLICE_LENGTH(b) &&
- 0 == memcmp(GPR_SLICE_START_PTR(a), GPR_SLICE_START_PTR(b),
- GPR_SLICE_LENGTH(a));
+ gpr_slice a;
+ int ok;
+
+ if (!bb) return 0;
+
+ a = merge_slices(bb->data.slice_buffer.slices, bb->data.slice_buffer.count);
+ ok = GPR_SLICE_LENGTH(a) == GPR_SLICE_LENGTH(b) &&
+ 0 == memcmp(GPR_SLICE_START_PTR(a), GPR_SLICE_START_PTR(b),
+ GPR_SLICE_LENGTH(a));
gpr_slice_unref(a);
gpr_slice_unref(b);
return ok;
diff --git a/test/core/end2end/dualstack_socket_test.c b/test/core/end2end/dualstack_socket_test.c
index be3c7ca17f..06614a93e7 100644
--- a/test/core/end2end/dualstack_socket_test.c
+++ b/test/core/end2end/dualstack_socket_test.c
@@ -211,6 +211,9 @@ void test_connect(const char *server_host, const char *client_host, int port,
grpc_completion_queue_shutdown(server_cq);
drain_cq(server_cq);
grpc_completion_queue_destroy(server_cq);
+
+ grpc_call_details_destroy(&call_details);
+ gpr_free(details);
}
int main(int argc, char **argv) {
diff --git a/test/core/end2end/fixtures/chttp2_fullstack_with_poll.c b/test/core/end2end/fixtures/chttp2_fullstack_with_poll.c
new file mode 100644
index 0000000000..f92b40efeb
--- /dev/null
+++ b/test/core/end2end/fixtures/chttp2_fullstack_with_poll.c
@@ -0,0 +1,118 @@
+/*
+ *
+ * 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 "src/core/channel/client_channel.h"
+#include "src/core/channel/connected_channel.h"
+#include "src/core/channel/http_server_filter.h"
+#include "src/core/surface/channel.h"
+#include "src/core/surface/client.h"
+#include "src/core/surface/server.h"
+#include "src/core/transport/chttp2_transport.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 "test/core/util/port.h"
+#include "test/core/util/test_config.h"
+
+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.client_cq = grpc_completion_queue_create();
+ f.server_cq = grpc_completion_queue_create();
+
+ 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_channel_create(ffd->localaddr, client_args);
+}
+
+void chttp2_init_server_fullstack(grpc_end2end_test_fixture *f,
+ grpc_channel_args *server_args) {
+ fullstack_fixture_data *ffd = f->fixture_data;
+ if (f->server) {
+ grpc_server_destroy(f->server);
+ }
+ f->server = grpc_server_create(server_args);
+ grpc_server_register_completion_queue(f->server, f->server_cq);
+ GPR_ASSERT(grpc_server_add_http2_port(f->server, ffd->localaddr));
+ grpc_server_start(f->server);
+}
+
+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,
+ 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_init();
+
+ for (i = 0; i < sizeof(configs) / sizeof(*configs); i++) {
+ grpc_end2end_tests(configs[i]);
+ }
+
+ grpc_shutdown();
+
+ return 0;
+}
diff --git a/test/core/end2end/fixtures/chttp2_simple_ssl_fullstack_with_poll.c b/test/core/end2end/fixtures/chttp2_simple_ssl_fullstack_with_poll.c
new file mode 100644
index 0000000000..a5865d37c8
--- /dev/null
+++ b/test/core/end2end/fixtures/chttp2_simple_ssl_fullstack_with_poll.c
@@ -0,0 +1,168 @@
+/*
+ *
+ * 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 "src/core/channel/channel_args.h"
+#include "src/core/security/credentials.h"
+#include "src/core/support/env.h"
+#include "src/core/support/file.h"
+#include "src/core/support/string.h"
+#include <grpc/support/alloc.h>
+#include <grpc/support/host_port.h>
+#include <grpc/support/log.h>
+#include "test/core/util/test_config.h"
+#include "test/core/util/port.h"
+#include "test/core/end2end/data/ssl_test_data.h"
+
+typedef struct fullstack_secure_fixture_data {
+ char *localaddr;
+} fullstack_secure_fixture_data;
+
+static grpc_end2end_test_fixture chttp2_create_fixture_secure_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_secure_fixture_data *ffd =
+ gpr_malloc(sizeof(fullstack_secure_fixture_data));
+ memset(&f, 0, sizeof(f));
+
+ gpr_join_host_port(&ffd->localaddr, "localhost", port);
+
+ f.fixture_data = ffd;
+ f.client_cq = grpc_completion_queue_create();
+ f.server_cq = grpc_completion_queue_create();
+
+ return f;
+}
+
+static void chttp2_init_client_secure_fullstack(grpc_end2end_test_fixture *f,
+ grpc_channel_args *client_args,
+ grpc_credentials *creds) {
+ fullstack_secure_fixture_data *ffd = f->fixture_data;
+ f->client = grpc_secure_channel_create(creds, ffd->localaddr, client_args);
+ GPR_ASSERT(f->client != NULL);
+ grpc_credentials_release(creds);
+}
+
+static void chttp2_init_server_secure_fullstack(
+ grpc_end2end_test_fixture *f, grpc_channel_args *server_args,
+ grpc_server_credentials *server_creds) {
+ fullstack_secure_fixture_data *ffd = f->fixture_data;
+ if (f->server) {
+ grpc_server_destroy(f->server);
+ }
+ f->server = grpc_server_create(server_args);
+ grpc_server_register_completion_queue(f->server, f->server_cq);
+ GPR_ASSERT(grpc_server_add_secure_http2_port(f->server, ffd->localaddr,
+ server_creds));
+ grpc_server_credentials_release(server_creds);
+ grpc_server_start(f->server);
+}
+
+void chttp2_tear_down_secure_fullstack(grpc_end2end_test_fixture *f) {
+ fullstack_secure_fixture_data *ffd = f->fixture_data;
+ gpr_free(ffd->localaddr);
+ gpr_free(ffd);
+}
+
+static void chttp2_init_client_simple_ssl_secure_fullstack(
+ grpc_end2end_test_fixture *f, grpc_channel_args *client_args) {
+ grpc_credentials *ssl_creds = grpc_ssl_credentials_create(NULL, NULL);
+ grpc_arg ssl_name_override = {GRPC_ARG_STRING,
+ GRPC_SSL_TARGET_NAME_OVERRIDE_ARG,
+ {"foo.test.google.fr"}};
+ grpc_channel_args *new_client_args =
+ grpc_channel_args_copy_and_add(client_args, &ssl_name_override);
+ chttp2_init_client_secure_fullstack(f, new_client_args, ssl_creds);
+ grpc_channel_args_destroy(new_client_args);
+}
+
+static void chttp2_init_server_simple_ssl_secure_fullstack(
+ grpc_end2end_test_fixture *f, grpc_channel_args *server_args) {
+ grpc_ssl_pem_key_cert_pair pem_cert_key_pair = {test_server1_key,
+ test_server1_cert};
+ grpc_server_credentials *ssl_creds =
+ grpc_ssl_server_credentials_create(NULL, &pem_cert_key_pair, 1);
+ chttp2_init_server_secure_fullstack(f, server_args, ssl_creds);
+}
+
+/* All test configurations */
+
+static grpc_end2end_test_config configs[] = {
+ {"chttp2/simple_ssl_fullstack",
+ FEATURE_MASK_SUPPORTS_DELAYED_CONNECTION |
+ FEATURE_MASK_SUPPORTS_HOSTNAME_VERIFICATION |
+ FEATURE_MASK_SUPPORTS_PER_CALL_CREDENTIALS,
+ chttp2_create_fixture_secure_fullstack,
+ chttp2_init_client_simple_ssl_secure_fullstack,
+ chttp2_init_server_simple_ssl_secure_fullstack,
+ chttp2_tear_down_secure_fullstack},
+};
+
+int main(int argc, char **argv) {
+ size_t i;
+ FILE *roots_file;
+ size_t roots_size = strlen(test_root_cert);
+ char *roots_filename;
+
+ grpc_platform_become_multipoller = grpc_poll_become_multipoller;
+
+ grpc_test_init(argc, argv);
+
+ /* Set the SSL roots env var. */
+ roots_file = gpr_tmpfile("chttp2_simple_ssl_with_poll_fullstack_test",
+ &roots_filename);
+ GPR_ASSERT(roots_filename != NULL);
+ GPR_ASSERT(roots_file != NULL);
+ GPR_ASSERT(fwrite(test_root_cert, 1, roots_size, roots_file) == roots_size);
+ fclose(roots_file);
+ gpr_setenv(GRPC_DEFAULT_SSL_ROOTS_FILE_PATH_ENV_VAR, roots_filename);
+
+ grpc_init();
+
+ for (i = 0; i < sizeof(configs) / sizeof(*configs); i++) {
+ grpc_end2end_tests(configs[i]);
+ }
+
+ grpc_shutdown();
+
+ /* Cleanup. */
+ remove(roots_filename);
+ gpr_free(roots_filename);
+
+ return 0;
+}
diff --git a/test/core/end2end/fixtures/chttp2_socket_pair.c b/test/core/end2end/fixtures/chttp2_socket_pair.c
index 43ebf7eed5..e0221d0452 100644
--- a/test/core/end2end/fixtures/chttp2_socket_pair.c
+++ b/test/core/end2end/fixtures/chttp2_socket_pair.c
@@ -62,7 +62,8 @@ static grpc_transport_setup_result server_setup_transport(
static grpc_channel_filter const *extra_filters[] = {
&grpc_http_server_filter};
return grpc_server_setup_transport(f->server, transport, extra_filters,
- GPR_ARRAY_SIZE(extra_filters), mdctx);
+ GPR_ARRAY_SIZE(extra_filters), mdctx,
+ grpc_server_get_channel_args(f->server));
}
typedef struct {
diff --git a/test/core/end2end/fixtures/chttp2_socket_pair_one_byte_at_a_time.c b/test/core/end2end/fixtures/chttp2_socket_pair_one_byte_at_a_time.c
index 385d5a4e81..37b5529d7f 100644
--- a/test/core/end2end/fixtures/chttp2_socket_pair_one_byte_at_a_time.c
+++ b/test/core/end2end/fixtures/chttp2_socket_pair_one_byte_at_a_time.c
@@ -62,7 +62,8 @@ static grpc_transport_setup_result server_setup_transport(
static grpc_channel_filter const *extra_filters[] = {
&grpc_http_server_filter};
return grpc_server_setup_transport(f->server, transport, extra_filters,
- GPR_ARRAY_SIZE(extra_filters), mdctx);
+ GPR_ARRAY_SIZE(extra_filters), mdctx,
+ grpc_server_get_channel_args(f->server));
}
typedef struct {
diff --git a/test/core/end2end/fixtures/chttp2_socket_pair_with_grpc_trace.c b/test/core/end2end/fixtures/chttp2_socket_pair_with_grpc_trace.c
new file mode 100644
index 0000000000..b15a18f1a7
--- /dev/null
+++ b/test/core/end2end/fixtures/chttp2_socket_pair_with_grpc_trace.c
@@ -0,0 +1,157 @@
+/*
+ *
+ * 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 "src/core/channel/client_channel.h"
+#include "src/core/channel/connected_channel.h"
+#include "src/core/channel/http_client_filter.h"
+#include "src/core/channel/http_server_filter.h"
+#include "src/core/iomgr/endpoint_pair.h"
+#include "src/core/iomgr/iomgr.h"
+#include "src/core/support/env.h"
+#include "src/core/surface/channel.h"
+#include "src/core/surface/client.h"
+#include "src/core/surface/server.h"
+#include "src/core/transport/chttp2_transport.h"
+#include <grpc/support/alloc.h>
+#include <grpc/support/log.h>
+#include <grpc/support/sync.h>
+#include <grpc/support/thd.h>
+#include <grpc/support/useful.h>
+#include "test/core/util/port.h"
+#include "test/core/util/test_config.h"
+
+/* chttp2 transport that is immediately available (used for testing
+ connected_channel without a client_channel */
+
+static grpc_transport_setup_result server_setup_transport(
+ void *ts, grpc_transport *transport, grpc_mdctx *mdctx) {
+ grpc_end2end_test_fixture *f = ts;
+ static grpc_channel_filter const *extra_filters[] = {
+ &grpc_http_server_filter};
+ return grpc_server_setup_transport(f->server, transport, extra_filters,
+ GPR_ARRAY_SIZE(extra_filters), mdctx,
+ grpc_server_get_channel_args(f->server));
+}
+
+typedef struct {
+ grpc_end2end_test_fixture *f;
+ grpc_channel_args *client_args;
+} sp_client_setup;
+
+static grpc_transport_setup_result client_setup_transport(
+ void *ts, grpc_transport *transport, grpc_mdctx *mdctx) {
+ sp_client_setup *cs = ts;
+
+ const grpc_channel_filter *filters[] = {&grpc_client_surface_filter,
+ &grpc_http_client_filter,
+ &grpc_connected_channel_filter};
+ size_t nfilters = sizeof(filters) / sizeof(*filters);
+ grpc_channel *channel = grpc_channel_create_from_filters(
+ filters, nfilters, cs->client_args, mdctx, 1);
+
+ cs->f->client = channel;
+
+ return grpc_connected_channel_bind_transport(
+ grpc_channel_get_channel_stack(channel), transport);
+}
+
+static grpc_end2end_test_fixture chttp2_create_fixture_socketpair(
+ grpc_channel_args *client_args, grpc_channel_args *server_args) {
+ grpc_endpoint_pair *sfd = gpr_malloc(sizeof(grpc_endpoint_pair));
+
+ grpc_end2end_test_fixture f;
+ memset(&f, 0, sizeof(f));
+ f.fixture_data = sfd;
+ f.client_cq = grpc_completion_queue_create();
+ f.server_cq = grpc_completion_queue_create();
+
+ *sfd = grpc_iomgr_create_endpoint_pair(65536);
+
+ return f;
+}
+
+static void chttp2_init_client_socketpair(grpc_end2end_test_fixture *f,
+ grpc_channel_args *client_args) {
+ grpc_endpoint_pair *sfd = f->fixture_data;
+ sp_client_setup cs;
+ cs.client_args = client_args;
+ cs.f = f;
+ grpc_create_chttp2_transport(client_setup_transport, &cs, client_args,
+ sfd->client, NULL, 0, grpc_mdctx_create(), 1);
+ GPR_ASSERT(f->client);
+}
+
+static void chttp2_init_server_socketpair(grpc_end2end_test_fixture *f,
+ grpc_channel_args *server_args) {
+ grpc_endpoint_pair *sfd = f->fixture_data;
+ GPR_ASSERT(!f->server);
+ f->server = grpc_server_create_from_filters(NULL, 0, server_args);
+ grpc_server_register_completion_queue(f->server, f->server_cq);
+ grpc_server_start(f->server);
+ grpc_create_chttp2_transport(server_setup_transport, f, server_args,
+ sfd->server, NULL, 0, grpc_mdctx_create(), 0);
+}
+
+static void chttp2_tear_down_socketpair(grpc_end2end_test_fixture *f) {
+ gpr_free(f->fixture_data);
+}
+
+/* All test configurations */
+static grpc_end2end_test_config configs[] = {
+ {"chttp2/socketpair", 0, chttp2_create_fixture_socketpair,
+ chttp2_init_client_socketpair, chttp2_init_server_socketpair,
+ chttp2_tear_down_socketpair},
+};
+
+int main(int argc, char **argv) {
+ size_t i;
+
+ /* force tracing on, with a value to force many
+ code paths in trace.c to be taken */
+ gpr_setenv("GRPC_TRACE", "doesnt-exist,http,all");
+
+ grpc_test_init(argc, argv);
+ grpc_init();
+
+ for (i = 0; i < sizeof(configs) / sizeof(*configs); i++) {
+ grpc_end2end_tests(configs[i]);
+ }
+
+ grpc_shutdown();
+
+ return 0;
+}
diff --git a/test/core/end2end/gen_build_json.py b/test/core/end2end/gen_build_json.py
index bce2d7a796..fb13c7840c 100755
--- a/test/core/end2end/gen_build_json.py
+++ b/test/core/end2end/gen_build_json.py
@@ -44,11 +44,14 @@ default_secure_fixture_options = FixtureOptions(True, ['windows', 'posix'])
END2END_FIXTURES = {
'chttp2_fake_security': default_secure_fixture_options,
'chttp2_fullstack': default_unsecure_fixture_options,
+ 'chttp2_fullstack_with_poll': FixtureOptions(False, ['posix']),
'chttp2_fullstack_uds_posix': FixtureOptions(False, ['posix']),
'chttp2_simple_ssl_fullstack': default_secure_fixture_options,
+ 'chttp2_simple_ssl_fullstack_with_poll': FixtureOptions(True, ['posix']),
'chttp2_simple_ssl_with_oauth2_fullstack': default_secure_fixture_options,
'chttp2_socket_pair': default_unsecure_fixture_options,
'chttp2_socket_pair_one_byte_at_a_time': default_unsecure_fixture_options,
+ 'chttp2_socket_pair_with_grpc_trace': default_unsecure_fixture_options,
}
TestOptions = collections.namedtuple('TestOptions', 'flaky secure')
@@ -81,6 +84,7 @@ END2END_TESTS = {
'request_response_with_payload_and_call_creds': TestOptions(flaky=False, secure=True),
'request_with_large_metadata': default_test_options,
'request_with_payload': default_test_options,
+ 'server_finishes_request': default_test_options,
'simple_delayed_request': default_test_options,
'simple_request': default_test_options,
'simple_request_with_high_initial_sequence_number': default_test_options,
diff --git a/test/core/end2end/tests/bad_hostname.c b/test/core/end2end/tests/bad_hostname.c
index e145d2e95b..0220f34534 100644
--- a/test/core/end2end/tests/bad_hostname.c
+++ b/test/core/end2end/tests/bad_hostname.c
@@ -158,7 +158,7 @@ static void simple_request_body(grpc_end2end_test_fixture f) {
static void test_invoke_simple_request(grpc_end2end_test_config config) {
grpc_end2end_test_fixture f;
- f = begin_test(config, __FUNCTION__, NULL, NULL);
+ f = begin_test(config, "test_invoke_simple_request", NULL, NULL);
simple_request_body(f);
end_test(&f);
config.tear_down_data(&f);
diff --git a/test/core/end2end/tests/cancel_after_accept.c b/test/core/end2end/tests/cancel_after_accept.c
index 275333897f..daf386c326 100644
--- a/test/core/end2end/tests/cancel_after_accept.c
+++ b/test/core/end2end/tests/cancel_after_accept.c
@@ -105,7 +105,7 @@ static void test_cancel_after_accept(grpc_end2end_test_config config,
grpc_op *op;
grpc_call *c;
grpc_call *s;
- grpc_end2end_test_fixture f = begin_test(config, __FUNCTION__, NULL, NULL);
+ grpc_end2end_test_fixture f = begin_test(config, "cancel_after_accept", NULL, NULL);
gpr_timespec deadline = five_seconds_time();
cq_verifier *v_client = cq_verifier_create(f.client_cq);
cq_verifier *v_server = cq_verifier_create(f.server_cq);
diff --git a/test/core/end2end/tests/cancel_after_accept_and_writes_closed.c b/test/core/end2end/tests/cancel_after_accept_and_writes_closed.c
index eaf8b60e98..0bd98997e9 100644
--- a/test/core/end2end/tests/cancel_after_accept_and_writes_closed.c
+++ b/test/core/end2end/tests/cancel_after_accept_and_writes_closed.c
@@ -105,7 +105,7 @@ static void test_cancel_after_accept_and_writes_closed(
grpc_op *op;
grpc_call *c;
grpc_call *s;
- grpc_end2end_test_fixture f = begin_test(config, __FUNCTION__, NULL, NULL);
+ grpc_end2end_test_fixture f = begin_test(config, "test_cancel_after_accept_and_writes_closed", NULL, NULL);
gpr_timespec deadline = five_seconds_time();
cq_verifier *v_client = cq_verifier_create(f.client_cq);
cq_verifier *v_server = cq_verifier_create(f.server_cq);
diff --git a/test/core/end2end/tests/cancel_after_invoke.c b/test/core/end2end/tests/cancel_after_invoke.c
index 618d9e97e3..c5e0ca5517 100644
--- a/test/core/end2end/tests/cancel_after_invoke.c
+++ b/test/core/end2end/tests/cancel_after_invoke.c
@@ -106,7 +106,7 @@ static void test_cancel_after_invoke(grpc_end2end_test_config config,
grpc_op *op;
grpc_call *c;
grpc_end2end_test_fixture f =
- begin_test(config, __FUNCTION__, mode, NULL, NULL);
+ begin_test(config, "test_cancel_after_invoke", mode, NULL, NULL);
gpr_timespec deadline = five_seconds_time();
cq_verifier *v_client = cq_verifier_create(f.client_cq);
grpc_metadata_array initial_metadata_recv;
diff --git a/test/core/end2end/tests/cancel_before_invoke.c b/test/core/end2end/tests/cancel_before_invoke.c
index 9c9d6aadcc..0482d370dc 100644
--- a/test/core/end2end/tests/cancel_before_invoke.c
+++ b/test/core/end2end/tests/cancel_before_invoke.c
@@ -103,7 +103,7 @@ static void test_cancel_before_invoke(grpc_end2end_test_config config,
grpc_op ops[6];
grpc_op *op;
grpc_call *c;
- grpc_end2end_test_fixture f = begin_test(config, __FUNCTION__, NULL, NULL);
+ grpc_end2end_test_fixture f = begin_test(config, "cancel_before_invoke", NULL, NULL);
gpr_timespec deadline = five_seconds_time();
cq_verifier *v_client = cq_verifier_create(f.client_cq);
grpc_metadata_array initial_metadata_recv;
diff --git a/test/core/end2end/tests/cancel_in_a_vacuum.c b/test/core/end2end/tests/cancel_in_a_vacuum.c
index 1bc393aba7..f0984cb5dc 100644
--- a/test/core/end2end/tests/cancel_in_a_vacuum.c
+++ b/test/core/end2end/tests/cancel_in_a_vacuum.c
@@ -100,7 +100,7 @@ static void end_test(grpc_end2end_test_fixture *f) {
static void test_cancel_in_a_vacuum(grpc_end2end_test_config config,
cancellation_mode mode) {
grpc_call *c;
- grpc_end2end_test_fixture f = begin_test(config, __FUNCTION__, NULL, NULL);
+ grpc_end2end_test_fixture f = begin_test(config, "test_cancel_in_a_vacuum", NULL, NULL);
gpr_timespec deadline = five_seconds_time();
cq_verifier *v_client = cq_verifier_create(f.client_cq);
diff --git a/test/core/end2end/tests/census_simple_request.c b/test/core/end2end/tests/census_simple_request.c
index 2017ab6536..b808684cd1 100644
--- a/test/core/end2end/tests/census_simple_request.c
+++ b/test/core/end2end/tests/census_simple_request.c
@@ -204,7 +204,7 @@ static void test_invoke_request_with_census(
server_args.num_args = 1;
server_args.args = &server_arg;
- gpr_asprintf(&fullname, "%s/%s", __FUNCTION__, name);
+ gpr_asprintf(&fullname, "%s/%s", "test_invoke_request_with_census", name);
f = begin_test(config, fullname, &client_args, &server_args);
body(f);
end_test(&f);
diff --git a/test/core/end2end/tests/disappearing_server.c b/test/core/end2end/tests/disappearing_server.c
index 89fff81dba..60e7d227b9 100644
--- a/test/core/end2end/tests/disappearing_server.c
+++ b/test/core/end2end/tests/disappearing_server.c
@@ -180,7 +180,7 @@ static void disappearing_server_test(grpc_end2end_test_config config) {
cq_verifier *v_client = cq_verifier_create(f.client_cq);
cq_verifier *v_server = cq_verifier_create(f.server_cq);
- gpr_log(GPR_INFO, "%s/%s", __FUNCTION__, config.name);
+ gpr_log(GPR_INFO, "%s/%s", "disappearing_server_test", config.name);
config.init_client(&f, NULL);
config.init_server(&f, NULL);
diff --git a/test/core/end2end/tests/early_server_shutdown_finishes_inflight_calls.c b/test/core/end2end/tests/early_server_shutdown_finishes_inflight_calls.c
index 42280a6046..a44823033d 100644
--- a/test/core/end2end/tests/early_server_shutdown_finishes_inflight_calls.c
+++ b/test/core/end2end/tests/early_server_shutdown_finishes_inflight_calls.c
@@ -102,7 +102,7 @@ static void test_early_server_shutdown_finishes_inflight_calls(
grpc_call *c;
grpc_call *s;
gpr_timespec deadline = five_seconds_time();
- grpc_end2end_test_fixture f = begin_test(config, __FUNCTION__, NULL, NULL);
+ grpc_end2end_test_fixture f = begin_test(config, "test_early_server_shutdown_finishes_inflight_calls", NULL, NULL);
cq_verifier *v_client = cq_verifier_create(f.client_cq);
cq_verifier *v_server = cq_verifier_create(f.server_cq);
grpc_op ops[6];
diff --git a/test/core/end2end/tests/early_server_shutdown_finishes_tags.c b/test/core/end2end/tests/early_server_shutdown_finishes_tags.c
index 857fbb3c88..a8eb2144bb 100644
--- a/test/core/end2end/tests/early_server_shutdown_finishes_tags.c
+++ b/test/core/end2end/tests/early_server_shutdown_finishes_tags.c
@@ -99,7 +99,7 @@ static void end_test(grpc_end2end_test_fixture *f) {
static void test_early_server_shutdown_finishes_tags(
grpc_end2end_test_config config) {
- grpc_end2end_test_fixture f = begin_test(config, __FUNCTION__, NULL, NULL);
+ grpc_end2end_test_fixture f = begin_test(config, "test_early_server_shutdown_finishes_tags", NULL, NULL);
cq_verifier *v_server = cq_verifier_create(f.server_cq);
grpc_call *s = (void *)1;
grpc_call_details call_details;
diff --git a/test/core/end2end/tests/empty_batch.c b/test/core/end2end/tests/empty_batch.c
index a57f921efb..d1e5527e9e 100644
--- a/test/core/end2end/tests/empty_batch.c
+++ b/test/core/end2end/tests/empty_batch.c
@@ -121,7 +121,7 @@ static void empty_batch_body(grpc_end2end_test_fixture f) {
static void test_invoke_empty_body(grpc_end2end_test_config config) {
grpc_end2end_test_fixture f;
- f = begin_test(config, __FUNCTION__, NULL, NULL);
+ f = begin_test(config, "test_invoke_empty_body", NULL, NULL);
empty_batch_body(f);
end_test(&f);
config.tear_down_data(&f);
diff --git a/test/core/end2end/tests/graceful_server_shutdown.c b/test/core/end2end/tests/graceful_server_shutdown.c
index 9c44f6e127..d7b9fde3a6 100644
--- a/test/core/end2end/tests/graceful_server_shutdown.c
+++ b/test/core/end2end/tests/graceful_server_shutdown.c
@@ -101,7 +101,7 @@ static void test_early_server_shutdown_finishes_inflight_calls(
grpc_call *c;
grpc_call *s;
gpr_timespec deadline = five_seconds_time();
- grpc_end2end_test_fixture f = begin_test(config, __FUNCTION__, NULL, NULL);
+ grpc_end2end_test_fixture f = begin_test(config, "test_early_server_shutdown_finishes_inflight_calls", NULL, NULL);
cq_verifier *v_client = cq_verifier_create(f.client_cq);
cq_verifier *v_server = cq_verifier_create(f.server_cq);
grpc_op ops[6];
diff --git a/test/core/end2end/tests/invoke_large_request.c b/test/core/end2end/tests/invoke_large_request.c
index f369e7805e..5552016efa 100644
--- a/test/core/end2end/tests/invoke_large_request.c
+++ b/test/core/end2end/tests/invoke_large_request.c
@@ -102,7 +102,7 @@ static gpr_slice large_slice(void) {
}
static void test_invoke_large_request(grpc_end2end_test_config config) {
- grpc_end2end_test_fixture f = begin_test(config, __FUNCTION__, NULL, NULL);
+ grpc_end2end_test_fixture f = begin_test(config, "test_invoke_large_request", NULL, NULL);
gpr_slice request_payload_slice = large_slice();
gpr_slice response_payload_slice = large_slice();
@@ -171,23 +171,30 @@ static void test_invoke_large_request(grpc_end2end_test_config config) {
op->op = GRPC_OP_SEND_INITIAL_METADATA;
op->data.send_initial_metadata.count = 0;
op++;
+ op->op = GRPC_OP_RECV_MESSAGE;
+ op->data.recv_message = &request_payload_recv;
+ op++;
+ GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(s, ops, op - ops, tag(102)));
+
+ cq_expect_completion(v_server, tag(102), 1);
+ cq_verify(v_server);
+
+ op = ops;
+ op->op = GRPC_OP_RECV_CLOSE_ON_SERVER;
+ op->data.recv_close_on_server.cancelled = &was_cancelled;
+ op++;
op->op = GRPC_OP_SEND_MESSAGE;
op->data.send_message = response_payload;
op++;
+ 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_UNIMPLEMENTED;
op->data.send_status_from_server.status_details = "xyz";
op++;
- op->op = GRPC_OP_RECV_MESSAGE;
- op->data.recv_message = &request_payload_recv;
- op++;
- op->op = GRPC_OP_RECV_CLOSE_ON_SERVER;
- op->data.recv_close_on_server.cancelled = &was_cancelled;
- op++;
- GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(s, ops, op - ops, tag(102)));
+ GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(s, ops, op - ops, tag(103)));
- cq_expect_completion(v_server, tag(102), 1);
+ cq_expect_completion(v_server, tag(103), 1);
cq_verify(v_server);
cq_expect_completion(v_client, tag(1), 1);
diff --git a/test/core/end2end/tests/max_concurrent_streams.c b/test/core/end2end/tests/max_concurrent_streams.c
index 59227d98ab..ef0af34c0d 100644
--- a/test/core/end2end/tests/max_concurrent_streams.c
+++ b/test/core/end2end/tests/max_concurrent_streams.c
@@ -222,7 +222,7 @@ static void test_max_concurrent_streams(grpc_end2end_test_config config) {
server_args.num_args = 1;
server_args.args = &server_arg;
- f = begin_test(config, __FUNCTION__, NULL, &server_args);
+ f = begin_test(config, "test_max_concurrent_streams", NULL, &server_args);
v_client = cq_verifier_create(f.client_cq);
v_server = cq_verifier_create(f.server_cq);
diff --git a/test/core/end2end/tests/max_message_length.c b/test/core/end2end/tests/max_message_length.c
index 99aeb9d049..532986e7d0 100644
--- a/test/core/end2end/tests/max_message_length.c
+++ b/test/core/end2end/tests/max_message_length.c
@@ -126,7 +126,7 @@ static void test_max_message_length(grpc_end2end_test_config config) {
server_args.num_args = 1;
server_args.args = &server_arg;
- f = begin_test(config, __FUNCTION__, NULL, &server_args);
+ f = begin_test(config, "test_max_message_length", NULL, &server_args);
v_client = cq_verifier_create(f.client_cq);
v_server = cq_verifier_create(f.server_cq);
@@ -178,8 +178,7 @@ static void test_max_message_length(grpc_end2end_test_config config) {
cq_expect_completion(v_client, tag(1), 1);
cq_verify(v_client);
- GPR_ASSERT(status == GRPC_STATUS_CANCELLED);
- GPR_ASSERT(0 == strcmp(details, "Cancelled"));
+ GPR_ASSERT(status != GRPC_STATUS_OK);
GPR_ASSERT(0 == strcmp(call_details.method, "/foo"));
GPR_ASSERT(0 == strcmp(call_details.host, "foo.test.google.fr:1234"));
GPR_ASSERT(was_cancelled == 1);
@@ -189,6 +188,7 @@ static void test_max_message_length(grpc_end2end_test_config config) {
grpc_metadata_array_destroy(&trailing_metadata_recv);
grpc_metadata_array_destroy(&request_metadata_recv);
grpc_call_details_destroy(&call_details);
+ grpc_byte_buffer_destroy(request_payload);
grpc_call_destroy(c);
grpc_call_destroy(s);
diff --git a/test/core/end2end/tests/no_op.c b/test/core/end2end/tests/no_op.c
index 000d2ffa2a..5b18efcbfd 100644
--- a/test/core/end2end/tests/no_op.c
+++ b/test/core/end2end/tests/no_op.c
@@ -96,7 +96,7 @@ static void end_test(grpc_end2end_test_fixture *f) {
}
static void test_no_op(grpc_end2end_test_config config) {
- grpc_end2end_test_fixture f = begin_test(config, __FUNCTION__, NULL, NULL);
+ grpc_end2end_test_fixture f = begin_test(config, "no-op", NULL, NULL);
end_test(&f);
config.tear_down_data(&f);
}
diff --git a/test/core/end2end/tests/ping_pong_streaming.c b/test/core/end2end/tests/ping_pong_streaming.c
index 2bd17924f3..cfd4e45703 100644
--- a/test/core/end2end/tests/ping_pong_streaming.c
+++ b/test/core/end2end/tests/ping_pong_streaming.c
@@ -100,7 +100,7 @@ static void end_test(grpc_end2end_test_fixture *f) {
/* Client pings and server pongs. Repeat messages rounds before finishing. */
static void test_pingpong_streaming(grpc_end2end_test_config config,
int messages) {
- grpc_end2end_test_fixture f = begin_test(config, __FUNCTION__, NULL, NULL);
+ grpc_end2end_test_fixture f = begin_test(config, "test_pingpong_streaming", NULL, NULL);
grpc_call *c;
grpc_call *s;
gpr_timespec deadline = five_seconds_time();
diff --git a/test/core/end2end/tests/registered_call.c b/test/core/end2end/tests/registered_call.c
index 54663c3690..2cf2ccec1a 100644
--- a/test/core/end2end/tests/registered_call.c
+++ b/test/core/end2end/tests/registered_call.c
@@ -188,7 +188,7 @@ static void simple_request_body(grpc_end2end_test_fixture f, void *rc) {
}
static void test_invoke_simple_request(grpc_end2end_test_config config) {
- grpc_end2end_test_fixture f = begin_test(config, __FUNCTION__, NULL, NULL);
+ grpc_end2end_test_fixture f = begin_test(config, "test_invoke_simple_request", NULL, NULL);
void *rc =
grpc_channel_register_call(f.client, "/foo", "foo.test.google.fr:1234");
@@ -199,7 +199,7 @@ static void test_invoke_simple_request(grpc_end2end_test_config config) {
static void test_invoke_10_simple_requests(grpc_end2end_test_config config) {
int i;
- grpc_end2end_test_fixture f = begin_test(config, __FUNCTION__, NULL, NULL);
+ grpc_end2end_test_fixture f = begin_test(config, "test_invoke_10_simple_requests", NULL, NULL);
void *rc =
grpc_channel_register_call(f.client, "/foo", "foo.test.google.fr:1234");
diff --git a/test/core/end2end/tests/request_response_with_binary_metadata_and_payload.c b/test/core/end2end/tests/request_response_with_binary_metadata_and_payload.c
index 709dc47b72..69eb68a2a1 100644
--- a/test/core/end2end/tests/request_response_with_binary_metadata_and_payload.c
+++ b/test/core/end2end/tests/request_response_with_binary_metadata_and_payload.c
@@ -127,7 +127,7 @@ static void test_request_response_with_metadata_and_payload(
"\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff",
16,
{{NULL, NULL, NULL}}}};
- grpc_end2end_test_fixture f = begin_test(config, __FUNCTION__, NULL, NULL);
+ grpc_end2end_test_fixture f = begin_test(config, "test_request_response_with_metadata_and_payload", NULL, NULL);
cq_verifier *v_client = cq_verifier_create(f.client_cq);
cq_verifier *v_server = cq_verifier_create(f.server_cq);
grpc_op ops[6];
@@ -188,6 +188,18 @@ static void test_request_response_with_metadata_and_payload(
op->data.send_initial_metadata.count = 2;
op->data.send_initial_metadata.metadata = meta_s;
op++;
+ op->op = GRPC_OP_RECV_MESSAGE;
+ op->data.recv_message = &request_payload_recv;
+ op++;
+ GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(s, ops, op - ops, tag(102)));
+
+ cq_expect_completion(v_server, tag(102), 1);
+ cq_verify(v_server);
+
+ op = ops;
+ op->op = GRPC_OP_RECV_CLOSE_ON_SERVER;
+ op->data.recv_close_on_server.cancelled = &was_cancelled;
+ op++;
op->op = GRPC_OP_SEND_MESSAGE;
op->data.send_message = response_payload;
op++;
@@ -196,15 +208,9 @@ static void test_request_response_with_metadata_and_payload(
op->data.send_status_from_server.status = GRPC_STATUS_OK;
op->data.send_status_from_server.status_details = "xyz";
op++;
- op->op = GRPC_OP_RECV_MESSAGE;
- op->data.recv_message = &request_payload_recv;
- op++;
- op->op = GRPC_OP_RECV_CLOSE_ON_SERVER;
- op->data.recv_close_on_server.cancelled = &was_cancelled;
- op++;
- GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(s, ops, op - ops, tag(102)));
+ GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(s, ops, op - ops, tag(103)));
- cq_expect_completion(v_server, tag(102), 1);
+ cq_expect_completion(v_server, tag(103), 1);
cq_verify(v_server);
cq_expect_completion(v_client, tag(1), 1);
diff --git a/test/core/end2end/tests/request_response_with_metadata_and_payload.c b/test/core/end2end/tests/request_response_with_metadata_and_payload.c
index bc32a503dd..fe15fa257d 100644
--- a/test/core/end2end/tests/request_response_with_metadata_and_payload.c
+++ b/test/core/end2end/tests/request_response_with_metadata_and_payload.c
@@ -113,7 +113,7 @@ static void test_request_response_with_metadata_and_payload(
{"key2", "val2", 4, {{NULL, NULL, NULL}}}};
grpc_metadata meta_s[2] = {{"key3", "val3", 4, {{NULL, NULL, NULL}}},
{"key4", "val4", 4, {{NULL, NULL, NULL}}}};
- grpc_end2end_test_fixture f = begin_test(config, __FUNCTION__, NULL, NULL);
+ grpc_end2end_test_fixture f = begin_test(config, "test_request_response_with_metadata_and_payload", NULL, NULL);
cq_verifier *v_client = cq_verifier_create(f.client_cq);
cq_verifier *v_server = cq_verifier_create(f.server_cq);
grpc_op ops[6];
@@ -174,6 +174,18 @@ static void test_request_response_with_metadata_and_payload(
op->data.send_initial_metadata.count = 2;
op->data.send_initial_metadata.metadata = meta_s;
op++;
+ op->op = GRPC_OP_RECV_MESSAGE;
+ op->data.recv_message = &request_payload_recv;
+ op++;
+ GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(s, ops, op - ops, tag(102)));
+
+ cq_expect_completion(v_server, tag(102), 1);
+ cq_verify(v_server);
+
+ op = ops;
+ op->op = GRPC_OP_RECV_CLOSE_ON_SERVER;
+ op->data.recv_close_on_server.cancelled = &was_cancelled;
+ op++;
op->op = GRPC_OP_SEND_MESSAGE;
op->data.send_message = response_payload;
op++;
@@ -182,15 +194,9 @@ static void test_request_response_with_metadata_and_payload(
op->data.send_status_from_server.status = GRPC_STATUS_OK;
op->data.send_status_from_server.status_details = "xyz";
op++;
- op->op = GRPC_OP_RECV_MESSAGE;
- op->data.recv_message = &request_payload_recv;
- op++;
- op->op = GRPC_OP_RECV_CLOSE_ON_SERVER;
- op->data.recv_close_on_server.cancelled = &was_cancelled;
- op++;
- GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(s, ops, op - ops, tag(102)));
+ GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(s, ops, op - ops, tag(103)));
- cq_expect_completion(v_server, tag(102), 1);
+ cq_expect_completion(v_server, tag(103), 1);
cq_verify(v_server);
cq_expect_completion(v_client, tag(1), 1);
diff --git a/test/core/end2end/tests/request_response_with_payload.c b/test/core/end2end/tests/request_response_with_payload.c
index be0cca696b..f0122ea95d 100644
--- a/test/core/end2end/tests/request_response_with_payload.c
+++ b/test/core/end2end/tests/request_response_with_payload.c
@@ -165,6 +165,18 @@ static void request_response_with_payload(grpc_end2end_test_fixture f) {
op->op = GRPC_OP_SEND_INITIAL_METADATA;
op->data.send_initial_metadata.count = 0;
op++;
+ op->op = GRPC_OP_RECV_MESSAGE;
+ op->data.recv_message = &request_payload_recv;
+ op++;
+ GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(s, ops, op - ops, tag(102)));
+
+ cq_expect_completion(v_server, tag(102), 1);
+ cq_verify(v_server);
+
+ op = ops;
+ op->op = GRPC_OP_RECV_CLOSE_ON_SERVER;
+ op->data.recv_close_on_server.cancelled = &was_cancelled;
+ op++;
op->op = GRPC_OP_SEND_MESSAGE;
op->data.send_message = response_payload;
op++;
@@ -173,15 +185,9 @@ static void request_response_with_payload(grpc_end2end_test_fixture f) {
op->data.send_status_from_server.status = GRPC_STATUS_OK;
op->data.send_status_from_server.status_details = "xyz";
op++;
- op->op = GRPC_OP_RECV_MESSAGE;
- op->data.recv_message = &request_payload_recv;
- op++;
- op->op = GRPC_OP_RECV_CLOSE_ON_SERVER;
- op->data.recv_close_on_server.cancelled = &was_cancelled;
- op++;
- GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(s, ops, op - ops, tag(102)));
+ GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(s, ops, op - ops, tag(103)));
- cq_expect_completion(v_server, tag(102), 1);
+ cq_expect_completion(v_server, tag(103), 1);
cq_verify(v_server);
cq_expect_completion(v_client, tag(1), 1);
@@ -217,7 +223,7 @@ static void request_response_with_payload(grpc_end2end_test_fixture f) {
payload and status. */
static void test_invoke_request_response_with_payload(
grpc_end2end_test_config config) {
- grpc_end2end_test_fixture f = begin_test(config, __FUNCTION__, NULL, NULL);
+ grpc_end2end_test_fixture f = begin_test(config, "test_invoke_request_response_with_payload", NULL, NULL);
request_response_with_payload(f);
end_test(&f);
config.tear_down_data(&f);
@@ -226,7 +232,7 @@ static void test_invoke_request_response_with_payload(
static void test_invoke_10_request_response_with_payload(
grpc_end2end_test_config config) {
int i;
- grpc_end2end_test_fixture f = begin_test(config, __FUNCTION__, NULL, NULL);
+ grpc_end2end_test_fixture f = begin_test(config, "test_invoke_10_request_response_with_payload", NULL, NULL);
for (i = 0; i < 10; i++) {
request_response_with_payload(f);
}
diff --git a/test/core/end2end/tests/request_response_with_payload_and_call_creds.c b/test/core/end2end/tests/request_response_with_payload_and_call_creds.c
index 01554bed8c..08443f19a5 100644
--- a/test/core/end2end/tests/request_response_with_payload_and_call_creds.c
+++ b/test/core/end2end/tests/request_response_with_payload_and_call_creds.c
@@ -111,10 +111,27 @@ static void end_test(grpc_end2end_test_fixture *f) {
grpc_completion_queue_destroy(f->client_cq);
}
+static void print_auth_context(int is_client, const grpc_auth_context *ctx) {
+ const grpc_auth_property *p;
+ grpc_auth_property_iterator it;
+ gpr_log(GPR_INFO, "%s peer:", is_client ? "client" : "server");
+ gpr_log(GPR_INFO, "\tauthenticated: %s",
+ grpc_auth_context_peer_is_authenticated(ctx) ? "YES" : "NO");
+ it = grpc_auth_context_peer_identity(ctx);
+ while ((p = grpc_auth_property_iterator_next(&it)) != NULL) {
+ gpr_log(GPR_INFO, "\t\t%s: %s", p->name, p->value);
+ }
+ gpr_log(GPR_INFO, "\tall properties:");
+ it = grpc_auth_context_property_iterator(ctx);
+ while ((p = grpc_auth_property_iterator_next(&it)) != NULL) {
+ gpr_log(GPR_INFO, "\t\t%s: %s", p->name, p->value);
+ }
+}
+
static void test_call_creds_failure(grpc_end2end_test_config config) {
grpc_call *c;
grpc_credentials *creds = NULL;
- grpc_end2end_test_fixture f = begin_test(config, __FUNCTION__, NULL, NULL);
+ grpc_end2end_test_fixture f = begin_test(config, "test_call_creds_failure", NULL, NULL);
gpr_timespec deadline = five_seconds_time();
c = grpc_channel_create_call(f.client, f.client_cq, "/foo",
"foo.test.google.fr", deadline);
@@ -125,6 +142,8 @@ static void test_call_creds_failure(grpc_end2end_test_config config) {
GPR_ASSERT(grpc_call_set_credentials(c, creds) != GRPC_CALL_OK);
grpc_credentials_release(creds);
+ grpc_call_destroy(c);
+
end_test(&f);
config.tear_down_data(&f);
}
@@ -158,6 +177,7 @@ static void request_response_with_payload_and_call_creds(
size_t details_capacity = 0;
int was_cancelled = 2;
grpc_credentials *creds = NULL;
+ const grpc_auth_context *s_auth_context = NULL;
c = grpc_channel_create_call(f.client, f.client_cq, "/foo",
"foo.test.google.fr", deadline);
@@ -212,10 +232,13 @@ static void request_response_with_payload_and_call_creds(
GPR_ASSERT(GRPC_CALL_OK == grpc_server_request_call(f.server, &s,
&call_details,
&request_metadata_recv,
- f.server_cq, f.server_cq,
+ f.server_cq, f.server_cq,
tag(101)));
cq_expect_completion(v_server, tag(101), 1);
cq_verify(v_server);
+ s_auth_context = grpc_call_auth_context(s);
+ GPR_ASSERT(s_auth_context != NULL);
+ print_auth_context(0, s_auth_context);
/* Cannot set creds on the server call object. */
GPR_ASSERT(grpc_call_set_credentials(s, NULL) != GRPC_CALL_OK);
@@ -224,6 +247,18 @@ static void request_response_with_payload_and_call_creds(
op->op = GRPC_OP_SEND_INITIAL_METADATA;
op->data.send_initial_metadata.count = 0;
op++;
+ op->op = GRPC_OP_RECV_MESSAGE;
+ op->data.recv_message = &request_payload_recv;
+ op++;
+ GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(s, ops, op - ops, tag(102)));
+
+ cq_expect_completion(v_server, tag(102), 1);
+ cq_verify(v_server);
+
+ op = ops;
+ op->op = GRPC_OP_RECV_CLOSE_ON_SERVER;
+ op->data.recv_close_on_server.cancelled = &was_cancelled;
+ op++;
op->op = GRPC_OP_SEND_MESSAGE;
op->data.send_message = response_payload;
op++;
@@ -232,15 +267,9 @@ static void request_response_with_payload_and_call_creds(
op->data.send_status_from_server.status = GRPC_STATUS_OK;
op->data.send_status_from_server.status_details = "xyz";
op++;
- op->op = GRPC_OP_RECV_MESSAGE;
- op->data.recv_message = &request_payload_recv;
- op++;
- op->op = GRPC_OP_RECV_CLOSE_ON_SERVER;
- op->data.recv_close_on_server.cancelled = &was_cancelled;
- op++;
- GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(s, ops, op - ops, tag(102)));
+ GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(s, ops, op - ops, tag(103)));
- cq_expect_completion(v_server, tag(102), 1);
+ cq_expect_completion(v_server, tag(103), 1);
cq_verify(v_server);
cq_expect_completion(v_client, tag(1), 1);
@@ -310,17 +339,17 @@ static void request_response_with_payload_and_call_creds(
void test_request_response_with_payload_and_call_creds(
grpc_end2end_test_config config) {
- request_response_with_payload_and_call_creds(__FUNCTION__, config, NONE);
+ request_response_with_payload_and_call_creds("test_request_response_with_payload_and_call_creds", config, NONE);
}
void test_request_response_with_payload_and_overridden_call_creds(
grpc_end2end_test_config config) {
- request_response_with_payload_and_call_creds(__FUNCTION__, config, OVERRIDE);
+ request_response_with_payload_and_call_creds("test_request_response_with_payload_and_overridden_call_creds", config, OVERRIDE);
}
void test_request_response_with_payload_and_deleted_call_creds(
grpc_end2end_test_config config) {
- request_response_with_payload_and_call_creds(__FUNCTION__, config, DESTROY);
+ request_response_with_payload_and_call_creds("test_request_response_with_payload_and_deleted_call_creds", config, DESTROY);
}
void grpc_end2end_tests(grpc_end2end_test_config config) {
diff --git a/test/core/end2end/tests/request_response_with_trailing_metadata_and_payload.c b/test/core/end2end/tests/request_response_with_trailing_metadata_and_payload.c
index 12f289cfdd..2f221f43d5 100644
--- a/test/core/end2end/tests/request_response_with_trailing_metadata_and_payload.c
+++ b/test/core/end2end/tests/request_response_with_trailing_metadata_and_payload.c
@@ -112,7 +112,7 @@ static void test_request_response_with_metadata_and_payload(
grpc_metadata meta_c[2] = {{"key1", "val1", 4, {{NULL, NULL, NULL}}}, {"key2", "val2", 4, {{NULL, NULL, NULL}}}};
grpc_metadata meta_s[2] = {{"key3", "val3", 4, {{NULL, NULL, NULL}}}, {"key4", "val4", 4, {{NULL, NULL, NULL}}}};
grpc_metadata meta_t[2] = {{"key5", "val5", 4, {{NULL, NULL, NULL}}}, {"key6", "val6", 4, {{NULL, NULL, NULL}}}};
- grpc_end2end_test_fixture f = begin_test(config, __FUNCTION__, NULL, NULL);
+ grpc_end2end_test_fixture f = begin_test(config, "test_request_response_with_metadata_and_payload", NULL, NULL);
cq_verifier *v_client = cq_verifier_create(f.client_cq);
cq_verifier *v_server = cq_verifier_create(f.server_cq);
grpc_op ops[6];
@@ -174,6 +174,18 @@ static void test_request_response_with_metadata_and_payload(
op->data.send_initial_metadata.count = 2;
op->data.send_initial_metadata.metadata = meta_s;
op++;
+ op->op = GRPC_OP_RECV_MESSAGE;
+ op->data.recv_message = &request_payload_recv;
+ op++;
+ GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(s, ops, op - ops, tag(102)));
+
+ cq_expect_completion(v_server, tag(102), 1);
+ cq_verify(v_server);
+
+ op = ops;
+ op->op = GRPC_OP_RECV_CLOSE_ON_SERVER;
+ op->data.recv_close_on_server.cancelled = &was_cancelled;
+ op++;
op->op = GRPC_OP_SEND_MESSAGE;
op->data.send_message = response_payload;
op++;
@@ -183,15 +195,9 @@ static void test_request_response_with_metadata_and_payload(
op->data.send_status_from_server.status = GRPC_STATUS_OK;
op->data.send_status_from_server.status_details = "xyz";
op++;
- op->op = GRPC_OP_RECV_MESSAGE;
- op->data.recv_message = &request_payload_recv;
- op++;
- op->op = GRPC_OP_RECV_CLOSE_ON_SERVER;
- op->data.recv_close_on_server.cancelled = &was_cancelled;
- op++;
- GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(s, ops, op - ops, tag(102)));
+ GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(s, ops, op - ops, tag(103)));
- cq_expect_completion(v_server, tag(102), 1);
+ cq_expect_completion(v_server, tag(103), 1);
cq_verify(v_server);
cq_expect_completion(v_client, tag(1), 1);
diff --git a/test/core/end2end/tests/request_with_large_metadata.c b/test/core/end2end/tests/request_with_large_metadata.c
index 08a16213a1..b89ccb76f0 100644
--- a/test/core/end2end/tests/request_with_large_metadata.c
+++ b/test/core/end2end/tests/request_with_large_metadata.c
@@ -106,7 +106,7 @@ static void test_request_with_large_metadata(grpc_end2end_test_config config) {
grpc_byte_buffer_create(&request_payload_slice, 1);
gpr_timespec deadline = five_seconds_time();
grpc_metadata meta;
- grpc_end2end_test_fixture f = begin_test(config, __FUNCTION__, NULL, NULL);
+ grpc_end2end_test_fixture f = begin_test(config, "test_request_with_large_metadata", NULL, NULL);
cq_verifier *v_client = cq_verifier_create(f.client_cq);
cq_verifier *v_server = cq_verifier_create(f.server_cq);
grpc_op ops[6];
@@ -169,20 +169,26 @@ static void test_request_with_large_metadata(grpc_end2end_test_config config) {
op->op = GRPC_OP_SEND_INITIAL_METADATA;
op->data.send_initial_metadata.count = 0;
op++;
- 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;
- op->data.send_status_from_server.status_details = "xyz";
- op++;
op->op = GRPC_OP_RECV_MESSAGE;
op->data.recv_message = &request_payload_recv;
op++;
+ GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(s, ops, op - ops, tag(102)));
+
+ cq_expect_completion(v_server, tag(102), 1);
+ cq_verify(v_server);
+
+ op = ops;
op->op = GRPC_OP_RECV_CLOSE_ON_SERVER;
op->data.recv_close_on_server.cancelled = &was_cancelled;
op++;
- GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(s, ops, op - ops, tag(102)));
+ 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;
+ op->data.send_status_from_server.status_details = "xyz";
+ op++;
+ GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(s, ops, op - ops, tag(103)));
- cq_expect_completion(v_server, tag(102), 1);
+ cq_expect_completion(v_server, tag(103), 1);
cq_verify(v_server);
cq_expect_completion(v_client, tag(1), 1);
diff --git a/test/core/end2end/tests/request_with_payload.c b/test/core/end2end/tests/request_with_payload.c
index bba50b3113..9f6f2a9b22 100644
--- a/test/core/end2end/tests/request_with_payload.c
+++ b/test/core/end2end/tests/request_with_payload.c
@@ -105,7 +105,7 @@ static void test_invoke_request_with_payload(grpc_end2end_test_config config) {
grpc_byte_buffer *request_payload =
grpc_byte_buffer_create(&request_payload_slice, 1);
gpr_timespec deadline = five_seconds_time();
- grpc_end2end_test_fixture f = begin_test(config, __FUNCTION__, NULL, NULL);
+ grpc_end2end_test_fixture f = begin_test(config, "test_invoke_request_with_payload", NULL, NULL);
cq_verifier *v_client = cq_verifier_create(f.client_cq);
cq_verifier *v_server = cq_verifier_create(f.server_cq);
grpc_op ops[6];
@@ -160,20 +160,26 @@ static void test_invoke_request_with_payload(grpc_end2end_test_config config) {
op->op = GRPC_OP_SEND_INITIAL_METADATA;
op->data.send_initial_metadata.count = 0;
op++;
- 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;
- op->data.send_status_from_server.status_details = "xyz";
- op++;
op->op = GRPC_OP_RECV_MESSAGE;
op->data.recv_message = &request_payload_recv;
op++;
+ GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(s, ops, op - ops, tag(102)));
+
+ cq_expect_completion(v_server, tag(102), 1);
+ cq_verify(v_server);
+
+ op = ops;
op->op = GRPC_OP_RECV_CLOSE_ON_SERVER;
op->data.recv_close_on_server.cancelled = &was_cancelled;
op++;
- GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(s, ops, op - ops, tag(102)));
+ 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;
+ op->data.send_status_from_server.status_details = "xyz";
+ op++;
+ GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(s, ops, op - ops, tag(103)));
- cq_expect_completion(v_server, tag(102), 1);
+ cq_expect_completion(v_server, tag(103), 1);
cq_verify(v_server);
cq_expect_completion(v_client, tag(1), 1);
diff --git a/test/core/end2end/tests/server_finishes_request.c b/test/core/end2end/tests/server_finishes_request.c
new file mode 100644
index 0000000000..a0c1865290
--- /dev/null
+++ b/test/core/end2end/tests/server_finishes_request.c
@@ -0,0 +1,200 @@
+/*
+ *
+ * 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 "src/core/support/string.h"
+#include <grpc/byte_buffer.h>
+#include <grpc/grpc.h>
+#include <grpc/support/alloc.h>
+#include <grpc/support/log.h>
+#include <grpc/support/time.h>
+#include <grpc/support/useful.h>
+#include "test/core/end2end/cq_verifier.h"
+
+enum { TIMEOUT = 200000 };
+
+static void *tag(gpr_intptr t) { return (void *)t; }
+
+static grpc_end2end_test_fixture begin_test(grpc_end2end_test_config config,
+ const char *test_name,
+ grpc_channel_args *client_args,
+ grpc_channel_args *server_args) {
+ grpc_end2end_test_fixture f;
+ gpr_log(GPR_INFO, "%s/%s", test_name, config.name);
+ f = config.create_fixture(client_args, server_args);
+ config.init_client(&f, client_args);
+ config.init_server(&f, server_args);
+ return f;
+}
+
+static gpr_timespec n_seconds_time(int n) {
+ return GRPC_TIMEOUT_SECONDS_TO_DEADLINE(n);
+}
+
+static gpr_timespec five_seconds_time(void) { return n_seconds_time(5); }
+
+static void drain_cq(grpc_completion_queue *cq) {
+ grpc_event ev;
+ do {
+ ev = grpc_completion_queue_next(cq, five_seconds_time());
+ } while (ev.type != GRPC_QUEUE_SHUTDOWN);
+}
+
+static void shutdown_server(grpc_end2end_test_fixture *f) {
+ if (!f->server) return;
+ grpc_server_shutdown(f->server);
+ grpc_server_destroy(f->server);
+ f->server = NULL;
+}
+
+static void shutdown_client(grpc_end2end_test_fixture *f) {
+ if (!f->client) return;
+ grpc_channel_destroy(f->client);
+ f->client = NULL;
+}
+
+static void end_test(grpc_end2end_test_fixture *f) {
+ shutdown_server(f);
+ shutdown_client(f);
+
+ grpc_completion_queue_shutdown(f->server_cq);
+ drain_cq(f->server_cq);
+ grpc_completion_queue_destroy(f->server_cq);
+ grpc_completion_queue_shutdown(f->client_cq);
+ drain_cq(f->client_cq);
+ grpc_completion_queue_destroy(f->client_cq);
+}
+
+static void simple_request_body(grpc_end2end_test_fixture f) {
+ grpc_call *c;
+ grpc_call *s;
+ gpr_timespec deadline = five_seconds_time();
+ cq_verifier *v_client = cq_verifier_create(f.client_cq);
+ cq_verifier *v_server = cq_verifier_create(f.server_cq);
+ 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_call_details call_details;
+ grpc_status_code status;
+ char *details = NULL;
+ size_t details_capacity = 0;
+ int was_cancelled = 2;
+
+ c = grpc_channel_create_call(f.client, f.client_cq, "/foo",
+ "foo.test.google.fr:1234", deadline);
+ 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);
+
+ op = ops;
+ op->op = GRPC_OP_SEND_INITIAL_METADATA;
+ op->data.send_initial_metadata.count = 0;
+ op++;
+ op->op = GRPC_OP_RECV_INITIAL_METADATA;
+ op->data.recv_initial_metadata = &initial_metadata_recv;
+ 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->data.recv_status_on_client.status_details_capacity = &details_capacity;
+ op++;
+ GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(c, ops, op - ops, tag(1)));
+
+ GPR_ASSERT(GRPC_CALL_OK ==
+ grpc_server_request_call(f.server, &s, &call_details,
+ &request_metadata_recv, f.server_cq,
+ f.server_cq, tag(101)));
+ cq_expect_completion(v_server, tag(101), 1);
+ cq_verify(v_server);
+
+ op = ops;
+ op->op = GRPC_OP_SEND_INITIAL_METADATA;
+ op->data.send_initial_metadata.count = 0;
+ op++;
+ 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_UNIMPLEMENTED;
+ op->data.send_status_from_server.status_details = "xyz";
+ op++;
+ op->op = GRPC_OP_RECV_CLOSE_ON_SERVER;
+ op->data.recv_close_on_server.cancelled = &was_cancelled;
+ op++;
+ GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(s, ops, op - ops, tag(102)));
+
+ cq_expect_completion(v_server, tag(102), 1);
+ cq_verify(v_server);
+
+ cq_expect_completion(v_client, tag(1), 1);
+ cq_verify(v_client);
+
+ GPR_ASSERT(status == GRPC_STATUS_UNIMPLEMENTED);
+ GPR_ASSERT(0 == strcmp(details, "xyz"));
+ GPR_ASSERT(0 == strcmp(call_details.method, "/foo"));
+ GPR_ASSERT(0 == strcmp(call_details.host, "foo.test.google.fr:1234"));
+ GPR_ASSERT(was_cancelled == 0);
+
+ gpr_free(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_destroy(c);
+ grpc_call_destroy(s);
+
+ cq_verifier_destroy(v_client);
+ cq_verifier_destroy(v_server);
+}
+
+static void test_invoke_simple_request(grpc_end2end_test_config config) {
+ grpc_end2end_test_fixture f;
+
+ f = begin_test(config, "test_invoke_simple_request", NULL, NULL);
+ simple_request_body(f);
+ end_test(&f);
+ config.tear_down_data(&f);
+}
+
+void grpc_end2end_tests(grpc_end2end_test_config config) {
+ test_invoke_simple_request(config);
+}
diff --git a/test/core/end2end/tests/simple_delayed_request.c b/test/core/end2end/tests/simple_delayed_request.c
index d8463d4c6c..59cc9b5488 100644
--- a/test/core/end2end/tests/simple_delayed_request.c
+++ b/test/core/end2end/tests/simple_delayed_request.c
@@ -185,7 +185,7 @@ static void simple_delayed_request_body(grpc_end2end_test_config config,
static void test_simple_delayed_request_short(grpc_end2end_test_config config) {
grpc_end2end_test_fixture f;
- gpr_log(GPR_INFO, "%s/%s", __FUNCTION__, config.name);
+ gpr_log(GPR_INFO, "%s/%s", "test_simple_delayed_request_short", config.name);
f = config.create_fixture(NULL, NULL);
simple_delayed_request_body(config, &f, NULL, NULL, 100000);
end_test(&f);
@@ -195,7 +195,7 @@ static void test_simple_delayed_request_short(grpc_end2end_test_config config) {
static void test_simple_delayed_request_long(grpc_end2end_test_config config) {
grpc_end2end_test_fixture f;
- gpr_log(GPR_INFO, "%s/%s", __FUNCTION__, config.name);
+ gpr_log(GPR_INFO, "%s/%s", "test_simple_delayed_request_long", config.name);
f = config.create_fixture(NULL, NULL);
/* This timeout should be longer than a single retry */
simple_delayed_request_body(config, &f, NULL, NULL, 1500000);
diff --git a/test/core/end2end/tests/simple_request.c b/test/core/end2end/tests/simple_request.c
index 98e677900e..80c092cd35 100644
--- a/test/core/end2end/tests/simple_request.c
+++ b/test/core/end2end/tests/simple_request.c
@@ -191,7 +191,7 @@ static void simple_request_body(grpc_end2end_test_fixture f) {
static void test_invoke_simple_request(grpc_end2end_test_config config) {
grpc_end2end_test_fixture f;
- f = begin_test(config, __FUNCTION__, NULL, NULL);
+ f = begin_test(config, "test_invoke_simple_request", NULL, NULL);
simple_request_body(f);
end_test(&f);
config.tear_down_data(&f);
@@ -199,7 +199,7 @@ static void test_invoke_simple_request(grpc_end2end_test_config config) {
static void test_invoke_10_simple_requests(grpc_end2end_test_config config) {
int i;
- grpc_end2end_test_fixture f = begin_test(config, __FUNCTION__, NULL, NULL);
+ grpc_end2end_test_fixture f = begin_test(config, "test_invoke_10_simple_requests", NULL, NULL);
for (i = 0; i < 10; i++) {
simple_request_body(f);
gpr_log(GPR_INFO, "Passed simple request %d", i);
diff --git a/test/core/end2end/tests/simple_request_with_high_initial_sequence_number.c b/test/core/end2end/tests/simple_request_with_high_initial_sequence_number.c
index 3c1a19a5dd..67e0730f5e 100644
--- a/test/core/end2end/tests/simple_request_with_high_initial_sequence_number.c
+++ b/test/core/end2end/tests/simple_request_with_high_initial_sequence_number.c
@@ -201,7 +201,7 @@ static void test_invoke_10_simple_requests(grpc_end2end_test_config config, int
client_args.num_args = 1;
client_args.args = &client_arg;
- f = begin_test(config, __FUNCTION__, &client_args, NULL);
+ f = begin_test(config, "test_invoke_10_simple_requests", &client_args, NULL);
for (i = 0; i < 10; i++) {
simple_request_body(f);
gpr_log(GPR_INFO, "Passed simple request %d", i);
diff --git a/test/core/fling/fling_test.c b/test/core/fling/fling_test.c
index 7c1643df6a..6b07f83d5b 100644
--- a/test/core/fling/fling_test.c
+++ b/test/core/fling/fling_test.c
@@ -60,7 +60,7 @@ int main(int argc, char **argv) {
args[1] = "--bind";
gpr_join_host_port(&args[2], "::", port);
args[3] = "--no-secure";
- svr = gpr_subprocess_create(4, args);
+ svr = gpr_subprocess_create(4, (const char**)args);
gpr_free(args[0]);
gpr_free(args[2]);
@@ -71,7 +71,7 @@ int main(int argc, char **argv) {
args[3] = "--scenario=ping-pong-request";
args[4] = "--no-secure";
args[5] = 0;
- cli = gpr_subprocess_create(6, args);
+ cli = gpr_subprocess_create(6, (const char**)args);
gpr_free(args[0]);
gpr_free(args[2]);
diff --git a/test/core/httpcli/httpcli_test.c b/test/core/httpcli/httpcli_test.c
index 17a2996baa..fb2dbc00ce 100644
--- a/test/core/httpcli/httpcli_test.c
+++ b/test/core/httpcli/httpcli_test.c
@@ -56,7 +56,7 @@ static void on_finish(void *arg, const grpc_httpcli_response *response) {
static void test_get(int use_ssl) {
grpc_httpcli_request req;
- gpr_log(GPR_INFO, "running %s with use_ssl=%d.", __FUNCTION__, use_ssl);
+ gpr_log(GPR_INFO, "running %s with use_ssl=%d.", "test_get", use_ssl);
gpr_event_init(&g_done);
memset(&req, 0, sizeof(req));
@@ -72,7 +72,7 @@ static void test_get(int use_ssl) {
static void test_post(int use_ssl) {
grpc_httpcli_request req;
- gpr_log(GPR_INFO, "running %s with use_ssl=%d.", __FUNCTION__, (int)use_ssl);
+ gpr_log(GPR_INFO, "running %s with use_ssl=%d.", "test_post", (int)use_ssl);
gpr_event_init(&g_done);
memset(&req, 0, sizeof(req));
diff --git a/test/core/iomgr/endpoint_tests.c b/test/core/iomgr/endpoint_tests.c
index e63048e26c..f9c5282f19 100644
--- a/test/core/iomgr/endpoint_tests.c
+++ b/test/core/iomgr/endpoint_tests.c
@@ -160,7 +160,7 @@ static void read_and_write_test_write_handler(void *data,
GPR_ASSERT(error != GRPC_ENDPOINT_CB_ERROR);
- gpr_log(GPR_DEBUG, "%s: error=%d", __FUNCTION__, error);
+ gpr_log(GPR_DEBUG, "%s: error=%d", "read_and_write_test_write_handler", error);
if (error == GRPC_ENDPOINT_CB_SHUTDOWN) {
gpr_log(GPR_INFO, "Write handler shutdown");
@@ -213,7 +213,7 @@ static void read_and_write_test(grpc_endpoint_test_config config,
size_t slice_size, int shutdown) {
struct read_and_write_test_state state;
gpr_timespec deadline = GRPC_TIMEOUT_SECONDS_TO_DEADLINE(20);
- grpc_endpoint_test_fixture f = begin_test(config, __FUNCTION__, slice_size);
+ grpc_endpoint_test_fixture f = begin_test(config, "read_and_write_test", slice_size);
if (shutdown) {
gpr_log(GPR_INFO, "Start read and write shutdown test");
@@ -323,7 +323,7 @@ static void shutdown_during_write_test(grpc_endpoint_test_config config,
shutdown_during_write_test_state read_st;
shutdown_during_write_test_state write_st;
gpr_slice *slices;
- grpc_endpoint_test_fixture f = begin_test(config, __FUNCTION__, slice_size);
+ grpc_endpoint_test_fixture f = begin_test(config, "shutdown_during_write_test", slice_size);
gpr_log(GPR_INFO, "testing shutdown during a write");
diff --git a/test/core/iomgr/sockaddr_utils_test.c b/test/core/iomgr/sockaddr_utils_test.c
index 9212f01c3f..dfab340959 100644
--- a/test/core/iomgr/sockaddr_utils_test.c
+++ b/test/core/iomgr/sockaddr_utils_test.c
@@ -75,7 +75,7 @@ static void test_sockaddr_is_v4mapped(void) {
struct sockaddr_in output4;
struct sockaddr_in expect4;
- gpr_log(GPR_INFO, "%s", __FUNCTION__);
+ gpr_log(GPR_INFO, "%s", "test_sockaddr_is_v4mapped");
/* v4mapped input should succeed. */
input6 = make_addr6(kMapped, sizeof(kMapped));
@@ -106,7 +106,7 @@ static void test_sockaddr_to_v4mapped(void) {
struct sockaddr_in6 output6;
struct sockaddr_in6 expect6;
- gpr_log(GPR_INFO, "%s", __FUNCTION__);
+ gpr_log(GPR_INFO, "%s", "test_sockaddr_to_v4mapped");
/* IPv4 input should succeed. */
input4 = make_addr4(kIPv4, sizeof(kIPv4));
@@ -135,7 +135,7 @@ static void test_sockaddr_is_wildcard(void) {
struct sockaddr dummy;
int port;
- gpr_log(GPR_INFO, "%s", __FUNCTION__);
+ gpr_log(GPR_INFO, "%s", "test_sockaddr_is_wildcard");
/* Generate wildcards. */
grpc_sockaddr_make_wildcards(555, &wild4, &wild6);
@@ -192,7 +192,7 @@ static void test_sockaddr_to_string(void) {
struct sockaddr_in6 input6;
struct sockaddr dummy;
- gpr_log(GPR_INFO, "%s", __FUNCTION__);
+ gpr_log(GPR_INFO, "%s", "test_sockaddr_to_string");
errno = 0x7EADBEEF;
diff --git a/test/core/iomgr/tcp_server_posix_test.c b/test/core/iomgr/tcp_server_posix_test.c
index 1c02c4b2f8..328b19f68a 100644
--- a/test/core/iomgr/tcp_server_posix_test.c
+++ b/test/core/iomgr/tcp_server_posix_test.c
@@ -43,7 +43,7 @@
#include <string.h>
#include <unistd.h>
-#define LOG_TEST() gpr_log(GPR_INFO, "%s", __FUNCTION__)
+#define LOG_TEST(x) gpr_log(GPR_INFO, "%s", #x)
static gpr_mu mu;
static gpr_cv cv;
@@ -66,7 +66,7 @@ static void test_no_op(void) {
static void test_no_op_with_start(void) {
grpc_tcp_server *s = grpc_tcp_server_create();
- LOG_TEST();
+ LOG_TEST("test_no_op_with_start");
grpc_tcp_server_start(s, NULL, 0, on_connect, NULL);
grpc_tcp_server_destroy(s, NULL, NULL);
}
@@ -74,7 +74,7 @@ static void test_no_op_with_start(void) {
static void test_no_op_with_port(void) {
struct sockaddr_in addr;
grpc_tcp_server *s = grpc_tcp_server_create();
- LOG_TEST();
+ LOG_TEST("test_no_op_with_port");
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
@@ -87,7 +87,7 @@ static void test_no_op_with_port(void) {
static void test_no_op_with_port_and_start(void) {
struct sockaddr_in addr;
grpc_tcp_server *s = grpc_tcp_server_create();
- LOG_TEST();
+ LOG_TEST("test_no_op_with_port_and_start");
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
@@ -107,7 +107,7 @@ static void test_connect(int n) {
int nconnects_before;
gpr_timespec deadline;
int i;
- LOG_TEST();
+ LOG_TEST("test_connect");
gpr_log(GPR_INFO, "clients=%d", n);
gpr_mu_lock(&mu);
diff --git a/test/core/security/auth_context_test.c b/test/core/security/auth_context_test.c
new file mode 100644
index 0000000000..2fb0c01f6f
--- /dev/null
+++ b/test/core/security/auth_context_test.c
@@ -0,0 +1,143 @@
+/*
+ *
+ * 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<string.h>
+
+#include "src/core/security/security_context.h"
+#include "src/core/support/string.h"
+#include "test/core/util/test_config.h"
+
+#include <grpc/support/log.h>
+
+static void test_empty_context(void) {
+ grpc_auth_context *ctx = grpc_auth_context_create(NULL, 0);
+ grpc_auth_property_iterator it;
+
+ gpr_log(GPR_INFO, "test_empty_context");
+ GPR_ASSERT(ctx != NULL);
+ GPR_ASSERT(grpc_auth_context_peer_identity_property_name(ctx) == NULL);
+ it = grpc_auth_context_peer_identity(ctx);
+ GPR_ASSERT(grpc_auth_property_iterator_next(&it) == NULL);
+ it = grpc_auth_context_property_iterator(ctx);
+ GPR_ASSERT(grpc_auth_property_iterator_next(&it) == NULL);
+ it = grpc_auth_context_find_properties_by_name(ctx, "foo");
+ GPR_ASSERT(grpc_auth_property_iterator_next(&it) == NULL);
+ grpc_auth_context_unref(ctx);
+}
+
+static void test_simple_context(void) {
+ grpc_auth_context *ctx = grpc_auth_context_create(NULL, 3);
+ grpc_auth_property_iterator it;
+ size_t i;
+
+ gpr_log(GPR_INFO, "test_simple_context");
+ GPR_ASSERT(ctx != NULL);
+ GPR_ASSERT(ctx->property_count == 3);
+ ctx->properties[0] = grpc_auth_property_init_from_cstring("name", "chapi");
+ ctx->properties[1] = grpc_auth_property_init_from_cstring("name", "chapo");
+ ctx->properties[2] = grpc_auth_property_init_from_cstring("foo", "bar");
+ ctx->peer_identity_property_name = ctx->properties[0].name;
+
+ GPR_ASSERT(
+ strcmp(grpc_auth_context_peer_identity_property_name(ctx), "name") == 0);
+ it = grpc_auth_context_property_iterator(ctx);
+ for (i = 0; i < ctx->property_count; i++) {
+ const grpc_auth_property *p = grpc_auth_property_iterator_next(&it);
+ GPR_ASSERT(p == &ctx->properties[i]);
+ }
+ GPR_ASSERT(grpc_auth_property_iterator_next(&it) == NULL);
+
+ it = grpc_auth_context_find_properties_by_name(ctx, "foo");
+ GPR_ASSERT(grpc_auth_property_iterator_next(&it) == &ctx->properties[2]);
+ GPR_ASSERT(grpc_auth_property_iterator_next(&it) == NULL);
+
+ it = grpc_auth_context_peer_identity(ctx);
+ GPR_ASSERT(grpc_auth_property_iterator_next(&it) == &ctx->properties[0]);
+ GPR_ASSERT(grpc_auth_property_iterator_next(&it) == &ctx->properties[1]);
+ GPR_ASSERT(grpc_auth_property_iterator_next(&it) == NULL);
+
+ grpc_auth_context_unref(ctx);
+}
+
+static void test_chained_context(void) {
+ grpc_auth_context *chained = grpc_auth_context_create(NULL, 2);
+ grpc_auth_context *ctx = grpc_auth_context_create(chained, 3);
+ grpc_auth_property_iterator it;
+ size_t i;
+
+ gpr_log(GPR_INFO, "test_chained_context");
+ grpc_auth_context_unref(chained);
+ chained->properties[0] =
+ grpc_auth_property_init_from_cstring("name", "padapo");
+ chained->properties[1] = grpc_auth_property_init_from_cstring("foo", "baz");
+ ctx->properties[0] = grpc_auth_property_init_from_cstring("name", "chapi");
+ ctx->properties[1] = grpc_auth_property_init_from_cstring("name", "chapo");
+ ctx->properties[2] = grpc_auth_property_init_from_cstring("foo", "bar");
+ ctx->peer_identity_property_name = ctx->properties[0].name;
+
+ GPR_ASSERT(
+ strcmp(grpc_auth_context_peer_identity_property_name(ctx), "name") == 0);
+ it = grpc_auth_context_property_iterator(ctx);
+ for (i = 0; i < ctx->property_count; i++) {
+ const grpc_auth_property *p = grpc_auth_property_iterator_next(&it);
+ GPR_ASSERT(p == &ctx->properties[i]);
+ }
+ for (i = 0; i < chained->property_count; i++) {
+ const grpc_auth_property *p = grpc_auth_property_iterator_next(&it);
+ GPR_ASSERT(p == &chained->properties[i]);
+ }
+ GPR_ASSERT(grpc_auth_property_iterator_next(&it) == NULL);
+
+ it = grpc_auth_context_find_properties_by_name(ctx, "foo");
+ GPR_ASSERT(grpc_auth_property_iterator_next(&it) == &ctx->properties[2]);
+ GPR_ASSERT(grpc_auth_property_iterator_next(&it) == &chained->properties[1]);
+ GPR_ASSERT(grpc_auth_property_iterator_next(&it) == NULL);
+
+ it = grpc_auth_context_peer_identity(ctx);
+ GPR_ASSERT(grpc_auth_property_iterator_next(&it) == &ctx->properties[0]);
+ GPR_ASSERT(grpc_auth_property_iterator_next(&it) == &ctx->properties[1]);
+ GPR_ASSERT(grpc_auth_property_iterator_next(&it) == &chained->properties[0]);
+ GPR_ASSERT(grpc_auth_property_iterator_next(&it) == NULL);
+
+ grpc_auth_context_unref(ctx);
+}
+
+
+int main(int argc, char **argv) {
+ grpc_test_init(argc, argv);
+ test_empty_context();
+ test_simple_context();
+ test_chained_context();
+ return 0;
+}
+
diff --git a/test/core/security/credentials_test.c b/test/core/security/credentials_test.c
index 1b657e3d89..9a77f88e73 100644
--- a/test/core/security/credentials_test.c
+++ b/test/core/security/credentials_test.c
@@ -135,51 +135,113 @@ static grpc_httpcli_response http_response(int status, const char *body) {
return response;
}
+static void test_empty_md_store(void) {
+ grpc_credentials_md_store *store = grpc_credentials_md_store_create(0);
+ GPR_ASSERT(store->num_entries == 0);
+ GPR_ASSERT(store->allocated == 0);
+ grpc_credentials_md_store_unref(store);
+}
+
+static void test_ref_unref_empty_md_store(void) {
+ grpc_credentials_md_store *store = grpc_credentials_md_store_create(0);
+ grpc_credentials_md_store_ref(store);
+ grpc_credentials_md_store_ref(store);
+ GPR_ASSERT(store->num_entries == 0);
+ GPR_ASSERT(store->allocated == 0);
+ grpc_credentials_md_store_unref(store);
+ grpc_credentials_md_store_unref(store);
+ grpc_credentials_md_store_unref(store);
+}
+
+static void test_add_to_empty_md_store(void) {
+ grpc_credentials_md_store *store = grpc_credentials_md_store_create(0);
+ const char *key_str = "hello";
+ const char *value_str = "there blah blah blah blah blah blah blah";
+ gpr_slice key = gpr_slice_from_copied_string(key_str);
+ gpr_slice value = gpr_slice_from_copied_string(value_str);
+ grpc_credentials_md_store_add(store, key, value);
+ GPR_ASSERT(store->num_entries == 1);
+ GPR_ASSERT(gpr_slice_cmp(key, store->entries[0].key) == 0);
+ GPR_ASSERT(gpr_slice_cmp(value, store->entries[0].value) == 0);
+ gpr_slice_unref(key);
+ gpr_slice_unref(value);
+ grpc_credentials_md_store_unref(store);
+}
+
+static void test_add_cstrings_to_empty_md_store(void) {
+ grpc_credentials_md_store *store = grpc_credentials_md_store_create(0);
+ const char *key_str = "hello";
+ const char *value_str = "there blah blah blah blah blah blah blah";
+ grpc_credentials_md_store_add_cstrings(store, key_str, value_str);
+ GPR_ASSERT(store->num_entries == 1);
+ GPR_ASSERT(gpr_slice_str_cmp(store->entries[0].key, key_str) == 0);
+ GPR_ASSERT(gpr_slice_str_cmp(store->entries[0].value, value_str) == 0);
+ grpc_credentials_md_store_unref(store);
+}
+
+static void test_empty_preallocated_md_store(void) {
+ grpc_credentials_md_store *store = grpc_credentials_md_store_create(4);
+ GPR_ASSERT(store->num_entries == 0);
+ GPR_ASSERT(store->allocated == 4);
+ GPR_ASSERT(store->entries != NULL);
+ grpc_credentials_md_store_unref(store);
+}
+
+static void test_add_abunch_to_md_store(void) {
+ grpc_credentials_md_store *store = grpc_credentials_md_store_create(4);
+ size_t num_entries = 1000;
+ const char *key_str = "hello";
+ const char *value_str = "there blah blah blah blah blah blah blah";
+ size_t i;
+ for (i = 0; i < num_entries; i++) {
+ grpc_credentials_md_store_add_cstrings(store, key_str, value_str);
+ }
+ for (i = 0; i < num_entries; i++) {
+ GPR_ASSERT(gpr_slice_str_cmp(store->entries[i].key, key_str) == 0);
+ GPR_ASSERT(gpr_slice_str_cmp(store->entries[i].value, value_str) == 0);
+ }
+ grpc_credentials_md_store_unref(store);
+}
+
static void test_oauth2_token_fetcher_creds_parsing_ok(void) {
- grpc_mdctx *ctx = grpc_mdctx_create();
- grpc_mdelem *token_elem = NULL;
+ grpc_credentials_md_store *token_md = NULL;
gpr_timespec token_lifetime;
grpc_httpcli_response response =
http_response(200, valid_oauth2_json_response);
GPR_ASSERT(grpc_oauth2_token_fetcher_credentials_parse_server_response(
- &response, ctx, &token_elem, &token_lifetime) ==
+ &response, &token_md, &token_lifetime) ==
GRPC_CREDENTIALS_OK);
GPR_ASSERT(token_lifetime.tv_sec == 3599);
GPR_ASSERT(token_lifetime.tv_nsec == 0);
- GPR_ASSERT(strcmp(grpc_mdstr_as_c_string(token_elem->key),
- "Authorization") == 0);
- GPR_ASSERT(strcmp(grpc_mdstr_as_c_string(token_elem->value),
- "Bearer ya29.AHES6ZRN3-HlhAPya30GnW_bHSb_") == 0);
- grpc_mdelem_unref(token_elem);
- grpc_mdctx_unref(ctx);
+ GPR_ASSERT(token_md->num_entries == 1);
+ GPR_ASSERT(gpr_slice_str_cmp(token_md->entries[0].key, "Authorization") == 0);
+ GPR_ASSERT(gpr_slice_str_cmp(token_md->entries[0].value,
+ "Bearer ya29.AHES6ZRN3-HlhAPya30GnW_bHSb_") ==
+ 0);
+ grpc_credentials_md_store_unref(token_md);
}
static void test_oauth2_token_fetcher_creds_parsing_bad_http_status(void) {
- grpc_mdctx *ctx = grpc_mdctx_create();
- grpc_mdelem *token_elem = NULL;
+ grpc_credentials_md_store *token_md = NULL;
gpr_timespec token_lifetime;
grpc_httpcli_response response =
http_response(401, valid_oauth2_json_response);
GPR_ASSERT(grpc_oauth2_token_fetcher_credentials_parse_server_response(
- &response, ctx, &token_elem, &token_lifetime) ==
+ &response, &token_md, &token_lifetime) ==
GRPC_CREDENTIALS_ERROR);
- grpc_mdctx_unref(ctx);
}
static void test_oauth2_token_fetcher_creds_parsing_empty_http_body(void) {
- grpc_mdctx *ctx = grpc_mdctx_create();
- grpc_mdelem *token_elem = NULL;
+ grpc_credentials_md_store *token_md = NULL;
gpr_timespec token_lifetime;
grpc_httpcli_response response = http_response(200, "");
GPR_ASSERT(grpc_oauth2_token_fetcher_credentials_parse_server_response(
- &response, ctx, &token_elem, &token_lifetime) ==
+ &response, &token_md, &token_lifetime) ==
GRPC_CREDENTIALS_ERROR);
- grpc_mdctx_unref(ctx);
}
static void test_oauth2_token_fetcher_creds_parsing_invalid_json(void) {
- grpc_mdctx *ctx = grpc_mdctx_create();
- grpc_mdelem *token_elem = NULL;
+ grpc_credentials_md_store *token_md = NULL;
gpr_timespec token_lifetime;
grpc_httpcli_response response =
http_response(200,
@@ -187,28 +249,24 @@ static void test_oauth2_token_fetcher_creds_parsing_invalid_json(void) {
" \"expires_in\":3599, "
" \"token_type\":\"Bearer\"");
GPR_ASSERT(grpc_oauth2_token_fetcher_credentials_parse_server_response(
- &response, ctx, &token_elem, &token_lifetime) ==
+ &response, &token_md, &token_lifetime) ==
GRPC_CREDENTIALS_ERROR);
- grpc_mdctx_unref(ctx);
}
static void test_oauth2_token_fetcher_creds_parsing_missing_token(void) {
- grpc_mdctx *ctx = grpc_mdctx_create();
- grpc_mdelem *token_elem = NULL;
+ grpc_credentials_md_store *token_md = NULL;
gpr_timespec token_lifetime;
grpc_httpcli_response response = http_response(200,
"{"
" \"expires_in\":3599, "
" \"token_type\":\"Bearer\"}");
GPR_ASSERT(grpc_oauth2_token_fetcher_credentials_parse_server_response(
- &response, ctx, &token_elem, &token_lifetime) ==
+ &response, &token_md, &token_lifetime) ==
GRPC_CREDENTIALS_ERROR);
- grpc_mdctx_unref(ctx);
}
static void test_oauth2_token_fetcher_creds_parsing_missing_token_type(void) {
- grpc_mdctx *ctx = grpc_mdctx_create();
- grpc_mdelem *token_elem = NULL;
+ grpc_credentials_md_store *token_md = NULL;
gpr_timespec token_lifetime;
grpc_httpcli_response response =
http_response(200,
@@ -216,35 +274,32 @@ static void test_oauth2_token_fetcher_creds_parsing_missing_token_type(void) {
" \"expires_in\":3599, "
"}");
GPR_ASSERT(grpc_oauth2_token_fetcher_credentials_parse_server_response(
- &response, ctx, &token_elem, &token_lifetime) ==
+ &response, &token_md, &token_lifetime) ==
GRPC_CREDENTIALS_ERROR);
- grpc_mdctx_unref(ctx);
}
static void test_oauth2_token_fetcher_creds_parsing_missing_token_lifetime(
void) {
- grpc_mdctx *ctx = grpc_mdctx_create();
- grpc_mdelem *token_elem = NULL;
+ grpc_credentials_md_store *token_md = NULL;
gpr_timespec token_lifetime;
grpc_httpcli_response response =
http_response(200,
"{\"access_token\":\"ya29.AHES6ZRN3-HlhAPya30GnW_bHSb_\","
" \"token_type\":\"Bearer\"}");
GPR_ASSERT(grpc_oauth2_token_fetcher_credentials_parse_server_response(
- &response, ctx, &token_elem, &token_lifetime) ==
+ &response, &token_md, &token_lifetime) ==
GRPC_CREDENTIALS_ERROR);
- grpc_mdctx_unref(ctx);
}
-static void check_metadata(expected_md *expected, grpc_mdelem **md_elems,
+static void check_metadata(expected_md *expected, grpc_credentials_md *md_elems,
size_t num_md) {
size_t i;
for (i = 0; i < num_md; i++) {
size_t j;
for (j = 0; j < num_md; j++) {
- if (0 == gpr_slice_str_cmp(md_elems[j]->key->slice, expected[i].key)) {
- GPR_ASSERT(0 == gpr_slice_str_cmp(md_elems[j]->value->slice,
- expected[i].value));
+ if (0 == gpr_slice_str_cmp(md_elems[j].key, expected[i].key)) {
+ GPR_ASSERT(gpr_slice_str_cmp(md_elems[j].value, expected[i].value) ==
+ 0);
break;
}
}
@@ -255,7 +310,7 @@ static void check_metadata(expected_md *expected, grpc_mdelem **md_elems,
}
}
-static void check_iam_metadata(void *user_data, grpc_mdelem **md_elems,
+static void check_iam_metadata(void *user_data, grpc_credentials_md *md_elems,
size_t num_md, grpc_credentials_status status) {
grpc_credentials *c = (grpc_credentials *)user_data;
expected_md emd[] = {
@@ -277,7 +332,7 @@ static void test_iam_creds(void) {
}
static void check_ssl_oauth2_composite_metadata(
- void *user_data, grpc_mdelem **md_elems, size_t num_md,
+ void *user_data, grpc_credentials_md *md_elems, size_t num_md,
grpc_credentials_status status) {
grpc_credentials *c = (grpc_credentials *)user_data;
expected_md emd[] = {
@@ -327,7 +382,7 @@ void test_ssl_fake_transport_security_composite_creds_failure(void) {
}
static void check_ssl_oauth2_iam_composite_metadata(
- void *user_data, grpc_mdelem **md_elems, size_t num_md,
+ void *user_data, grpc_credentials_md *md_elems, size_t num_md,
grpc_credentials_status status) {
grpc_credentials *c = (grpc_credentials *)user_data;
expected_md emd[] = {
@@ -374,20 +429,20 @@ static void test_ssl_oauth2_iam_composite_creds(void) {
}
static void on_oauth2_creds_get_metadata_success(
- void *user_data, grpc_mdelem **md_elems, size_t num_md,
+ void *user_data, grpc_credentials_md *md_elems, size_t num_md,
grpc_credentials_status status) {
GPR_ASSERT(status == GRPC_CREDENTIALS_OK);
GPR_ASSERT(num_md == 1);
- GPR_ASSERT(strcmp(grpc_mdstr_as_c_string(md_elems[0]->key),
- "Authorization") == 0);
- GPR_ASSERT(strcmp(grpc_mdstr_as_c_string(md_elems[0]->value),
- "Bearer ya29.AHES6ZRN3-HlhAPya30GnW_bHSb_") == 0);
+ GPR_ASSERT(gpr_slice_str_cmp(md_elems[0].key, "Authorization") == 0);
+ GPR_ASSERT(gpr_slice_str_cmp(md_elems[0].value,
+ "Bearer ya29.AHES6ZRN3-HlhAPya30GnW_bHSb_") ==
+ 0);
GPR_ASSERT(user_data != NULL);
GPR_ASSERT(strcmp((const char *)user_data, test_user_data) == 0);
}
static void on_oauth2_creds_get_metadata_failure(
- void *user_data, grpc_mdelem **md_elems, size_t num_md,
+ void *user_data, grpc_credentials_md *md_elems, size_t num_md,
grpc_credentials_status status) {
GPR_ASSERT(status == GRPC_CREDENTIALS_ERROR);
GPR_ASSERT(num_md == 0);
@@ -719,24 +774,22 @@ static void test_service_account_creds_signing_failure(void) {
}
static void on_jwt_creds_get_metadata_success(void *user_data,
- grpc_mdelem **md_elems,
+ grpc_credentials_md *md_elems,
size_t num_md,
grpc_credentials_status status) {
char *expected_md_value;
gpr_asprintf(&expected_md_value, "Bearer %s", test_signed_jwt);
GPR_ASSERT(status == GRPC_CREDENTIALS_OK);
GPR_ASSERT(num_md == 1);
- GPR_ASSERT(strcmp(grpc_mdstr_as_c_string(md_elems[0]->key),
- "Authorization") == 0);
- GPR_ASSERT(strcmp(grpc_mdstr_as_c_string(md_elems[0]->value),
- expected_md_value) == 0);
+ GPR_ASSERT(gpr_slice_str_cmp(md_elems[0].key, "Authorization") == 0);
+ GPR_ASSERT(gpr_slice_str_cmp(md_elems[0].value, expected_md_value) == 0);
GPR_ASSERT(user_data != NULL);
GPR_ASSERT(strcmp((const char *)user_data, test_user_data) == 0);
gpr_free(expected_md_value);
}
static void on_jwt_creds_get_metadata_failure(void *user_data,
- grpc_mdelem **md_elems,
+ grpc_credentials_md *md_elems,
size_t num_md,
grpc_credentials_status status) {
GPR_ASSERT(status == GRPC_CREDENTIALS_ERROR);
@@ -796,6 +849,12 @@ static void test_jwt_creds_signing_failure(void) {
int main(int argc, char **argv) {
grpc_test_init(argc, argv);
+ test_empty_md_store();
+ test_ref_unref_empty_md_store();
+ test_add_to_empty_md_store();
+ test_add_cstrings_to_empty_md_store();
+ test_empty_preallocated_md_store();
+ test_add_abunch_to_md_store();
test_oauth2_token_fetcher_creds_parsing_ok();
test_oauth2_token_fetcher_creds_parsing_bad_http_status();
test_oauth2_token_fetcher_creds_parsing_empty_http_body();
diff --git a/test/core/support/cmdline_test.c b/test/core/support/cmdline_test.c
index 52c311f75c..26153b192c 100644
--- a/test/core/support/cmdline_test.c
+++ b/test/core/support/cmdline_test.c
@@ -35,16 +35,17 @@
#include <string.h>
+#include <grpc/support/alloc.h>
#include <grpc/support/log.h>
#include <grpc/support/useful.h>
#include "test/core/util/test_config.h"
-#define LOG_TEST() gpr_log(GPR_INFO, "%s", __FUNCTION__)
+#define LOG_TEST() gpr_log(GPR_INFO, "%s", __FILE__)
static void test_simple_int(void) {
int x = 1;
gpr_cmdline *cl;
- char *args[] = {(char *)__FUNCTION__, "-foo", "3"};
+ char *args[] = {(char *)__FILE__, "-foo", "3"};
LOG_TEST();
@@ -59,7 +60,7 @@ static void test_simple_int(void) {
static void test_eq_int(void) {
int x = 1;
gpr_cmdline *cl;
- char *args[] = {(char *)__FUNCTION__, "-foo=3"};
+ char *args[] = {(char *)__FILE__, "-foo=3"};
LOG_TEST();
@@ -74,7 +75,7 @@ static void test_eq_int(void) {
static void test_2dash_int(void) {
int x = 1;
gpr_cmdline *cl;
- char *args[] = {(char *)__FUNCTION__, "--foo", "3"};
+ char *args[] = {(char *)__FILE__, "--foo", "3"};
LOG_TEST();
@@ -89,7 +90,7 @@ static void test_2dash_int(void) {
static void test_2dash_eq_int(void) {
int x = 1;
gpr_cmdline *cl;
- char *args[] = {(char *)__FUNCTION__, "--foo=3"};
+ char *args[] = {(char *)__FILE__, "--foo=3"};
LOG_TEST();
@@ -104,7 +105,7 @@ static void test_2dash_eq_int(void) {
static void test_simple_string(void) {
char *x = NULL;
gpr_cmdline *cl;
- char *args[] = {(char *)__FUNCTION__, "-foo", "3"};
+ char *args[] = {(char *)__FILE__, "-foo", "3"};
LOG_TEST();
@@ -119,7 +120,7 @@ static void test_simple_string(void) {
static void test_eq_string(void) {
char *x = NULL;
gpr_cmdline *cl;
- char *args[] = {(char *)__FUNCTION__, "-foo=3"};
+ char *args[] = {(char *)__FILE__, "-foo=3"};
LOG_TEST();
@@ -134,7 +135,7 @@ static void test_eq_string(void) {
static void test_2dash_string(void) {
char *x = NULL;
gpr_cmdline *cl;
- char *args[] = {(char *)__FUNCTION__, "--foo", "3"};
+ char *args[] = {(char *)__FILE__, "--foo", "3"};
LOG_TEST();
@@ -149,7 +150,7 @@ static void test_2dash_string(void) {
static void test_2dash_eq_string(void) {
char *x = NULL;
gpr_cmdline *cl;
- char *args[] = {(char *)__FUNCTION__, "--foo=3"};
+ char *args[] = {(char *)__FILE__, "--foo=3"};
LOG_TEST();
@@ -164,7 +165,7 @@ static void test_2dash_eq_string(void) {
static void test_flag_on(void) {
int x = 2;
gpr_cmdline *cl;
- char *args[] = {(char *)__FUNCTION__, "--foo"};
+ char *args[] = {(char *)__FILE__, "--foo"};
LOG_TEST();
@@ -179,7 +180,7 @@ static void test_flag_on(void) {
static void test_flag_no(void) {
int x = 2;
gpr_cmdline *cl;
- char *args[] = {(char *)__FUNCTION__, "--no-foo"};
+ char *args[] = {(char *)__FILE__, "--no-foo"};
LOG_TEST();
@@ -194,7 +195,7 @@ static void test_flag_no(void) {
static void test_flag_val_1(void) {
int x = 2;
gpr_cmdline *cl;
- char *args[] = {(char *)__FUNCTION__, "--foo=1"};
+ char *args[] = {(char *)__FILE__, "--foo=1"};
LOG_TEST();
@@ -209,7 +210,7 @@ static void test_flag_val_1(void) {
static void test_flag_val_0(void) {
int x = 2;
gpr_cmdline *cl;
- char *args[] = {(char *)__FUNCTION__, "--foo=0"};
+ char *args[] = {(char *)__FILE__, "--foo=0"};
LOG_TEST();
@@ -224,7 +225,7 @@ static void test_flag_val_0(void) {
static void test_flag_val_true(void) {
int x = 2;
gpr_cmdline *cl;
- char *args[] = {(char *)__FUNCTION__, "--foo=true"};
+ char *args[] = {(char *)__FILE__, "--foo=true"};
LOG_TEST();
@@ -239,7 +240,7 @@ static void test_flag_val_true(void) {
static void test_flag_val_false(void) {
int x = 2;
gpr_cmdline *cl;
- char *args[] = {(char *)__FUNCTION__, "--foo=false"};
+ char *args[] = {(char *)__FILE__, "--foo=false"};
LOG_TEST();
@@ -257,7 +258,7 @@ static void test_many(void) {
int flag = 2;
gpr_cmdline *cl;
- char *args[] = {(char *)__FUNCTION__, "--str", "hello", "-x=4", "-no-flag"};
+ char *args[] = {(char *)__FILE__, "--str", "hello", "-x=4", "-no-flag"};
LOG_TEST();
@@ -272,6 +273,27 @@ static void test_many(void) {
gpr_cmdline_destroy(cl);
}
+static void test_usage(void) {
+ gpr_cmdline *cl;
+ char *usage;
+
+ char *str = NULL;
+ int x = 0;
+ int flag = 2;
+
+ cl = gpr_cmdline_create(NULL);
+ gpr_cmdline_add_string(cl, "str", NULL, &str);
+ gpr_cmdline_add_int(cl, "x", NULL, &x);
+ gpr_cmdline_add_flag(cl, "flag", NULL, &flag);
+
+ usage = gpr_cmdline_usage_string(cl, "test");
+ GPR_ASSERT(0 == strcmp(usage,
+ "Usage: test [--str=string] [--x=int] [--flag|--no-flag]\n"));
+ gpr_free(usage);
+
+ gpr_cmdline_destroy(cl);
+}
+
int main(int argc, char **argv) {
grpc_test_init(argc, argv);
test_simple_int();
@@ -289,5 +311,6 @@ int main(int argc, char **argv) {
test_flag_val_true();
test_flag_val_false();
test_many();
+ test_usage();
return 0;
}
diff --git a/test/core/support/env_test.c b/test/core/support/env_test.c
index aedf9313f3..69aebcc918 100644
--- a/test/core/support/env_test.c
+++ b/test/core/support/env_test.c
@@ -41,14 +41,14 @@
#include "src/core/support/string.h"
#include "test/core/util/test_config.h"
-#define LOG_TEST_NAME() gpr_log(GPR_INFO, "%s", __FUNCTION__)
+#define LOG_TEST_NAME(x) gpr_log(GPR_INFO, "%s", x)
static void test_setenv_getenv(void) {
const char *name = "FOO";
const char *value = "BAR";
char *retrieved_value;
- LOG_TEST_NAME();
+ LOG_TEST_NAME("test_setenv_getenv");
gpr_setenv(name, value);
retrieved_value = gpr_getenv(name);
diff --git a/test/core/support/file_test.c b/test/core/support/file_test.c
index 56e7a4948e..330b2173ef 100644
--- a/test/core/support/file_test.c
+++ b/test/core/support/file_test.c
@@ -42,7 +42,7 @@
#include "src/core/support/string.h"
#include "test/core/util/test_config.h"
-#define LOG_TEST_NAME() gpr_log(GPR_INFO, "%s", __FUNCTION__)
+#define LOG_TEST_NAME(x) gpr_log(GPR_INFO, "%s", x)
static const char prefix[] = "file_test";
@@ -53,7 +53,7 @@ static void test_load_empty_file(void) {
int success;
char *tmp_name;
- LOG_TEST_NAME();
+ LOG_TEST_NAME("test_load_empty_file");
tmp = gpr_tmpfile(prefix, &tmp_name);
GPR_ASSERT(tmp_name != NULL);
@@ -81,7 +81,7 @@ static void test_load_failure(void) {
int success;
char *tmp_name;
- LOG_TEST_NAME();
+ LOG_TEST_NAME("test_load_failure");
tmp = gpr_tmpfile(prefix, &tmp_name);
GPR_ASSERT(tmp_name != NULL);
@@ -104,7 +104,7 @@ static void test_load_small_file(void) {
char *tmp_name;
const char *blah = "blah";
- LOG_TEST_NAME();
+ LOG_TEST_NAME("test_load_small_file");
tmp = gpr_tmpfile(prefix, &tmp_name);
GPR_ASSERT(tmp_name != NULL);
@@ -138,7 +138,7 @@ static void test_load_big_file(void) {
unsigned char *current;
size_t i;
- LOG_TEST_NAME();
+ LOG_TEST_NAME("test_load_big_file");
for (i = 0; i < sizeof(buffer); i++) {
buffer[i] = 42;
diff --git a/test/core/support/histogram_test.c b/test/core/support/histogram_test.c
index 3994430874..be935ede09 100644
--- a/test/core/support/histogram_test.c
+++ b/test/core/support/histogram_test.c
@@ -34,7 +34,7 @@
#include <grpc/support/histogram.h>
#include <grpc/support/log.h>
-#define LOG_TEST() gpr_log(GPR_INFO, "%s", __FUNCTION__);
+#define LOG_TEST(x) gpr_log(GPR_INFO, "%s", x);
static void test_no_op(void) {
gpr_histogram_destroy(gpr_histogram_create(0.01, 60e9));
@@ -52,7 +52,7 @@ static void expect_percentile(gpr_histogram *h, double percentile,
static void test_simple(void) {
gpr_histogram *h;
- LOG_TEST();
+ LOG_TEST("test_simple");
h = gpr_histogram_create(0.01, 60e9);
gpr_histogram_add(h, 10000);
@@ -72,7 +72,7 @@ static void test_percentile(void) {
double i;
double cur;
- LOG_TEST();
+ LOG_TEST("test_percentile");
h = gpr_histogram_create(0.05, 1e9);
gpr_histogram_add(h, 2.5);
@@ -117,7 +117,7 @@ static void test_merge(void) {
double i;
double cur;
- LOG_TEST();
+ LOG_TEST("test_merge");
h1 = gpr_histogram_create(0.05, 1e9);
gpr_histogram_add(h1, 2.5);
diff --git a/test/core/support/slice_test.c b/test/core/support/slice_test.c
index 4ab3d6f45b..63dedea50f 100644
--- a/test/core/support/slice_test.c
+++ b/test/core/support/slice_test.c
@@ -38,7 +38,7 @@
#include <grpc/support/log.h>
#include "test/core/util/test_config.h"
-#define LOG_TEST_NAME() gpr_log(GPR_INFO, "%s", __FUNCTION__);
+#define LOG_TEST_NAME(x) gpr_log(GPR_INFO, "%s", x);
static void test_slice_malloc_returns_something_sensible(void) {
/* Calls gpr_slice_create for various lengths and verifies the internals for
@@ -47,7 +47,7 @@ static void test_slice_malloc_returns_something_sensible(void) {
size_t i;
gpr_slice slice;
- LOG_TEST_NAME();
+ LOG_TEST_NAME("test_slice_malloc_returns_something_sensible");
for (length = 0; length <= 1024; length++) {
slice = gpr_slice_malloc(length);
@@ -108,7 +108,7 @@ static void test_slice_sub_works(unsigned length) {
gpr_slice sub;
unsigned i, j, k;
- LOG_TEST_NAME();
+ LOG_TEST_NAME("test_slice_sub_works");
gpr_log(GPR_INFO, "length=%d", length);
/* Create a slice in which each byte is equal to the distance from it to the
@@ -147,7 +147,7 @@ static void test_slice_split_head_works(int length) {
gpr_slice head, tail;
int i;
- LOG_TEST_NAME();
+ LOG_TEST_NAME("test_slice_split_head_works");
gpr_log(GPR_INFO, "length=%d", length);
/* Create a slice in which each byte is equal to the distance from it to the
@@ -175,7 +175,7 @@ static void test_slice_split_tail_works(int length) {
gpr_slice head, tail;
int i;
- LOG_TEST_NAME();
+ LOG_TEST_NAME("test_slice_split_tail_works");
gpr_log(GPR_INFO, "length=%d", length);
/* Create a slice in which each byte is equal to the distance from it to the
@@ -202,7 +202,7 @@ static void test_slice_from_copied_string_works(void) {
static const char *text = "HELLO WORLD!";
gpr_slice slice;
- LOG_TEST_NAME();
+ LOG_TEST_NAME("test_slice_from_copied_string_works");
slice = gpr_slice_from_copied_string(text);
GPR_ASSERT(strlen(text) == GPR_SLICE_LENGTH(slice));
diff --git a/test/core/support/string_test.c b/test/core/support/string_test.c
index a78e4782a2..a1692ab39f 100644
--- a/test/core/support/string_test.c
+++ b/test/core/support/string_test.c
@@ -42,13 +42,13 @@
#include <grpc/support/useful.h>
#include "test/core/util/test_config.h"
-#define LOG_TEST_NAME() gpr_log(GPR_INFO, "%s", __FUNCTION__)
+#define LOG_TEST_NAME(x) gpr_log(GPR_INFO, "%s", x)
static void test_strdup(void) {
static const char *src1 = "hello world";
char *dst1;
- LOG_TEST_NAME();
+ LOG_TEST_NAME("test_strdup");
dst1 = gpr_strdup(src1);
GPR_ASSERT(0 == strcmp(src1, dst1));
@@ -65,7 +65,7 @@ static void expect_hexdump(const char *buf, size_t len, gpr_uint32 flags,
}
static void test_hexdump(void) {
- LOG_TEST_NAME();
+ LOG_TEST_NAME("test_hexdump");
expect_hexdump("\x01", 1, 0, "01");
expect_hexdump("\x01", 1, GPR_HEXDUMP_PLAINTEXT, "01 '.'");
expect_hexdump("\x01\x02", 2, 0, "01 02");
@@ -86,7 +86,7 @@ static void test_pu32_succeed(const char *s, gpr_uint32 want) {
}
static void test_parse_uint32(void) {
- LOG_TEST_NAME();
+ LOG_TEST_NAME("test_parse_uint32");
test_pu32_fail("-1");
test_pu32_fail("a");
@@ -123,7 +123,7 @@ static void test_asprintf(void) {
char *buf;
int i, j;
- LOG_TEST_NAME();
+ LOG_TEST_NAME("test_asprintf");
/* Print an empty string. */
GPR_ASSERT(gpr_asprintf(&buf, "") == 0);
diff --git a/test/core/surface/byte_buffer_reader_test.c b/test/core/surface/byte_buffer_reader_test.c
index b121abf757..9265ef16b0 100644
--- a/test/core/surface/byte_buffer_reader_test.c
+++ b/test/core/surface/byte_buffer_reader_test.c
@@ -44,13 +44,13 @@
#include <string.h>
-#define LOG_TEST() gpr_log(GPR_INFO, "%s", __FUNCTION__)
+#define LOG_TEST(x) gpr_log(GPR_INFO, "%s", x)
static void test_create(void) {
grpc_byte_buffer *buffer;
grpc_byte_buffer_reader *reader;
gpr_slice empty = gpr_empty_slice();
- LOG_TEST();
+ LOG_TEST("test_create");
buffer = grpc_byte_buffer_create(&empty, 1);
reader = grpc_byte_buffer_reader_create(buffer);
grpc_byte_buffer_reader_destroy(reader);
@@ -64,7 +64,7 @@ static void test_read_one_slice(void) {
gpr_slice first_slice, second_slice;
int first_code, second_code;
- LOG_TEST();
+ LOG_TEST("test_read_one_slice");
slice = gpr_slice_from_copied_string("test");
buffer = grpc_byte_buffer_create(&slice, 1);
gpr_slice_unref(slice);
@@ -86,7 +86,7 @@ static void test_read_one_slice_malloc(void) {
gpr_slice first_slice, second_slice;
int first_code, second_code;
- LOG_TEST();
+ LOG_TEST("test_read_one_slice_malloc");
slice = gpr_slice_malloc(4);
memcpy(GPR_SLICE_START_PTR(slice), "test", 4);
buffer = grpc_byte_buffer_create(&slice, 1);
diff --git a/test/core/surface/completion_queue_test.c b/test/core/surface/completion_queue_test.c
index 3e84eaf54c..e26f379bfc 100644
--- a/test/core/surface/completion_queue_test.c
+++ b/test/core/surface/completion_queue_test.c
@@ -41,7 +41,7 @@
#include <grpc/support/useful.h>
#include "test/core/util/test_config.h"
-#define LOG_TEST() gpr_log(GPR_INFO, "%s", __FUNCTION__)
+#define LOG_TEST(x) gpr_log(GPR_INFO, "%s", x)
static void *create_test_tag(void) {
static gpr_intptr i = 0;
@@ -59,14 +59,14 @@ static void shutdown_and_destroy(grpc_completion_queue *cc) {
/* ensure we can create and destroy a completion channel */
static void test_no_op(void) {
- LOG_TEST();
+ LOG_TEST("test_no_op");
shutdown_and_destroy(grpc_completion_queue_create());
}
static void test_wait_empty(void) {
grpc_completion_queue *cc;
- LOG_TEST();
+ LOG_TEST("test_wait_empty");
cc = grpc_completion_queue_create();
GPR_ASSERT(grpc_completion_queue_next(cc, gpr_now()).type ==
@@ -79,7 +79,7 @@ static void test_cq_end_op(void) {
grpc_completion_queue *cc;
void *tag = create_test_tag();
- LOG_TEST();
+ LOG_TEST("test_cq_end_op");
cc = grpc_completion_queue_create();
@@ -100,7 +100,7 @@ static void test_pluck(void) {
void *tags[128];
unsigned i, j;
- LOG_TEST();
+ LOG_TEST("test_pluck");
for (i = 0; i < GPR_ARRAY_SIZE(tags); i++) {
tags[i] = create_test_tag();
@@ -222,7 +222,7 @@ static void test_threading(int producers, int consumers) {
int total_consumed = 0;
static int optid = 101;
- gpr_log(GPR_INFO, "%s: %d producers, %d consumers", __FUNCTION__, producers,
+ gpr_log(GPR_INFO, "%s: %d producers, %d consumers", "test_threading", producers,
consumers);
grpc_completion_queue_dont_poll_test_only(cc);
diff --git a/test/core/transport/chttp2/hpack_table_test.c b/test/core/transport/chttp2/hpack_table_test.c
index d1e5f0829a..6bc697878a 100644
--- a/test/core/transport/chttp2/hpack_table_test.c
+++ b/test/core/transport/chttp2/hpack_table_test.c
@@ -41,7 +41,7 @@
#include <grpc/support/log.h>
#include "test/core/util/test_config.h"
-#define LOG_TEST() gpr_log(GPR_INFO, "%s", __FUNCTION__)
+#define LOG_TEST(x) gpr_log(GPR_INFO, "%s", x)
static void assert_str(const grpc_chttp2_hptbl *tbl, grpc_mdstr *mdstr,
const char *str) {
@@ -62,7 +62,7 @@ static void test_static_lookup(void) {
mdctx = grpc_mdctx_create();
grpc_chttp2_hptbl_init(&tbl, mdctx);
- LOG_TEST();
+ LOG_TEST("test_static_lookup");
assert_index(&tbl, 1, ":authority", "");
assert_index(&tbl, 2, ":method", "GET");
assert_index(&tbl, 3, ":method", "POST");
@@ -136,7 +136,7 @@ static void test_many_additions(void) {
char *value;
grpc_mdctx *mdctx;
- LOG_TEST();
+ LOG_TEST("test_many_additions");
mdctx = grpc_mdctx_create();
grpc_chttp2_hptbl_init(&tbl, mdctx);
@@ -177,7 +177,7 @@ static void test_find(void) {
grpc_mdctx *mdctx;
grpc_chttp2_hptbl_find_result r;
- LOG_TEST();
+ LOG_TEST("test_find");
mdctx = grpc_mdctx_create();
grpc_chttp2_hptbl_init(&tbl, mdctx);
diff --git a/test/core/transport/chttp2/stream_map_test.c b/test/core/transport/chttp2/stream_map_test.c
index d678e0af73..3c6976ee9d 100644
--- a/test/core/transport/chttp2/stream_map_test.c
+++ b/test/core/transport/chttp2/stream_map_test.c
@@ -35,13 +35,13 @@
#include <grpc/support/log.h>
#include "test/core/util/test_config.h"
-#define LOG_TEST() gpr_log(GPR_INFO, "%s", __FUNCTION__)
+#define LOG_TEST(x) gpr_log(GPR_INFO, "%s", x)
/* test creation & destruction */
static void test_no_op(void) {
grpc_chttp2_stream_map map;
- LOG_TEST();
+ LOG_TEST("test_no_op");
grpc_chttp2_stream_map_init(&map, 8);
grpc_chttp2_stream_map_destroy(&map);
@@ -51,7 +51,7 @@ static void test_no_op(void) {
static void test_empty_find(void) {
grpc_chttp2_stream_map map;
- LOG_TEST();
+ LOG_TEST("test_empty_find");
grpc_chttp2_stream_map_init(&map, 8);
GPR_ASSERT(NULL == grpc_chttp2_stream_map_find(&map, 39128));
@@ -62,7 +62,7 @@ static void test_empty_find(void) {
static void test_double_deletion(void) {
grpc_chttp2_stream_map map;
- LOG_TEST();
+ LOG_TEST("test_double_deletion");
grpc_chttp2_stream_map_init(&map, 8);
GPR_ASSERT(0 == grpc_chttp2_stream_map_size(&map));
@@ -87,7 +87,7 @@ static void test_basic_add_find(size_t n) {
size_t i;
size_t got;
- LOG_TEST();
+ LOG_TEST("test_basic_add_find");
gpr_log(GPR_INFO, "n = %d", n);
grpc_chttp2_stream_map_init(&map, 8);
@@ -143,7 +143,7 @@ static void test_delete_evens_sweep(size_t n) {
grpc_chttp2_stream_map map;
size_t i;
- LOG_TEST();
+ LOG_TEST("test_delete_evens_sweep");
gpr_log(GPR_INFO, "n = %d", n);
grpc_chttp2_stream_map_init(&map, 8);
@@ -165,7 +165,7 @@ static void test_delete_evens_incremental(size_t n) {
grpc_chttp2_stream_map map;
size_t i;
- LOG_TEST();
+ LOG_TEST("test_delete_evens_incremental");
gpr_log(GPR_INFO, "n = %d", n);
grpc_chttp2_stream_map_init(&map, 8);
@@ -186,7 +186,7 @@ static void test_periodic_compaction(size_t n) {
size_t i;
size_t del;
- LOG_TEST();
+ LOG_TEST("test_periodic_compaction");
gpr_log(GPR_INFO, "n = %d", n);
grpc_chttp2_stream_map_init(&map, 16);
diff --git a/test/core/transport/chttp2/timeout_encoding_test.c b/test/core/transport/chttp2/timeout_encoding_test.c
index fdb27a22ce..daaae1d39d 100644
--- a/test/core/transport/chttp2/timeout_encoding_test.c
+++ b/test/core/transport/chttp2/timeout_encoding_test.c
@@ -42,7 +42,7 @@
#include <grpc/support/useful.h>
#include "test/core/util/test_config.h"
-#define LOG_TEST() gpr_log(GPR_INFO, "%s", __FUNCTION__)
+#define LOG_TEST(x) gpr_log(GPR_INFO, "%s", x)
static void assert_encodes_as(gpr_timespec ts, const char *s) {
char buffer[GRPC_CHTTP2_TIMEOUT_ENCODE_MIN_BUFSIZE];
@@ -52,7 +52,7 @@ static void assert_encodes_as(gpr_timespec ts, const char *s) {
}
void test_encoding(void) {
- LOG_TEST();
+ LOG_TEST("test_encoding");
assert_encodes_as(gpr_time_from_micros(-1), "1n");
assert_encodes_as(gpr_time_from_seconds(-10), "1n");
assert_encodes_as(gpr_time_from_nanos(10), "10n");
@@ -116,7 +116,7 @@ void decode_suite(char ext, gpr_timespec (*answer)(long x)) {
}
void test_decoding(void) {
- LOG_TEST();
+ LOG_TEST("test_decoding");
decode_suite('n', gpr_time_from_nanos);
decode_suite('u', gpr_time_from_micros);
decode_suite('m', gpr_time_from_millis);
@@ -128,7 +128,7 @@ void test_decoding(void) {
void test_decoding_fails(void) {
gpr_timespec x;
- LOG_TEST();
+ LOG_TEST("test_decoding_fails");
GPR_ASSERT(0 == grpc_chttp2_decode_timeout("", &x));
GPR_ASSERT(0 == grpc_chttp2_decode_timeout(" ", &x));
GPR_ASSERT(0 == grpc_chttp2_decode_timeout("x", &x));
diff --git a/test/core/transport/metadata_test.c b/test/core/transport/metadata_test.c
index 66b5407d3c..9b242c5493 100644
--- a/test/core/transport/metadata_test.c
+++ b/test/core/transport/metadata_test.c
@@ -41,7 +41,7 @@
#include <grpc/support/log.h>
#include "test/core/util/test_config.h"
-#define LOG_TEST() gpr_log(GPR_INFO, "%s", __FUNCTION__)
+#define LOG_TEST(x) gpr_log(GPR_INFO, "%s", x)
/* a large number */
#define MANY 10000
@@ -49,7 +49,7 @@
static void test_no_op(void) {
grpc_mdctx *ctx;
- LOG_TEST();
+ LOG_TEST("test_no_op");
ctx = grpc_mdctx_create();
grpc_mdctx_unref(ctx);
@@ -59,7 +59,7 @@ static void test_create_string(void) {
grpc_mdctx *ctx;
grpc_mdstr *s1, *s2, *s3;
- LOG_TEST();
+ LOG_TEST("test_create_string");
ctx = grpc_mdctx_create();
s1 = grpc_mdstr_from_string(ctx, "hello");
@@ -79,7 +79,7 @@ static void test_create_metadata(void) {
grpc_mdctx *ctx;
grpc_mdelem *m1, *m2, *m3;
- LOG_TEST();
+ LOG_TEST("test_create_metadata");
ctx = grpc_mdctx_create();
m1 = grpc_mdelem_from_strings(ctx, "a", "b");
@@ -104,7 +104,7 @@ static void test_create_many_ephemeral_metadata(void) {
long i;
size_t mdtab_capacity_before;
- LOG_TEST();
+ LOG_TEST("test_create_many_ephemeral_metadata");
ctx = grpc_mdctx_create();
mdtab_capacity_before = grpc_mdctx_get_mdtab_capacity_test_only(ctx);
@@ -126,7 +126,7 @@ static void test_create_many_persistant_metadata(void) {
grpc_mdelem **created = gpr_malloc(sizeof(grpc_mdelem *) * MANY);
grpc_mdelem *md;
- LOG_TEST();
+ LOG_TEST("test_create_many_persistant_metadata");
ctx = grpc_mdctx_create();
/* add phase */
@@ -153,7 +153,7 @@ static void test_create_many_persistant_metadata(void) {
static void test_spin_creating_the_same_thing(void) {
grpc_mdctx *ctx;
- LOG_TEST();
+ LOG_TEST("test_spin_creating_the_same_thing");
ctx = grpc_mdctx_create();
GPR_ASSERT(grpc_mdctx_get_mdtab_count_test_only(ctx) == 0);
@@ -183,7 +183,7 @@ static void test_things_stick_around(void) {
int *shuf = gpr_malloc(sizeof(int) * nstrs);
grpc_mdstr *test;
- LOG_TEST();
+ LOG_TEST("test_things_stick_around");
ctx = grpc_mdctx_create();
@@ -229,7 +229,7 @@ static void test_slices_work(void) {
grpc_mdstr *str;
gpr_slice slice;
- LOG_TEST();
+ LOG_TEST("test_slices_work");
ctx = grpc_mdctx_create();
@@ -254,7 +254,7 @@ static void test_base64_and_huffman_works(void) {
gpr_slice slice1;
gpr_slice slice2;
- LOG_TEST();
+ LOG_TEST("test_base64_and_huffman_works");
ctx = grpc_mdctx_create();
str = grpc_mdstr_from_string(ctx, "abcdefg");