Merge branch 'master' of github.com:grpc/grpc into lb_add_md

pull/7746/head
David Garcia Quintas 8 years ago
commit b8245bd231
  1. 16
      doc/fail_fast.md
  2. 14
      doc/wait-for-ready.md
  3. 2
      examples/php/run_greeter_client.sh
  4. 4
      include/grpc++/impl/codegen/client_context.h
  5. 4
      include/grpc++/impl/codegen/server_context.h
  6. 10
      include/grpc/impl/codegen/grpc_types.h
  7. 177
      src/core/lib/channel/http_client_filter.c
  8. 3
      src/core/lib/channel/http_client_filter.h
  9. 79
      src/core/lib/channel/http_server_filter.c
  10. 6
      src/core/lib/security/context/security_context.c
  11. 12
      src/core/lib/security/context/security_context.h
  12. 11
      src/core/lib/surface/server.c
  13. 15
      src/core/lib/transport/static_metadata.c
  14. 98
      src/core/lib/transport/static_metadata.h
  15. 1
      src/core/lib/transport/transport.h
  16. 8
      src/objective-c/RxLibrary/transformations/GRXMappingWriter.m
  17. 37
      src/php/lib/Grpc/AbstractCall.php
  18. 10
      src/php/lib/Grpc/BidiStreamingCall.php
  19. 6
      src/php/lib/Grpc/ClientStreamingCall.php
  20. 12
      src/php/lib/Grpc/ServerStreamingCall.php
  21. 4
      src/php/lib/Grpc/UnaryCall.php
  22. 2
      test/core/bad_client/tests/head_of_line_blocking.c
  23. 6
      test/core/bad_client/tests/large_metadata.c
  24. 4
      test/core/bad_client/tests/server_registered_method.c
  25. 2
      test/core/bad_client/tests/simple_request.c
  26. 2
      test/core/bad_ssl/bad_ssl_test.c
  27. 12
      test/core/client_config/lb_policies_test.c
  28. 2
      test/core/end2end/bad_server_response_test.c
  29. 44
      test/core/end2end/cq_verifier.c
  30. 5
      test/core/end2end/cq_verifier.h
  31. 8
      test/core/end2end/dualstack_socket_test.c
  32. 2
      test/core/end2end/fixtures/h2_ssl_cert.c
  33. 1
      test/core/end2end/fuzzers/hpack.dictionary
  34. 22
      test/core/end2end/goaway_server_test.c
  35. 10
      test/core/end2end/invalid_call_argument_test.c
  36. 2
      test/core/end2end/no_server_test.c
  37. 2
      test/core/end2end/tests/bad_hostname.c
  38. 8
      test/core/end2end/tests/binary_metadata.c
  39. 10
      test/core/end2end/tests/call_creds.c
  40. 6
      test/core/end2end/tests/cancel_after_accept.c
  41. 6
      test/core/end2end/tests/cancel_after_client_done.c
  42. 2
      test/core/end2end/tests/cancel_after_invoke.c
  43. 2
      test/core/end2end/tests/cancel_before_invoke.c
  44. 2
      test/core/end2end/tests/cancel_with_status.c
  45. 24
      test/core/end2end/tests/compressed_payload.c
  46. 10
      test/core/end2end/tests/connectivity.c
  47. 6
      test/core/end2end/tests/default_host.c
  48. 8
      test/core/end2end/tests/disappearing_server.c
  49. 2
      test/core/end2end/tests/empty_batch.c
  50. 2
      test/core/end2end/tests/filter_call_init_fails.c
  51. 2
      test/core/end2end/tests/filter_causes_close.c
  52. 8
      test/core/end2end/tests/graceful_server_shutdown.c
  53. 6
      test/core/end2end/tests/high_initial_seqno.c
  54. 6
      test/core/end2end/tests/hpack_size.c
  55. 6
      test/core/end2end/tests/idempotent_request.c
  56. 8
      test/core/end2end/tests/invoke_large_request.c
  57. 8
      test/core/end2end/tests/large_metadata.c
  58. 8
      test/core/end2end/tests/load_reporting_hook.c
  59. 18
      test/core/end2end/tests/max_concurrent_streams.c
  60. 6
      test/core/end2end/tests/max_message_length.c
  61. 2
      test/core/end2end/tests/negative_deadline.c
  62. 8
      test/core/end2end/tests/network_status_change.c
  63. 8
      test/core/end2end/tests/payload.c
  64. 8
      test/core/end2end/tests/ping.c
  65. 16
      test/core/end2end/tests/ping_pong_streaming.c
  66. 6
      test/core/end2end/tests/registered_call.c
  67. 2
      test/core/end2end/tests/request_with_flags.c
  68. 8
      test/core/end2end/tests/request_with_payload.c
  69. 6
      test/core/end2end/tests/server_finishes_request.c
  70. 8
      test/core/end2end/tests/shutdown_finishes_calls.c
  71. 4
      test/core/end2end/tests/shutdown_finishes_tags.c
  72. 6
      test/core/end2end/tests/simple_delayed_request.c
  73. 8
      test/core/end2end/tests/simple_metadata.c
  74. 6
      test/core/end2end/tests/simple_request.c
  75. 16
      test/core/end2end/tests/streaming_error_response.c
  76. 8
      test/core/end2end/tests/trailing_metadata.c
  77. 4
      test/core/surface/lame_client_test.c
  78. 20
      test/cpp/grpclb/grpclb_test.cc
  79. 1
      tools/codegen/core/gen_static_metadata.py

@ -1,15 +1 @@
gRPC Fail Fast Semantics Moved to wait-for-ready.md
========================
Fail fast requests allow terminating requests (with status UNAVAILABLE) prior
to the deadline of the request being met.
gRPC implementations of fail fast can terminate requests whenever a channel is
in the TRANSIENT_FAILURE or SHUTDOWN states. If the channel is in any other
state (CONNECTING, READY, or IDLE) the request should not be terminated.
Fail fast SHOULD be the default for gRPC implementations, with an option to
switch to non fail fast.
The opposite of fail fast is 'ignore connectivity'.

@ -0,0 +1,14 @@
gRPC Wait for Ready Semantics
=============================
If an RPC is issued but the channel is in `TRANSIENT_FAILURE` or `SHUTDOWN`
states, the RPC is unable to be transmited promptly. By default, gRPC
implementations SHOULD fail such RPCs immediately. This is known as "fail fast,"
but usage of the term is historical. RPCs SHOULD NOT fail as a result of the
channel being in other states (`CONNECTING`, `READY`, or `IDLE`).
gRPC implementations MAY provide a per-RPC option to not fail RPCs as a result
of the channel being in `TRANSIENT_FAILURE` state. Instead, the implementation
queues the RPCs until the channel is `READY`. This is known as "wait for ready."
The RPCs SHOULD still fail before `READY` if there are unrelated reasons, such
as the channel is `SHUTDOWN` or the RPC's deadline is reached.

@ -30,5 +30,5 @@
set -e set -e
cd $(dirname $0) cd $(dirname $0)
php $extension_dir -d extension=grpc.so -d max_execution_time=300 \ php -d extension=grpc.so -d max_execution_time=300 \
greeter_client.php $1 greeter_client.php $1

@ -307,6 +307,10 @@ class ClientContext {
}; };
static void SetGlobalCallbacks(GlobalCallbacks* callbacks); static void SetGlobalCallbacks(GlobalCallbacks* callbacks);
// Should be used for framework-level extensions only.
// Applications never need to call this method.
grpc_call* c_call() { return call_; }
private: private:
// Disallow copy and assign. // Disallow copy and assign.
ClientContext(const ClientContext&); ClientContext(const ClientContext&);

@ -166,6 +166,10 @@ class ServerContext {
async_notify_when_done_tag_ = tag; async_notify_when_done_tag_ = tag;
} }
// Should be used for framework-level extensions only.
// Applications never need to call this method.
grpc_call* c_call() { return call_; }
private: private:
friend class ::grpc::testing::InteropServerContextInspector; friend class ::grpc::testing::InteropServerContextInspector;
friend class ::grpc::ServerInterface; friend class ::grpc::ServerInterface;

@ -222,10 +222,14 @@ typedef enum grpc_call_error {
#define GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST (0x00000010u) #define GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST (0x00000010u)
/** Signal that the call should not return UNAVAILABLE before it has started */ /** Signal that the call should not return UNAVAILABLE before it has started */
#define GRPC_INITIAL_METADATA_IGNORE_CONNECTIVITY (0x00000020u) #define GRPC_INITIAL_METADATA_IGNORE_CONNECTIVITY (0x00000020u)
/** Signal that the call is cacheable. GRPC is free to use GET verb */
#define GRPC_INITIAL_METADATA_CACHEABLE_REQUEST (0x00000040u)
/** Mask of all valid flags */ /** Mask of all valid flags */
#define GRPC_INITIAL_METADATA_USED_MASK \ #define GRPC_INITIAL_METADATA_USED_MASK \
(GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST | \ (GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST | \
GRPC_INITIAL_METADATA_IGNORE_CONNECTIVITY) GRPC_INITIAL_METADATA_IGNORE_CONNECTIVITY | \
GRPC_INITIAL_METADATA_CACHEABLE_REQUEST)
/** A single metadata element */ /** A single metadata element */
typedef struct grpc_metadata { typedef struct grpc_metadata {

@ -43,6 +43,9 @@
#define EXPECTED_CONTENT_TYPE "application/grpc" #define EXPECTED_CONTENT_TYPE "application/grpc"
#define EXPECTED_CONTENT_TYPE_LENGTH sizeof(EXPECTED_CONTENT_TYPE) - 1 #define EXPECTED_CONTENT_TYPE_LENGTH sizeof(EXPECTED_CONTENT_TYPE) - 1
/* default maximum size of payload eligable for GET request */
static const size_t kMaxPayloadSizeForGet = 2048;
typedef struct call_data { typedef struct call_data {
grpc_linked_mdelem method; grpc_linked_mdelem method;
grpc_linked_mdelem scheme; grpc_linked_mdelem scheme;
@ -50,20 +53,39 @@ typedef struct call_data {
grpc_linked_mdelem te_trailers; grpc_linked_mdelem te_trailers;
grpc_linked_mdelem content_type; grpc_linked_mdelem content_type;
grpc_linked_mdelem user_agent; grpc_linked_mdelem user_agent;
grpc_linked_mdelem payload_bin;
grpc_metadata_batch *recv_initial_metadata; grpc_metadata_batch *recv_initial_metadata;
uint8_t *payload_bytes;
/* Vars to read data off of send_message */
grpc_transport_stream_op send_op;
uint32_t send_length;
uint32_t send_flags;
gpr_slice incoming_slice;
grpc_slice_buffer_stream replacement_stream;
gpr_slice_buffer slices;
/* flag that indicates that all slices of send_messages aren't availble */
bool send_message_blocked;
/** Closure to call when finished with the hc_on_recv hook */ /** Closure to call when finished with the hc_on_recv hook */
grpc_closure *on_done_recv; grpc_closure *on_done_recv;
grpc_closure *on_complete;
grpc_closure *post_send;
/** Receive closures are chained: we inject this closure as the on_done_recv /** Receive closures are chained: we inject this closure as the on_done_recv
up-call on transport_op, and remember to call our on_done_recv member up-call on transport_op, and remember to call our on_done_recv member
after handling it. */ after handling it. */
grpc_closure hc_on_recv; grpc_closure hc_on_recv;
grpc_closure hc_on_complete;
grpc_closure got_slice;
grpc_closure send_done;
} call_data; } call_data;
typedef struct channel_data { typedef struct channel_data {
grpc_mdelem *static_scheme; grpc_mdelem *static_scheme;
grpc_mdelem *user_agent; grpc_mdelem *user_agent;
size_t max_payload_size_for_get;
} channel_data; } channel_data;
typedef struct { typedef struct {
@ -119,6 +141,24 @@ static void hc_on_recv(grpc_exec_ctx *exec_ctx, void *user_data,
calld->on_done_recv->cb(exec_ctx, calld->on_done_recv->cb_arg, error); calld->on_done_recv->cb(exec_ctx, calld->on_done_recv->cb_arg, error);
} }
static void hc_on_complete(grpc_exec_ctx *exec_ctx, void *user_data,
grpc_error *error) {
grpc_call_element *elem = user_data;
call_data *calld = elem->call_data;
if (calld->payload_bytes) {
gpr_free(calld->payload_bytes);
calld->payload_bytes = NULL;
}
calld->on_complete->cb(exec_ctx, calld->on_complete->cb_arg, error);
}
static void send_done(grpc_exec_ctx *exec_ctx, void *elemp, grpc_error *error) {
grpc_call_element *elem = elemp;
call_data *calld = elem->call_data;
gpr_slice_buffer_reset_and_unref(&calld->slices);
calld->post_send->cb(exec_ctx, calld->post_send->cb_arg, error);
}
static grpc_mdelem *client_strip_filter(void *user_data, grpc_mdelem *md) { static grpc_mdelem *client_strip_filter(void *user_data, grpc_mdelem *md) {
/* eat the things we'd like to set ourselves */ /* eat the things we'd like to set ourselves */
if (md->key == GRPC_MDSTR_METHOD) return NULL; if (md->key == GRPC_MDSTR_METHOD) return NULL;
@ -129,22 +169,105 @@ static grpc_mdelem *client_strip_filter(void *user_data, grpc_mdelem *md) {
return md; return md;
} }
static void hc_mutate_op(grpc_call_element *elem, static void continue_send_message(grpc_exec_ctx *exec_ctx,
grpc_call_element *elem) {
call_data *calld = elem->call_data;
uint8_t *wrptr = calld->payload_bytes;
while (grpc_byte_stream_next(exec_ctx, calld->send_op.send_message,
&calld->incoming_slice, ~(size_t)0,
&calld->got_slice)) {
memcpy(wrptr, GPR_SLICE_START_PTR(calld->incoming_slice),
GPR_SLICE_LENGTH(calld->incoming_slice));
wrptr += GPR_SLICE_LENGTH(calld->incoming_slice);
gpr_slice_buffer_add(&calld->slices, calld->incoming_slice);
if (calld->send_length == calld->slices.length) {
calld->send_message_blocked = false;
break;
}
}
}
static void got_slice(grpc_exec_ctx *exec_ctx, void *elemp, grpc_error *error) {
grpc_call_element *elem = elemp;
call_data *calld = elem->call_data;
calld->send_message_blocked = false;
gpr_slice_buffer_add(&calld->slices, calld->incoming_slice);
if (calld->send_length == calld->slices.length) {
/* Pass down the original send_message op that was blocked.*/
grpc_slice_buffer_stream_init(&calld->replacement_stream, &calld->slices,
calld->send_flags);
calld->send_op.send_message = &calld->replacement_stream.base;
calld->post_send = calld->send_op.on_complete;
calld->send_op.on_complete = &calld->send_done;
grpc_call_next_op(exec_ctx, elem, &calld->send_op);
} else {
continue_send_message(exec_ctx, elem);
}
}
static void hc_mutate_op(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
grpc_transport_stream_op *op) { grpc_transport_stream_op *op) {
/* grab pointers to our data from the call element */ /* grab pointers to our data from the call element */
call_data *calld = elem->call_data; call_data *calld = elem->call_data;
channel_data *channeld = elem->channel_data; channel_data *channeld = elem->channel_data;
if (op->send_initial_metadata != NULL) { if (op->send_initial_metadata != NULL) {
/* Decide which HTTP VERB to use. We use GET if the request is marked
cacheable, and the operation contains both initial metadata and send
message, and the payload is below the size threshold, and all the data
for this request is immediately available. */
grpc_mdelem *method = GRPC_MDELEM_METHOD_POST;
calld->send_message_blocked = false;
if ((op->send_initial_metadata_flags &
GRPC_INITIAL_METADATA_CACHEABLE_REQUEST) &&
op->send_message != NULL &&
op->send_message->length < channeld->max_payload_size_for_get) {
method = GRPC_MDELEM_METHOD_GET;
calld->send_message_blocked = true;
} else if (op->send_initial_metadata_flags &
GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST) {
method = GRPC_MDELEM_METHOD_PUT;
}
/* Attempt to read the data from send_message and create a header field. */
if (method == GRPC_MDELEM_METHOD_GET) {
/* allocate memory to hold the entire payload */
calld->payload_bytes = gpr_malloc(op->send_message->length);
GPR_ASSERT(calld->payload_bytes);
/* read slices of send_message and copy into payload_bytes */
calld->send_op = *op;
calld->send_length = op->send_message->length;
calld->send_flags = op->send_message->flags;
continue_send_message(exec_ctx, elem);
if (calld->send_message_blocked == false) {
/* when all the send_message data is available, then create a MDELEM and
append to headers */
grpc_mdelem *payload_bin = grpc_mdelem_from_metadata_strings(
GRPC_MDSTR_GRPC_PAYLOAD_BIN,
grpc_mdstr_from_buffer(calld->payload_bytes,
op->send_message->length));
grpc_metadata_batch_add_tail(op->send_initial_metadata,
&calld->payload_bin, payload_bin);
calld->on_complete = op->on_complete;
op->on_complete = &calld->hc_on_complete;
op->send_message = NULL;
} else {
/* Not all data is available. Fall back to POST. */
gpr_log(GPR_DEBUG,
"Request is marked Cacheable but not all data is available.\
Falling back to POST");
method = GRPC_MDELEM_METHOD_POST;
}
}
grpc_metadata_batch_filter(op->send_initial_metadata, client_strip_filter, grpc_metadata_batch_filter(op->send_initial_metadata, client_strip_filter,
elem); elem);
/* Send : prefixed headers, which have to be before any application /* Send : prefixed headers, which have to be before any application
layer headers. */ layer headers. */
grpc_metadata_batch_add_head( grpc_metadata_batch_add_head(op->send_initial_metadata, &calld->method,
op->send_initial_metadata, &calld->method, method);
op->send_initial_metadata_flags &
GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST
? GRPC_MDELEM_METHOD_PUT
: GRPC_MDELEM_METHOD_POST);
grpc_metadata_batch_add_head(op->send_initial_metadata, &calld->scheme, grpc_metadata_batch_add_head(op->send_initial_metadata, &calld->scheme,
channeld->static_scheme); channeld->static_scheme);
grpc_metadata_batch_add_tail(op->send_initial_metadata, &calld->te_trailers, grpc_metadata_batch_add_tail(op->send_initial_metadata, &calld->te_trailers,
@ -169,9 +292,16 @@ static void hc_start_transport_op(grpc_exec_ctx *exec_ctx,
grpc_transport_stream_op *op) { grpc_transport_stream_op *op) {
GPR_TIMER_BEGIN("hc_start_transport_op", 0); GPR_TIMER_BEGIN("hc_start_transport_op", 0);
GRPC_CALL_LOG_OP(GPR_INFO, elem, op); GRPC_CALL_LOG_OP(GPR_INFO, elem, op);
hc_mutate_op(elem, op); hc_mutate_op(exec_ctx, elem, op);
GPR_TIMER_END("hc_start_transport_op", 0); GPR_TIMER_END("hc_start_transport_op", 0);
grpc_call_next_op(exec_ctx, elem, op); call_data *calld = elem->call_data;
if (op->send_message != NULL && calld->send_message_blocked) {
/* Don't forward the op. send_message contains slices that aren't ready
yet. The call will be forwarded by the op_complete of slice read call.
*/
} else {
grpc_call_next_op(exec_ctx, elem, op);
}
} }
/* Constructor for call_data */ /* Constructor for call_data */
@ -180,14 +310,23 @@ static grpc_error *init_call_elem(grpc_exec_ctx *exec_ctx,
grpc_call_element_args *args) { grpc_call_element_args *args) {
call_data *calld = elem->call_data; call_data *calld = elem->call_data;
calld->on_done_recv = NULL; calld->on_done_recv = NULL;
calld->on_complete = NULL;
calld->payload_bytes = NULL;
gpr_slice_buffer_init(&calld->slices);
grpc_closure_init(&calld->hc_on_recv, hc_on_recv, elem); grpc_closure_init(&calld->hc_on_recv, hc_on_recv, elem);
grpc_closure_init(&calld->hc_on_complete, hc_on_complete, elem);
grpc_closure_init(&calld->got_slice, got_slice, elem);
grpc_closure_init(&calld->send_done, send_done, elem);
return GRPC_ERROR_NONE; return GRPC_ERROR_NONE;
} }
/* Destructor for call_data */ /* Destructor for call_data */
static void destroy_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem, static void destroy_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
const grpc_call_final_info *final_info, const grpc_call_final_info *final_info,
void *ignored) {} void *ignored) {
call_data *calld = elem->call_data;
gpr_slice_buffer_destroy(&calld->slices);
}
static grpc_mdelem *scheme_from_args(const grpc_channel_args *args) { static grpc_mdelem *scheme_from_args(const grpc_channel_args *args) {
unsigned i; unsigned i;
@ -210,6 +349,22 @@ static grpc_mdelem *scheme_from_args(const grpc_channel_args *args) {
return GRPC_MDELEM_SCHEME_HTTP; return GRPC_MDELEM_SCHEME_HTTP;
} }
static size_t max_payload_size_from_args(const grpc_channel_args *args) {
if (args != NULL) {
for (size_t i = 0; i < args->num_args; ++i) {
if (0 == strcmp(args->args[i].key, GRPC_ARG_MAX_PAYLOAD_SIZE_FOR_GET)) {
if (args->args[i].type != GRPC_ARG_INTEGER) {
gpr_log(GPR_ERROR, "%s: must be an integer",
GRPC_ARG_MAX_PAYLOAD_SIZE_FOR_GET);
} else {
return (size_t)args->args[i].value.integer;
}
}
}
}
return kMaxPayloadSizeForGet;
}
static grpc_mdstr *user_agent_from_args(const grpc_channel_args *args, static grpc_mdstr *user_agent_from_args(const grpc_channel_args *args,
const char *transport_name) { const char *transport_name) {
gpr_strvec v; gpr_strvec v;
@ -268,6 +423,8 @@ static void init_channel_elem(grpc_exec_ctx *exec_ctx,
GPR_ASSERT(!args->is_last); GPR_ASSERT(!args->is_last);
GPR_ASSERT(args->optional_transport != NULL); GPR_ASSERT(args->optional_transport != NULL);
chand->static_scheme = scheme_from_args(args->channel_args); chand->static_scheme = scheme_from_args(args->channel_args);
chand->max_payload_size_for_get =
max_payload_size_from_args(args->channel_args);
chand->user_agent = grpc_mdelem_from_metadata_strings( chand->user_agent = grpc_mdelem_from_metadata_strings(
GRPC_MDSTR_USER_AGENT, GRPC_MDSTR_USER_AGENT,
user_agent_from_args(args->channel_args, user_agent_from_args(args->channel_args,

@ -41,4 +41,7 @@ extern const grpc_channel_filter grpc_http_client_filter;
/* Channel arg to override the http2 :scheme header */ /* Channel arg to override the http2 :scheme header */
#define GRPC_ARG_HTTP2_SCHEME "grpc.http2_scheme" #define GRPC_ARG_HTTP2_SCHEME "grpc.http2_scheme"
/* Channel arg to determine maximum size of payload eligable for GET request */
#define GRPC_ARG_MAX_PAYLOAD_SIZE_FOR_GET "grpc.max_payload_size_for_get"
#endif /* GRPC_CORE_LIB_CHANNEL_HTTP_CLIENT_FILTER_H */ #endif /* GRPC_CORE_LIB_CHANNEL_HTTP_CLIENT_FILTER_H */

@ -49,17 +49,32 @@ typedef struct call_data {
uint8_t seen_scheme; uint8_t seen_scheme;
uint8_t seen_te_trailers; uint8_t seen_te_trailers;
uint8_t seen_authority; uint8_t seen_authority;
uint8_t seen_payload_bin;
grpc_linked_mdelem status; grpc_linked_mdelem status;
grpc_linked_mdelem content_type; grpc_linked_mdelem content_type;
/* flag to ensure payload_bin is delivered only once */
uint8_t payload_bin_delivered;
grpc_metadata_batch *recv_initial_metadata; grpc_metadata_batch *recv_initial_metadata;
bool *recv_idempotent_request; bool *recv_idempotent_request;
bool *recv_cacheable_request;
/** Closure to call when finished with the hs_on_recv hook */ /** Closure to call when finished with the hs_on_recv hook */
grpc_closure *on_done_recv; grpc_closure *on_done_recv;
/** Closure to call when we retrieve read message from the payload-bin header
*/
grpc_closure *recv_message_ready;
grpc_closure *on_complete;
grpc_byte_stream **pp_recv_message;
gpr_slice_buffer read_slice_buffer;
grpc_slice_buffer_stream read_stream;
/** Receive closures are chained: we inject this closure as the on_done_recv /** Receive closures are chained: we inject this closure as the on_done_recv
up-call on transport_op, and remember to call our on_done_recv member up-call on transport_op, and remember to call our on_done_recv member
after handling it. */ after handling it. */
grpc_closure hs_on_recv; grpc_closure hs_on_recv;
grpc_closure hs_on_complete;
grpc_closure hs_recv_message_ready;
} call_data; } call_data;
typedef struct channel_data { uint8_t unused; } channel_data; typedef struct channel_data { uint8_t unused; } channel_data;
@ -76,16 +91,20 @@ static grpc_mdelem *server_filter(void *user_data, grpc_mdelem *md) {
/* Check if it is one of the headers we care about. */ /* Check if it is one of the headers we care about. */
if (md == GRPC_MDELEM_TE_TRAILERS || md == GRPC_MDELEM_METHOD_POST || if (md == GRPC_MDELEM_TE_TRAILERS || md == GRPC_MDELEM_METHOD_POST ||
md == GRPC_MDELEM_METHOD_PUT || md == GRPC_MDELEM_SCHEME_HTTP || md == GRPC_MDELEM_METHOD_PUT || md == GRPC_MDELEM_METHOD_GET ||
md == GRPC_MDELEM_SCHEME_HTTPS || md == GRPC_MDELEM_SCHEME_HTTP || md == GRPC_MDELEM_SCHEME_HTTPS ||
md == GRPC_MDELEM_CONTENT_TYPE_APPLICATION_SLASH_GRPC) { md == GRPC_MDELEM_CONTENT_TYPE_APPLICATION_SLASH_GRPC) {
/* swallow it */ /* swallow it */
if (md == GRPC_MDELEM_METHOD_POST) { if (md == GRPC_MDELEM_METHOD_POST) {
calld->seen_method = 1; calld->seen_method = 1;
*calld->recv_idempotent_request = false; *calld->recv_idempotent_request = false;
*calld->recv_cacheable_request = false;
} else if (md == GRPC_MDELEM_METHOD_PUT) { } else if (md == GRPC_MDELEM_METHOD_PUT) {
calld->seen_method = 1; calld->seen_method = 1;
*calld->recv_idempotent_request = true; *calld->recv_idempotent_request = true;
} else if (md == GRPC_MDELEM_METHOD_GET) {
calld->seen_method = 1;
*calld->recv_cacheable_request = true;
} else if (md->key == GRPC_MDSTR_SCHEME) { } else if (md->key == GRPC_MDSTR_SCHEME) {
calld->seen_scheme = 1; calld->seen_scheme = 1;
} else if (md == GRPC_MDELEM_TE_TRAILERS) { } else if (md == GRPC_MDELEM_TE_TRAILERS) {
@ -137,6 +156,16 @@ static grpc_mdelem *server_filter(void *user_data, grpc_mdelem *md) {
GRPC_MDSTR_AUTHORITY, GRPC_MDSTR_REF(md->value)); GRPC_MDSTR_AUTHORITY, GRPC_MDSTR_REF(md->value));
calld->seen_authority = 1; calld->seen_authority = 1;
return authority; return authority;
} else if (md->key == GRPC_MDSTR_GRPC_PAYLOAD_BIN) {
/* Retrieve the payload from the value of the 'grpc-internal-payload-bin'
header field */
calld->seen_payload_bin = 1;
gpr_slice_buffer_init(&calld->read_slice_buffer);
gpr_slice_buffer_add(&calld->read_slice_buffer,
gpr_slice_ref(md->value->slice));
grpc_slice_buffer_stream_init(&calld->read_stream,
&calld->read_slice_buffer, 0);
return NULL;
} else { } else {
return md; return md;
} }
@ -189,6 +218,36 @@ static void hs_on_recv(grpc_exec_ctx *exec_ctx, void *user_data,
GRPC_ERROR_UNREF(err); GRPC_ERROR_UNREF(err);
} }
static void hs_on_complete(grpc_exec_ctx *exec_ctx, void *user_data,
grpc_error *err) {
grpc_call_element *elem = user_data;
call_data *calld = elem->call_data;
/* Call recv_message_ready if we got the payload via the header field */
if (calld->seen_payload_bin && calld->recv_message_ready != NULL) {
*calld->pp_recv_message = calld->payload_bin_delivered
? NULL
: (grpc_byte_stream *)&calld->read_stream;
calld->recv_message_ready->cb(exec_ctx, calld->recv_message_ready->cb_arg,
err);
calld->recv_message_ready = NULL;
calld->payload_bin_delivered = true;
}
calld->on_complete->cb(exec_ctx, calld->on_complete->cb_arg, err);
}
static void hs_recv_message_ready(grpc_exec_ctx *exec_ctx, void *user_data,
grpc_error *err) {
grpc_call_element *elem = user_data;
call_data *calld = elem->call_data;
if (calld->seen_payload_bin) {
/* do nothing. This is probably a GET request, and payload will be returned
in hs_on_complete callback. */
} else {
calld->recv_message_ready->cb(exec_ctx, calld->recv_message_ready->cb_arg,
err);
}
}
static void hs_mutate_op(grpc_call_element *elem, static void hs_mutate_op(grpc_call_element *elem,
grpc_transport_stream_op *op) { grpc_transport_stream_op *op) {
/* grab pointers to our data from the call element */ /* grab pointers to our data from the call element */
@ -206,11 +265,25 @@ static void hs_mutate_op(grpc_call_element *elem,
if (op->recv_initial_metadata) { if (op->recv_initial_metadata) {
/* substitute our callback for the higher callback */ /* substitute our callback for the higher callback */
GPR_ASSERT(op->recv_idempotent_request != NULL); GPR_ASSERT(op->recv_idempotent_request != NULL);
GPR_ASSERT(op->recv_cacheable_request != NULL);
calld->recv_initial_metadata = op->recv_initial_metadata; calld->recv_initial_metadata = op->recv_initial_metadata;
calld->recv_idempotent_request = op->recv_idempotent_request; calld->recv_idempotent_request = op->recv_idempotent_request;
calld->recv_cacheable_request = op->recv_cacheable_request;
calld->on_done_recv = op->recv_initial_metadata_ready; calld->on_done_recv = op->recv_initial_metadata_ready;
op->recv_initial_metadata_ready = &calld->hs_on_recv; op->recv_initial_metadata_ready = &calld->hs_on_recv;
} }
if (op->recv_message) {
calld->recv_message_ready = op->recv_message_ready;
calld->pp_recv_message = op->recv_message;
if (op->recv_message_ready) {
op->recv_message_ready = &calld->hs_recv_message_ready;
}
if (op->on_complete) {
calld->on_complete = op->on_complete;
op->on_complete = &calld->hs_on_complete;
}
}
} }
static void hs_start_transport_op(grpc_exec_ctx *exec_ctx, static void hs_start_transport_op(grpc_exec_ctx *exec_ctx,
@ -232,6 +305,8 @@ static grpc_error *init_call_elem(grpc_exec_ctx *exec_ctx,
/* initialize members */ /* initialize members */
memset(calld, 0, sizeof(*calld)); memset(calld, 0, sizeof(*calld));
grpc_closure_init(&calld->hs_on_recv, hs_on_recv, elem); grpc_closure_init(&calld->hs_on_recv, hs_on_recv, elem);
grpc_closure_init(&calld->hs_on_complete, hs_on_complete, elem);
grpc_closure_init(&calld->hs_recv_message_ready, hs_recv_message_ready, elem);
return GRPC_ERROR_NONE; return GRPC_ERROR_NONE;
} }

@ -99,6 +99,9 @@ void grpc_client_security_context_destroy(void *ctx) {
grpc_client_security_context *c = (grpc_client_security_context *)ctx; grpc_client_security_context *c = (grpc_client_security_context *)ctx;
grpc_call_credentials_unref(c->creds); grpc_call_credentials_unref(c->creds);
GRPC_AUTH_CONTEXT_UNREF(c->auth_context, "client_security_context"); GRPC_AUTH_CONTEXT_UNREF(c->auth_context, "client_security_context");
if (c->extension.instance != NULL && c->extension.destroy != NULL) {
c->extension.destroy(c->extension.instance);
}
gpr_free(ctx); gpr_free(ctx);
} }
@ -114,6 +117,9 @@ grpc_server_security_context *grpc_server_security_context_create(void) {
void grpc_server_security_context_destroy(void *ctx) { void grpc_server_security_context_destroy(void *ctx) {
grpc_server_security_context *c = (grpc_server_security_context *)ctx; grpc_server_security_context *c = (grpc_server_security_context *)ctx;
GRPC_AUTH_CONTEXT_UNREF(c->auth_context, "server_security_context"); GRPC_AUTH_CONTEXT_UNREF(c->auth_context, "server_security_context");
if (c->extension.instance != NULL && c->extension.destroy != NULL) {
c->extension.destroy(c->extension.instance);
}
gpr_free(ctx); gpr_free(ctx);
} }

@ -84,6 +84,16 @@ void grpc_auth_context_unref(grpc_auth_context *policy);
void grpc_auth_property_reset(grpc_auth_property *property); void grpc_auth_property_reset(grpc_auth_property *property);
/* --- grpc_security_context_extension ---
Extension to the security context that may be set in a filter and accessed
later by a higher level method on a grpc_call object. */
typedef struct {
void *instance;
void (*destroy)(void *);
} grpc_security_context_extension;
/* --- grpc_client_security_context --- /* --- grpc_client_security_context ---
Internal client-side security context. */ Internal client-side security context. */
@ -91,6 +101,7 @@ void grpc_auth_property_reset(grpc_auth_property *property);
typedef struct { typedef struct {
grpc_call_credentials *creds; grpc_call_credentials *creds;
grpc_auth_context *auth_context; grpc_auth_context *auth_context;
grpc_security_context_extension extension;
} grpc_client_security_context; } grpc_client_security_context;
grpc_client_security_context *grpc_client_security_context_create(void); grpc_client_security_context *grpc_client_security_context_create(void);
@ -102,6 +113,7 @@ void grpc_client_security_context_destroy(void *ctx);
typedef struct { typedef struct {
grpc_auth_context *auth_context; grpc_auth_context *auth_context;
grpc_security_context_extension extension;
} grpc_server_security_context; } grpc_server_security_context;
grpc_server_security_context *grpc_server_security_context_create(void); grpc_server_security_context *grpc_server_security_context_create(void);

@ -149,6 +149,7 @@ struct call_data {
grpc_metadata_batch *recv_initial_metadata; grpc_metadata_batch *recv_initial_metadata;
bool recv_idempotent_request; bool recv_idempotent_request;
bool recv_cacheable_request;
grpc_metadata_array initial_metadata; grpc_metadata_array initial_metadata;
request_matcher *request_matcher; request_matcher *request_matcher;
@ -497,9 +498,12 @@ static void publish_call(grpc_exec_ctx *exec_ctx, grpc_server *server,
&rc->data.batch.details->method_capacity, calld->path); &rc->data.batch.details->method_capacity, calld->path);
rc->data.batch.details->deadline = calld->deadline; rc->data.batch.details->deadline = calld->deadline;
rc->data.batch.details->flags = rc->data.batch.details->flags =
0 | (calld->recv_idempotent_request (calld->recv_idempotent_request
? GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST ? GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST
: 0); : 0) |
(calld->recv_cacheable_request
? GRPC_INITIAL_METADATA_CACHEABLE_REQUEST
: 0);
break; break;
case REGISTERED_CALL: case REGISTERED_CALL:
*rc->data.registered.deadline = calld->deadline; *rc->data.registered.deadline = calld->deadline;
@ -779,6 +783,7 @@ static void server_mutate_op(grpc_call_element *elem,
calld->on_done_recv_initial_metadata = op->recv_initial_metadata_ready; calld->on_done_recv_initial_metadata = op->recv_initial_metadata_ready;
op->recv_initial_metadata_ready = &calld->server_on_recv_initial_metadata; op->recv_initial_metadata_ready = &calld->server_on_recv_initial_metadata;
op->recv_idempotent_request = &calld->recv_idempotent_request; op->recv_idempotent_request = &calld->recv_idempotent_request;
op->recv_cacheable_request = &calld->recv_cacheable_request;
} }
} }

@ -51,15 +51,15 @@ uintptr_t grpc_static_mdelem_user_data[GRPC_STATIC_MDELEM_COUNT] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
const uint8_t grpc_static_metadata_elem_indices[GRPC_STATIC_MDELEM_COUNT * 2] = const uint8_t grpc_static_metadata_elem_indices[GRPC_STATIC_MDELEM_COUNT * 2] =
{11, 33, 10, 33, 12, 33, 12, 49, 13, 33, 14, 33, 15, 33, 16, 33, 17, 33, {11, 33, 10, 33, 12, 33, 12, 50, 13, 33, 14, 33, 15, 33, 16, 33, 17, 33,
19, 33, 20, 33, 21, 33, 22, 33, 23, 33, 24, 33, 25, 33, 26, 33, 27, 33, 19, 33, 20, 33, 21, 33, 22, 33, 23, 33, 24, 33, 25, 33, 26, 33, 27, 33,
28, 18, 28, 33, 29, 33, 30, 33, 34, 33, 35, 33, 36, 33, 37, 33, 40, 31, 28, 18, 28, 33, 29, 33, 30, 33, 34, 33, 35, 33, 36, 33, 37, 33, 40, 31,
40, 32, 40, 48, 40, 53, 40, 54, 40, 55, 40, 56, 42, 31, 42, 48, 42, 53, 40, 32, 40, 49, 40, 54, 40, 55, 40, 56, 40, 57, 42, 31, 42, 49, 42, 54,
45, 0, 45, 1, 45, 2, 50, 33, 57, 33, 58, 33, 59, 33, 60, 33, 61, 33, 46, 0, 46, 1, 46, 2, 51, 33, 58, 33, 59, 33, 60, 33, 61, 33, 62, 33,
62, 33, 63, 33, 64, 33, 65, 33, 66, 33, 67, 33, 68, 38, 68, 70, 68, 73, 63, 33, 64, 33, 65, 33, 66, 33, 67, 33, 68, 33, 69, 38, 69, 71, 69, 74,
69, 81, 69, 82, 71, 33, 72, 33, 74, 33, 75, 33, 76, 33, 77, 33, 78, 39, 70, 82, 70, 83, 72, 33, 73, 33, 75, 33, 76, 33, 77, 33, 78, 33, 79, 39,
78, 51, 78, 52, 79, 33, 80, 33, 83, 3, 83, 4, 83, 5, 83, 6, 83, 7, 79, 52, 79, 53, 80, 33, 81, 33, 84, 3, 84, 4, 84, 5, 84, 6, 84, 7,
83, 8, 83, 9, 84, 33, 85, 86, 87, 33, 88, 33, 89, 33, 90, 33, 91, 33}; 84, 8, 84, 9, 85, 33, 86, 87, 88, 33, 89, 33, 90, 33, 91, 33, 92, 33};
const char *const grpc_static_metadata_strings[GRPC_STATIC_MDSTR_COUNT] = { const char *const grpc_static_metadata_strings[GRPC_STATIC_MDSTR_COUNT] = {
"0", "0",
@ -107,6 +107,7 @@ const char *const grpc_static_metadata_strings[GRPC_STATIC_MDSTR_COUNT] = {
"grpc-encoding", "grpc-encoding",
"grpc-internal-encoding-request", "grpc-internal-encoding-request",
"grpc-message", "grpc-message",
"grpc-payload-bin",
"grpc-status", "grpc-status",
"grpc-timeout", "grpc-timeout",
"grpc-tracing-bin", "grpc-tracing-bin",

@ -44,7 +44,7 @@
#include "src/core/lib/transport/metadata.h" #include "src/core/lib/transport/metadata.h"
#define GRPC_STATIC_MDSTR_COUNT 92 #define GRPC_STATIC_MDSTR_COUNT 93
extern grpc_mdstr grpc_static_mdstr_table[GRPC_STATIC_MDSTR_COUNT]; extern grpc_mdstr grpc_static_mdstr_table[GRPC_STATIC_MDSTR_COUNT];
/* "0" */ /* "0" */
#define GRPC_MDSTR_0 (&grpc_static_mdstr_table[0]) #define GRPC_MDSTR_0 (&grpc_static_mdstr_table[0])
@ -136,101 +136,103 @@ extern grpc_mdstr grpc_static_mdstr_table[GRPC_STATIC_MDSTR_COUNT];
#define GRPC_MDSTR_GRPC_INTERNAL_ENCODING_REQUEST (&grpc_static_mdstr_table[43]) #define GRPC_MDSTR_GRPC_INTERNAL_ENCODING_REQUEST (&grpc_static_mdstr_table[43])
/* "grpc-message" */ /* "grpc-message" */
#define GRPC_MDSTR_GRPC_MESSAGE (&grpc_static_mdstr_table[44]) #define GRPC_MDSTR_GRPC_MESSAGE (&grpc_static_mdstr_table[44])
/* "grpc-payload-bin" */
#define GRPC_MDSTR_GRPC_PAYLOAD_BIN (&grpc_static_mdstr_table[45])
/* "grpc-status" */ /* "grpc-status" */
#define GRPC_MDSTR_GRPC_STATUS (&grpc_static_mdstr_table[45]) #define GRPC_MDSTR_GRPC_STATUS (&grpc_static_mdstr_table[46])
/* "grpc-timeout" */ /* "grpc-timeout" */
#define GRPC_MDSTR_GRPC_TIMEOUT (&grpc_static_mdstr_table[46]) #define GRPC_MDSTR_GRPC_TIMEOUT (&grpc_static_mdstr_table[47])
/* "grpc-tracing-bin" */ /* "grpc-tracing-bin" */
#define GRPC_MDSTR_GRPC_TRACING_BIN (&grpc_static_mdstr_table[47]) #define GRPC_MDSTR_GRPC_TRACING_BIN (&grpc_static_mdstr_table[48])
/* "gzip" */ /* "gzip" */
#define GRPC_MDSTR_GZIP (&grpc_static_mdstr_table[48]) #define GRPC_MDSTR_GZIP (&grpc_static_mdstr_table[49])
/* "gzip, deflate" */ /* "gzip, deflate" */
#define GRPC_MDSTR_GZIP_COMMA_DEFLATE (&grpc_static_mdstr_table[49]) #define GRPC_MDSTR_GZIP_COMMA_DEFLATE (&grpc_static_mdstr_table[50])
/* "host" */ /* "host" */
#define GRPC_MDSTR_HOST (&grpc_static_mdstr_table[50]) #define GRPC_MDSTR_HOST (&grpc_static_mdstr_table[51])
/* "http" */ /* "http" */
#define GRPC_MDSTR_HTTP (&grpc_static_mdstr_table[51]) #define GRPC_MDSTR_HTTP (&grpc_static_mdstr_table[52])
/* "https" */ /* "https" */
#define GRPC_MDSTR_HTTPS (&grpc_static_mdstr_table[52]) #define GRPC_MDSTR_HTTPS (&grpc_static_mdstr_table[53])
/* "identity" */ /* "identity" */
#define GRPC_MDSTR_IDENTITY (&grpc_static_mdstr_table[53]) #define GRPC_MDSTR_IDENTITY (&grpc_static_mdstr_table[54])
/* "identity,deflate" */ /* "identity,deflate" */
#define GRPC_MDSTR_IDENTITY_COMMA_DEFLATE (&grpc_static_mdstr_table[54]) #define GRPC_MDSTR_IDENTITY_COMMA_DEFLATE (&grpc_static_mdstr_table[55])
/* "identity,deflate,gzip" */ /* "identity,deflate,gzip" */
#define GRPC_MDSTR_IDENTITY_COMMA_DEFLATE_COMMA_GZIP \ #define GRPC_MDSTR_IDENTITY_COMMA_DEFLATE_COMMA_GZIP \
(&grpc_static_mdstr_table[55]) (&grpc_static_mdstr_table[56])
/* "identity,gzip" */ /* "identity,gzip" */
#define GRPC_MDSTR_IDENTITY_COMMA_GZIP (&grpc_static_mdstr_table[56]) #define GRPC_MDSTR_IDENTITY_COMMA_GZIP (&grpc_static_mdstr_table[57])
/* "if-match" */ /* "if-match" */
#define GRPC_MDSTR_IF_MATCH (&grpc_static_mdstr_table[57]) #define GRPC_MDSTR_IF_MATCH (&grpc_static_mdstr_table[58])
/* "if-modified-since" */ /* "if-modified-since" */
#define GRPC_MDSTR_IF_MODIFIED_SINCE (&grpc_static_mdstr_table[58]) #define GRPC_MDSTR_IF_MODIFIED_SINCE (&grpc_static_mdstr_table[59])
/* "if-none-match" */ /* "if-none-match" */
#define GRPC_MDSTR_IF_NONE_MATCH (&grpc_static_mdstr_table[59]) #define GRPC_MDSTR_IF_NONE_MATCH (&grpc_static_mdstr_table[60])
/* "if-range" */ /* "if-range" */
#define GRPC_MDSTR_IF_RANGE (&grpc_static_mdstr_table[60]) #define GRPC_MDSTR_IF_RANGE (&grpc_static_mdstr_table[61])
/* "if-unmodified-since" */ /* "if-unmodified-since" */
#define GRPC_MDSTR_IF_UNMODIFIED_SINCE (&grpc_static_mdstr_table[61]) #define GRPC_MDSTR_IF_UNMODIFIED_SINCE (&grpc_static_mdstr_table[62])
/* "last-modified" */ /* "last-modified" */
#define GRPC_MDSTR_LAST_MODIFIED (&grpc_static_mdstr_table[62]) #define GRPC_MDSTR_LAST_MODIFIED (&grpc_static_mdstr_table[63])
/* "link" */ /* "link" */
#define GRPC_MDSTR_LINK (&grpc_static_mdstr_table[63]) #define GRPC_MDSTR_LINK (&grpc_static_mdstr_table[64])
/* "load-reporting-initial" */ /* "load-reporting-initial" */
#define GRPC_MDSTR_LOAD_REPORTING_INITIAL (&grpc_static_mdstr_table[64]) #define GRPC_MDSTR_LOAD_REPORTING_INITIAL (&grpc_static_mdstr_table[65])
/* "load-reporting-trailing" */ /* "load-reporting-trailing" */
#define GRPC_MDSTR_LOAD_REPORTING_TRAILING (&grpc_static_mdstr_table[65]) #define GRPC_MDSTR_LOAD_REPORTING_TRAILING (&grpc_static_mdstr_table[66])
/* "location" */ /* "location" */
#define GRPC_MDSTR_LOCATION (&grpc_static_mdstr_table[66]) #define GRPC_MDSTR_LOCATION (&grpc_static_mdstr_table[67])
/* "max-forwards" */ /* "max-forwards" */
#define GRPC_MDSTR_MAX_FORWARDS (&grpc_static_mdstr_table[67]) #define GRPC_MDSTR_MAX_FORWARDS (&grpc_static_mdstr_table[68])
/* ":method" */ /* ":method" */
#define GRPC_MDSTR_METHOD (&grpc_static_mdstr_table[68]) #define GRPC_MDSTR_METHOD (&grpc_static_mdstr_table[69])
/* ":path" */ /* ":path" */
#define GRPC_MDSTR_PATH (&grpc_static_mdstr_table[69]) #define GRPC_MDSTR_PATH (&grpc_static_mdstr_table[70])
/* "POST" */ /* "POST" */
#define GRPC_MDSTR_POST (&grpc_static_mdstr_table[70]) #define GRPC_MDSTR_POST (&grpc_static_mdstr_table[71])
/* "proxy-authenticate" */ /* "proxy-authenticate" */
#define GRPC_MDSTR_PROXY_AUTHENTICATE (&grpc_static_mdstr_table[71]) #define GRPC_MDSTR_PROXY_AUTHENTICATE (&grpc_static_mdstr_table[72])
/* "proxy-authorization" */ /* "proxy-authorization" */
#define GRPC_MDSTR_PROXY_AUTHORIZATION (&grpc_static_mdstr_table[72]) #define GRPC_MDSTR_PROXY_AUTHORIZATION (&grpc_static_mdstr_table[73])
/* "PUT" */ /* "PUT" */
#define GRPC_MDSTR_PUT (&grpc_static_mdstr_table[73]) #define GRPC_MDSTR_PUT (&grpc_static_mdstr_table[74])
/* "range" */ /* "range" */
#define GRPC_MDSTR_RANGE (&grpc_static_mdstr_table[74]) #define GRPC_MDSTR_RANGE (&grpc_static_mdstr_table[75])
/* "referer" */ /* "referer" */
#define GRPC_MDSTR_REFERER (&grpc_static_mdstr_table[75]) #define GRPC_MDSTR_REFERER (&grpc_static_mdstr_table[76])
/* "refresh" */ /* "refresh" */
#define GRPC_MDSTR_REFRESH (&grpc_static_mdstr_table[76]) #define GRPC_MDSTR_REFRESH (&grpc_static_mdstr_table[77])
/* "retry-after" */ /* "retry-after" */
#define GRPC_MDSTR_RETRY_AFTER (&grpc_static_mdstr_table[77]) #define GRPC_MDSTR_RETRY_AFTER (&grpc_static_mdstr_table[78])
/* ":scheme" */ /* ":scheme" */
#define GRPC_MDSTR_SCHEME (&grpc_static_mdstr_table[78]) #define GRPC_MDSTR_SCHEME (&grpc_static_mdstr_table[79])
/* "server" */ /* "server" */
#define GRPC_MDSTR_SERVER (&grpc_static_mdstr_table[79]) #define GRPC_MDSTR_SERVER (&grpc_static_mdstr_table[80])
/* "set-cookie" */ /* "set-cookie" */
#define GRPC_MDSTR_SET_COOKIE (&grpc_static_mdstr_table[80]) #define GRPC_MDSTR_SET_COOKIE (&grpc_static_mdstr_table[81])
/* "/" */ /* "/" */
#define GRPC_MDSTR_SLASH (&grpc_static_mdstr_table[81]) #define GRPC_MDSTR_SLASH (&grpc_static_mdstr_table[82])
/* "/index.html" */ /* "/index.html" */
#define GRPC_MDSTR_SLASH_INDEX_DOT_HTML (&grpc_static_mdstr_table[82]) #define GRPC_MDSTR_SLASH_INDEX_DOT_HTML (&grpc_static_mdstr_table[83])
/* ":status" */ /* ":status" */
#define GRPC_MDSTR_STATUS (&grpc_static_mdstr_table[83]) #define GRPC_MDSTR_STATUS (&grpc_static_mdstr_table[84])
/* "strict-transport-security" */ /* "strict-transport-security" */
#define GRPC_MDSTR_STRICT_TRANSPORT_SECURITY (&grpc_static_mdstr_table[84]) #define GRPC_MDSTR_STRICT_TRANSPORT_SECURITY (&grpc_static_mdstr_table[85])
/* "te" */ /* "te" */
#define GRPC_MDSTR_TE (&grpc_static_mdstr_table[85]) #define GRPC_MDSTR_TE (&grpc_static_mdstr_table[86])
/* "trailers" */ /* "trailers" */
#define GRPC_MDSTR_TRAILERS (&grpc_static_mdstr_table[86]) #define GRPC_MDSTR_TRAILERS (&grpc_static_mdstr_table[87])
/* "transfer-encoding" */ /* "transfer-encoding" */
#define GRPC_MDSTR_TRANSFER_ENCODING (&grpc_static_mdstr_table[87]) #define GRPC_MDSTR_TRANSFER_ENCODING (&grpc_static_mdstr_table[88])
/* "user-agent" */ /* "user-agent" */
#define GRPC_MDSTR_USER_AGENT (&grpc_static_mdstr_table[88]) #define GRPC_MDSTR_USER_AGENT (&grpc_static_mdstr_table[89])
/* "vary" */ /* "vary" */
#define GRPC_MDSTR_VARY (&grpc_static_mdstr_table[89]) #define GRPC_MDSTR_VARY (&grpc_static_mdstr_table[90])
/* "via" */ /* "via" */
#define GRPC_MDSTR_VIA (&grpc_static_mdstr_table[90]) #define GRPC_MDSTR_VIA (&grpc_static_mdstr_table[91])
/* "www-authenticate" */ /* "www-authenticate" */
#define GRPC_MDSTR_WWW_AUTHENTICATE (&grpc_static_mdstr_table[91]) #define GRPC_MDSTR_WWW_AUTHENTICATE (&grpc_static_mdstr_table[92])
#define GRPC_STATIC_MDELEM_COUNT 81 #define GRPC_STATIC_MDELEM_COUNT 81
extern grpc_mdelem grpc_static_mdelem_table[GRPC_STATIC_MDELEM_COUNT]; extern grpc_mdelem grpc_static_mdelem_table[GRPC_STATIC_MDELEM_COUNT];

@ -124,6 +124,7 @@ typedef struct grpc_transport_stream_op {
/** Receive initial metadata from the stream, into provided metadata batch. */ /** Receive initial metadata from the stream, into provided metadata batch. */
grpc_metadata_batch *recv_initial_metadata; grpc_metadata_batch *recv_initial_metadata;
bool *recv_idempotent_request; bool *recv_idempotent_request;
bool *recv_cacheable_request;
/** Should be enqueued when initial metadata is ready to be processed. */ /** Should be enqueued when initial metadata is ready to be processed. */
grpc_closure *recv_initial_metadata_ready; grpc_closure *recv_initial_metadata_ready;

@ -33,10 +33,6 @@
#import "GRXMappingWriter.h" #import "GRXMappingWriter.h"
static id (^kIdentity)(id value) = ^id(id value) {
return value;
};
@interface GRXForwardingWriter () <GRXWriteable> @interface GRXForwardingWriter () <GRXWriteable>
@end @end
@ -51,7 +47,9 @@ static id (^kIdentity)(id value) = ^id(id value) {
// Designated initializer // Designated initializer
- (instancetype)initWithWriter:(GRXWriter *)writer map:(id (^)(id value))map { - (instancetype)initWithWriter:(GRXWriter *)writer map:(id (^)(id value))map {
if ((self = [super initWithWriter:writer])) { if ((self = [super initWithWriter:writer])) {
_map = map ?: kIdentity; _map = map ?: ^id(id value) {
return value;
};
} }
return self; return self;
} }

@ -34,8 +34,15 @@
namespace Grpc; namespace Grpc;
/**
* Class AbstractCall
* @package Grpc
*/
abstract class AbstractCall abstract class AbstractCall
{ {
/**
* @var Call
*/
protected $call; protected $call;
protected $deserialize; protected $deserialize;
protected $metadata; protected $metadata;
@ -51,13 +58,15 @@ abstract class AbstractCall
* the response * the response
* @param array $options Call options (optional) * @param array $options Call options (optional)
*/ */
public function __construct(Channel $channel, public function __construct(
$method, Channel $channel,
$deserialize, $method,
$options = []) $deserialize,
{ $options = []
if (isset($options['timeout']) && ) {
is_numeric($timeout = $options['timeout'])) { if (array_key_exists('timeout', $options) &&
is_numeric($timeout = $options['timeout'])
) {
$now = Timeval::now(); $now = Timeval::now();
$delta = new Timeval($timeout); $delta = new Timeval($timeout);
$deadline = $now->add($delta); $deadline = $now->add($delta);
@ -68,17 +77,19 @@ abstract class AbstractCall
$this->deserialize = $deserialize; $this->deserialize = $deserialize;
$this->metadata = null; $this->metadata = null;
$this->trailing_metadata = null; $this->trailing_metadata = null;
if (isset($options['call_credentials_callback']) && if (array_key_exists('call_credentials_callback', $options) &&
is_callable($call_credentials_callback = is_callable($call_credentials_callback =
$options['call_credentials_callback'])) { $options['call_credentials_callback'])
) {
$call_credentials = CallCredentials::createFromPlugin( $call_credentials = CallCredentials::createFromPlugin(
$call_credentials_callback); $call_credentials_callback
);
$this->call->setCredentials($call_credentials); $this->call->setCredentials($call_credentials);
} }
} }
/** /**
* @return The metadata sent by the server. * @return mixed The metadata sent by the server.
*/ */
public function getMetadata() public function getMetadata()
{ {
@ -86,7 +97,7 @@ abstract class AbstractCall
} }
/** /**
* @return The trailing metadata sent by the server. * @return mixed The trailing metadata sent by the server.
*/ */
public function getTrailingMetadata() public function getTrailingMetadata()
{ {
@ -114,7 +125,7 @@ abstract class AbstractCall
* *
* @param string $value The binary value to deserialize * @param string $value The binary value to deserialize
* *
* @return The deserialized value * @return mixed The deserialized value
*/ */
protected function deserializeResponse($value) protected function deserializeResponse($value)
{ {

@ -45,7 +45,7 @@ class BidiStreamingCall extends AbstractCall
* *
* @param array $metadata Metadata to send with the call, if applicable * @param array $metadata Metadata to send with the call, if applicable
*/ */
public function start($metadata = []) public function start(array $metadata = [])
{ {
$this->call->startBatch([ $this->call->startBatch([
OP_SEND_INITIAL_METADATA => $metadata, OP_SEND_INITIAL_METADATA => $metadata,
@ -55,7 +55,7 @@ class BidiStreamingCall extends AbstractCall
/** /**
* Reads the next value from the server. * Reads the next value from the server.
* *
* @return The next value from the server, or null if there is none * @return mixed The next value from the server, or null if there is none
*/ */
public function read() public function read()
{ {
@ -82,7 +82,7 @@ class BidiStreamingCall extends AbstractCall
public function write($data, $options = []) public function write($data, $options = [])
{ {
$message_array = ['message' => $data->serialize()]; $message_array = ['message' => $data->serialize()];
if (isset($options['flags'])) { if (array_key_exists('flags', $options)) {
$message_array['flags'] = $options['flags']; $message_array['flags'] = $options['flags'];
} }
$this->call->startBatch([ $this->call->startBatch([
@ -103,8 +103,8 @@ class BidiStreamingCall extends AbstractCall
/** /**
* Wait for the server to send the status, and return it. * Wait for the server to send the status, and return it.
* *
* @return object The status object, with integer $code, string $details, * @return \stdClass The status object, with integer $code, string $details,
* and array $metadata members * and array $metadata members
*/ */
public function getStatus() public function getStatus()
{ {

@ -60,10 +60,10 @@ class ClientStreamingCall extends AbstractCall
* @param array $options an array of options, possible keys: * @param array $options an array of options, possible keys:
* 'flags' => a number * 'flags' => a number
*/ */
public function write($data, $options = []) public function write($data, array $options = [])
{ {
$message_array = ['message' => $data->serialize()]; $message_array = ['message' => $data->serialize()];
if (isset($options['flags'])) { if (array_key_exists('flags', $options)) {
$message_array['flags'] = $options['flags']; $message_array['flags'] = $options['flags'];
} }
$this->call->startBatch([ $this->call->startBatch([
@ -74,7 +74,7 @@ class ClientStreamingCall extends AbstractCall
/** /**
* Wait for the server to respond with data and a status. * Wait for the server to respond with data and a status.
* *
* @return [response data, status] * @return array [response data, status]
*/ */
public function wait() public function wait()
{ {

@ -36,14 +36,14 @@ namespace Grpc;
/** /**
* Represents an active call that sends a single message and then gets a stream * Represents an active call that sends a single message and then gets a stream
* of reponses. * of responses.
*/ */
class ServerStreamingCall extends AbstractCall class ServerStreamingCall extends AbstractCall
{ {
/** /**
* Start the call. * Start the call.
* *
* @param $data The data to send * @param mixed $data The data to send
* @param array $metadata Metadata to send with the call, if applicable * @param array $metadata Metadata to send with the call, if applicable
* @param array $options an array of options, possible keys: * @param array $options an array of options, possible keys:
* 'flags' => a number * 'flags' => a number
@ -51,7 +51,7 @@ class ServerStreamingCall extends AbstractCall
public function start($data, $metadata = [], $options = []) public function start($data, $metadata = [], $options = [])
{ {
$message_array = ['message' => $data->serialize()]; $message_array = ['message' => $data->serialize()];
if (isset($options['flags'])) { if (array_key_exists('flags', $options)) {
$message_array['flags'] = $options['flags']; $message_array['flags'] = $options['flags'];
} }
$event = $this->call->startBatch([ $event = $this->call->startBatch([
@ -64,7 +64,7 @@ class ServerStreamingCall extends AbstractCall
} }
/** /**
* @return An iterator of response values * @return mixed An iterator of response values
*/ */
public function responses() public function responses()
{ {
@ -82,8 +82,8 @@ class ServerStreamingCall extends AbstractCall
/** /**
* Wait for the server to send the status, and return it. * Wait for the server to send the status, and return it.
* *
* @return object The status object, with integer $code, string $details, * @return \stdClass The status object, with integer $code, string $details,
* and array $metadata members * and array $metadata members
*/ */
public function getStatus() public function getStatus()
{ {

@ -43,7 +43,7 @@ class UnaryCall extends AbstractCall
/** /**
* Start the call. * Start the call.
* *
* @param $data The data to send * @param mixed $data The data to send
* @param array $metadata Metadata to send with the call, if applicable * @param array $metadata Metadata to send with the call, if applicable
* @param array $options an array of options, possible keys: * @param array $options an array of options, possible keys:
* 'flags' => a number * 'flags' => a number
@ -66,7 +66,7 @@ class UnaryCall extends AbstractCall
/** /**
* Wait for the server to respond with data and a status. * Wait for the server to respond with data and a status.
* *
* @return [response data, status] * @return array [response data, status]
*/ */
public function wait() public function wait()
{ {

@ -97,7 +97,7 @@ static void verifier(grpc_server *server, grpc_completion_queue *cq,
&deadline, &request_metadata_recv, &deadline, &request_metadata_recv,
&payload, cq, cq, tag(101)); &payload, cq, cq, tag(101));
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(101), 1); CQ_EXPECT_COMPLETION(cqv, tag(101), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(payload != NULL); GPR_ASSERT(payload != NULL);

@ -121,7 +121,7 @@ static void server_verifier(grpc_server *server, grpc_completion_queue *cq,
error = grpc_server_request_call(server, &s, &call_details, error = grpc_server_request_call(server, &s, &call_details,
&request_metadata_recv, cq, cq, tag(101)); &request_metadata_recv, cq, cq, tag(101));
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(101), 1); CQ_EXPECT_COMPLETION(cqv, tag(101), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(0 == strcmp(call_details.host, "localhost")); GPR_ASSERT(0 == strcmp(call_details.host, "localhost"));
@ -148,7 +148,7 @@ static void server_verifier_sends_too_much_metadata(grpc_server *server,
error = grpc_server_request_call(server, &s, &call_details, error = grpc_server_request_call(server, &s, &call_details,
&request_metadata_recv, cq, cq, tag(101)); &request_metadata_recv, cq, cq, tag(101));
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(101), 1); CQ_EXPECT_COMPLETION(cqv, tag(101), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(0 == strcmp(call_details.host, "localhost")); GPR_ASSERT(0 == strcmp(call_details.host, "localhost"));
@ -171,7 +171,7 @@ static void server_verifier_sends_too_much_metadata(grpc_server *server,
op.reserved = NULL; op.reserved = NULL;
error = grpc_call_start_batch(s, &op, 1, tag(102), NULL); error = grpc_call_start_batch(s, &op, 1, tag(102), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(102), 0); // Operation fails. CQ_EXPECT_COMPLETION(cqv, tag(102), 0); // Operation fails.
cq_verify(cqv); cq_verify(cqv);
gpr_free((char *)meta.value); gpr_free((char *)meta.value);

@ -70,7 +70,7 @@ static void verifier_succeeds(grpc_server *server, grpc_completion_queue *cq,
&deadline, &request_metadata_recv, &deadline, &request_metadata_recv,
&payload, cq, cq, tag(101)); &payload, cq, cq, tag(101));
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(101), 1); CQ_EXPECT_COMPLETION(cqv, tag(101), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(payload != NULL); GPR_ASSERT(payload != NULL);
@ -96,7 +96,7 @@ static void verifier_fails(grpc_server *server, grpc_completion_queue *cq,
&deadline, &request_metadata_recv, &deadline, &request_metadata_recv,
&payload, cq, cq, tag(101)); &payload, cq, cq, tag(101));
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(101), 1); CQ_EXPECT_COMPLETION(cqv, tag(101), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(payload == NULL); GPR_ASSERT(payload == NULL);

@ -114,7 +114,7 @@ static void verifier(grpc_server *server, grpc_completion_queue *cq,
error = grpc_server_request_call(server, &s, &call_details, error = grpc_server_request_call(server, &s, &call_details,
&request_metadata_recv, cq, cq, tag(101)); &request_metadata_recv, cq, cq, tag(101));
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(101), 1); CQ_EXPECT_COMPLETION(cqv, tag(101), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(0 == strcmp(call_details.host, "localhost")); GPR_ASSERT(0 == strcmp(call_details.host, "localhost"));

@ -111,7 +111,7 @@ static void run_test(const char *target, size_t nops) {
error = grpc_call_start_batch(c, ops, nops, tag(1), NULL); error = grpc_call_start_batch(c, ops, nops, tag(1), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(status != GRPC_STATUS_OK); GPR_ASSERT(status != GRPC_STATUS_OK);

@ -351,9 +351,9 @@ static int *perform_request(servers_fixture *f, grpc_channel *client,
ops, (size_t)(op - ops), ops, (size_t)(op - ops),
tag(102), NULL)); tag(102), NULL));
cq_expect_completion(cqv, tag(102), 1); CQ_EXPECT_COMPLETION(cqv, tag(102), 1);
if (!completed_client) { if (!completed_client) {
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
} }
cq_verify(cqv); cq_verify(cqv);
@ -376,7 +376,7 @@ static int *perform_request(servers_fixture *f, grpc_channel *client,
} else { /* no response from server */ } else { /* no response from server */
grpc_call_cancel(c, NULL); grpc_call_cancel(c, NULL);
if (!completed_client) { if (!completed_client) {
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_verify(cqv); cq_verify(cqv);
} }
} }
@ -576,7 +576,7 @@ static void test_ping() {
client = create_client(f); client = create_client(f);
grpc_channel_ping(client, f->cq, tag(0), NULL); grpc_channel_ping(client, f->cq, tag(0), NULL);
cq_expect_completion(cqv, tag(0), 0); CQ_EXPECT_COMPLETION(cqv, tag(0), 0);
/* check that we're still in idle, and start connecting */ /* check that we're still in idle, and start connecting */
GPR_ASSERT(grpc_channel_check_connectivity_state(client, 1) == GPR_ASSERT(grpc_channel_check_connectivity_state(client, 1) ==
@ -586,7 +586,7 @@ static void test_ping() {
while (state != GRPC_CHANNEL_READY) { while (state != GRPC_CHANNEL_READY) {
grpc_channel_watch_connectivity_state( grpc_channel_watch_connectivity_state(
client, state, GRPC_TIMEOUT_SECONDS_TO_DEADLINE(3), f->cq, tag(99)); client, state, GRPC_TIMEOUT_SECONDS_TO_DEADLINE(3), f->cq, tag(99));
cq_expect_completion(cqv, tag(99), 1); CQ_EXPECT_COMPLETION(cqv, tag(99), 1);
cq_verify(cqv); cq_verify(cqv);
state = grpc_channel_check_connectivity_state(client, 0); state = grpc_channel_check_connectivity_state(client, 0);
GPR_ASSERT(state == GRPC_CHANNEL_READY || GPR_ASSERT(state == GRPC_CHANNEL_READY ||
@ -596,7 +596,7 @@ static void test_ping() {
for (i = 1; i <= 5; i++) { for (i = 1; i <= 5; i++) {
grpc_channel_ping(client, f->cq, tag(i), NULL); grpc_channel_ping(client, f->cq, tag(i), NULL);
cq_expect_completion(cqv, tag(i), 1); CQ_EXPECT_COMPLETION(cqv, tag(i), 1);
cq_verify(cqv); cq_verify(cqv);
} }
gpr_free(rdata.call_details); gpr_free(rdata.call_details);

@ -206,7 +206,7 @@ static void start_rpc(int target_port, grpc_status_code expected_status,
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_verify(cqv); cq_verify(cqv);
gpr_log(GPR_DEBUG, "Rpc status: %d, details: %s", status, details); gpr_log(GPR_DEBUG, "Rpc status: %d, details: %s", status, details);

@ -61,6 +61,8 @@ typedef struct metadata {
list to detail other expectations */ list to detail other expectations */
typedef struct expectation { typedef struct expectation {
struct expectation *next; struct expectation *next;
const char *file;
int line;
grpc_completion_type type; grpc_completion_type type;
void *tag; void *tag;
int success; int success;
@ -180,7 +182,8 @@ static void expectation_to_strvec(gpr_strvec *buf, expectation *e) {
switch (e->type) { switch (e->type) {
case GRPC_OP_COMPLETE: case GRPC_OP_COMPLETE:
gpr_asprintf(&tmp, "GRPC_OP_COMPLETE result=%d", e->success); gpr_asprintf(&tmp, "GRPC_OP_COMPLETE result=%d %s:%d", e->success,
e->file, e->line);
gpr_strvec_add(buf, tmp); gpr_strvec_add(buf, tmp);
break; break;
case GRPC_QUEUE_TIMEOUT: case GRPC_QUEUE_TIMEOUT:
@ -214,25 +217,16 @@ static void fail_no_event_received(cq_verifier *v) {
} }
void cq_verify(cq_verifier *v) { void cq_verify(cq_verifier *v) {
gpr_timespec deadline = GRPC_TIMEOUT_SECONDS_TO_DEADLINE(10); const gpr_timespec deadline = GRPC_TIMEOUT_SECONDS_TO_DEADLINE(10);
grpc_event ev;
expectation *e;
char *s;
gpr_strvec have_tags;
gpr_strvec_init(&have_tags);
while (v->first_expectation != NULL) { while (v->first_expectation != NULL) {
ev = grpc_completion_queue_next(v->cq, deadline, NULL); grpc_event ev = grpc_completion_queue_next(v->cq, deadline, NULL);
if (ev.type == GRPC_QUEUE_TIMEOUT) { if (ev.type == GRPC_QUEUE_TIMEOUT) {
fail_no_event_received(v); fail_no_event_received(v);
break; break;
} }
expectation *e;
expectation *prev = NULL; expectation *prev = NULL;
for (e = v->first_expectation; e != NULL; e = e->next) { for (e = v->first_expectation; e != NULL; e = e->next) {
gpr_asprintf(&s, " %p", e->tag);
gpr_strvec_add(&have_tags, s);
if (e->tag == ev.tag) { if (e->tag == ev.tag) {
verify_matches(e, &ev); verify_matches(e, &ev);
if (e == v->first_expectation) v->first_expectation = e->next; if (e == v->first_expectation) v->first_expectation = e->next;
@ -243,18 +237,19 @@ void cq_verify(cq_verifier *v) {
prev = e; prev = e;
} }
if (e == NULL) { if (e == NULL) {
s = grpc_event_string(&ev); char *s = grpc_event_string(&ev);
gpr_log(GPR_ERROR, "cq returned unexpected event: %s", s); gpr_log(GPR_ERROR, "cq returned unexpected event: %s", s);
gpr_free(s); gpr_free(s);
s = gpr_strvec_flatten(&have_tags, NULL); gpr_strvec expectations;
gpr_log(GPR_ERROR, "expected tags:%s", s); gpr_strvec_init(&expectations);
expectations_to_strvec(&expectations, v);
s = gpr_strvec_flatten(&expectations, NULL);
gpr_strvec_destroy(&expectations);
gpr_log(GPR_ERROR, "expected tags:\n%s", s);
gpr_free(s); gpr_free(s);
gpr_strvec_destroy(&have_tags);
abort(); abort();
} }
} }
gpr_strvec_destroy(&have_tags);
} }
void cq_verify_empty_timeout(cq_verifier *v, int timeout_sec) { void cq_verify_empty_timeout(cq_verifier *v, int timeout_sec) {
@ -276,16 +271,19 @@ void cq_verify_empty_timeout(cq_verifier *v, int timeout_sec) {
void cq_verify_empty(cq_verifier *v) { cq_verify_empty_timeout(v, 1); } void cq_verify_empty(cq_verifier *v) { cq_verify_empty_timeout(v, 1); }
static void add(cq_verifier *v, grpc_completion_type type, void *tag, static void add(cq_verifier *v, const char *file, int line,
bool success) { grpc_completion_type type, void *tag, bool success) {
expectation *e = gpr_malloc(sizeof(expectation)); expectation *e = gpr_malloc(sizeof(expectation));
e->type = type; e->type = type;
e->file = file;
e->line = line;
e->tag = tag; e->tag = tag;
e->success = success; e->success = success;
e->next = v->first_expectation; e->next = v->first_expectation;
v->first_expectation = e; v->first_expectation = e;
} }
void cq_expect_completion(cq_verifier *v, void *tag, bool success) { void cq_expect_completion(cq_verifier *v, const char *file, int line, void *tag,
add(v, GRPC_OP_COMPLETE, tag, success); bool success) {
add(v, file, line, GRPC_OP_COMPLETE, tag, success);
} }

@ -62,7 +62,10 @@ void cq_verify_empty_timeout(cq_verifier *v, int timeout_sec);
Any functions taking ... expect a NULL terminated list of key/value pairs Any functions taking ... expect a NULL terminated list of key/value pairs
(each pair using two parameter slots) of metadata that MUST be present in (each pair using two parameter slots) of metadata that MUST be present in
the event. */ the event. */
void cq_expect_completion(cq_verifier *v, void *tag, bool success); void cq_expect_completion(cq_verifier *v, const char *file, int line, void *tag,
bool success);
#define CQ_EXPECT_COMPLETION(v, tag, success) \
cq_expect_completion(v, __FILE__, __LINE__, tag, success)
int byte_buffer_eq_string(grpc_byte_buffer *byte_buffer, const char *string); int byte_buffer_eq_string(grpc_byte_buffer *byte_buffer, const char *string);
int contains_metadata(grpc_metadata_array *array, const char *key, int contains_metadata(grpc_metadata_array *array, const char *key,

@ -199,7 +199,7 @@ void test_connect(const char *server_host, const char *client_host, int port,
error = grpc_server_request_call(server, &s, &call_details, error = grpc_server_request_call(server, &s, &call_details,
&request_metadata_recv, cq, cq, tag(101)); &request_metadata_recv, cq, cq, tag(101));
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(101), 1); CQ_EXPECT_COMPLETION(cqv, tag(101), 1);
cq_verify(cqv); cq_verify(cqv);
memset(ops, 0, sizeof(ops)); memset(ops, 0, sizeof(ops));
@ -221,8 +221,8 @@ void test_connect(const char *server_host, const char *client_host, int port,
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(102), 1); CQ_EXPECT_COMPLETION(cqv, tag(102), 1);
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_verify(cqv); cq_verify(cqv);
peer = grpc_call_get_peer(c); peer = grpc_call_get_peer(c);
@ -238,7 +238,7 @@ void test_connect(const char *server_host, const char *client_host, int port,
grpc_call_destroy(s); grpc_call_destroy(s);
} else { } else {
/* Check for a failed connection. */ /* Check for a failed connection. */
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(status == GRPC_STATUS_UNAVAILABLE); GPR_ASSERT(status == GRPC_STATUS_UNAVAILABLE);

@ -331,7 +331,7 @@ static void simple_request_body(grpc_end2end_test_fixture f,
error = grpc_call_start_batch(c, ops, (size_t)(op - ops), tag(1), NULL); error = grpc_call_start_batch(c, ops, (size_t)(op - ops), tag(1), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(1), expected_result == SUCCESS); CQ_EXPECT_COMPLETION(cqv, tag(1), expected_result == SUCCESS);
cq_verify(cqv); cq_verify(cqv);
grpc_call_destroy(c); grpc_call_destroy(c);

@ -44,6 +44,7 @@
"\x0Dgrpc-encoding" "\x0Dgrpc-encoding"
"\x1Egrpc-internal-encoding-request" "\x1Egrpc-internal-encoding-request"
"\x0Cgrpc-message" "\x0Cgrpc-message"
"\x10grpc-payload-bin"
"\x0Bgrpc-status" "\x0Bgrpc-status"
"\x0Cgrpc-timeout" "\x0Cgrpc-timeout"
"\x10grpc-tracing-bin" "\x10grpc-tracing-bin"

@ -175,8 +175,8 @@ int main(int argc, char **argv) {
set_resolve_port(port1); set_resolve_port(port1);
/* first call should now start */ /* first call should now start */
cq_expect_completion(cqv, tag(0x101), 1); CQ_EXPECT_COMPLETION(cqv, tag(0x101), 1);
cq_expect_completion(cqv, tag(0x301), 1); CQ_EXPECT_COMPLETION(cqv, tag(0x301), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(GRPC_CHANNEL_READY == GPR_ASSERT(GRPC_CHANNEL_READY ==
@ -200,7 +200,7 @@ int main(int argc, char **argv) {
* we should see a connectivity change and then nothing */ * we should see a connectivity change and then nothing */
set_resolve_port(-1); set_resolve_port(-1);
grpc_server_shutdown_and_notify(server1, cq, tag(0xdead1)); grpc_server_shutdown_and_notify(server1, cq, tag(0xdead1));
cq_expect_completion(cqv, tag(0x9999), 1); CQ_EXPECT_COMPLETION(cqv, tag(0x9999), 1);
cq_verify(cqv); cq_verify(cqv);
cq_verify_empty(cqv); cq_verify_empty(cqv);
@ -250,8 +250,8 @@ int main(int argc, char **argv) {
&request_metadata2, cq, cq, tag(0x401))); &request_metadata2, cq, cq, tag(0x401)));
/* second call should now start */ /* second call should now start */
cq_expect_completion(cqv, tag(0x201), 1); CQ_EXPECT_COMPLETION(cqv, tag(0x201), 1);
cq_expect_completion(cqv, tag(0x401), 1); CQ_EXPECT_COMPLETION(cqv, tag(0x401), 1);
cq_verify(cqv); cq_verify(cqv);
/* listen for close on the server call to probe for finishing */ /* listen for close on the server call to probe for finishing */
@ -273,12 +273,12 @@ int main(int argc, char **argv) {
grpc_call_cancel(call2, NULL); grpc_call_cancel(call2, NULL);
/* now everything else should finish */ /* now everything else should finish */
cq_expect_completion(cqv, tag(0x102), 1); CQ_EXPECT_COMPLETION(cqv, tag(0x102), 1);
cq_expect_completion(cqv, tag(0x202), 1); CQ_EXPECT_COMPLETION(cqv, tag(0x202), 1);
cq_expect_completion(cqv, tag(0x302), 1); CQ_EXPECT_COMPLETION(cqv, tag(0x302), 1);
cq_expect_completion(cqv, tag(0x402), 1); CQ_EXPECT_COMPLETION(cqv, tag(0x402), 1);
cq_expect_completion(cqv, tag(0xdead1), 1); CQ_EXPECT_COMPLETION(cqv, tag(0xdead1), 1);
cq_expect_completion(cqv, tag(0xdead2), 1); CQ_EXPECT_COMPLETION(cqv, tag(0xdead2), 1);
cq_verify(cqv); cq_verify(cqv);
grpc_call_destroy(call1); grpc_call_destroy(call1);

@ -116,8 +116,8 @@ static void prepare_test(int is_client) {
&g_state.call_details, &g_state.call_details,
&g_state.server_initial_metadata_recv, &g_state.server_initial_metadata_recv,
g_state.cq, g_state.cq, tag(101))); g_state.cq, g_state.cq, tag(101)));
cq_expect_completion(g_state.cqv, tag(101), 1); CQ_EXPECT_COMPLETION(g_state.cqv, tag(101), 1);
cq_expect_completion(g_state.cqv, tag(1), 1); CQ_EXPECT_COMPLETION(g_state.cqv, tag(1), 1);
cq_verify(g_state.cqv); cq_verify(g_state.cqv);
} }
} }
@ -191,7 +191,7 @@ static void test_send_initial_metadata_more_than_once() {
GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(g_state.call, g_state.ops, GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(g_state.call, g_state.ops,
(size_t)(op - g_state.ops), (size_t)(op - g_state.ops),
tag(1), NULL)); tag(1), NULL));
cq_expect_completion(g_state.cqv, tag(1), 0); CQ_EXPECT_COMPLETION(g_state.cqv, tag(1), 0);
cq_verify(g_state.cqv); cq_verify(g_state.cqv);
op = g_state.ops; op = g_state.ops;
@ -312,7 +312,7 @@ static void test_receive_initial_metadata_twice_at_client() {
GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(g_state.call, g_state.ops, GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(g_state.call, g_state.ops,
(size_t)(op - g_state.ops), (size_t)(op - g_state.ops),
tag(1), NULL)); tag(1), NULL));
cq_expect_completion(g_state.cqv, tag(1), 0); CQ_EXPECT_COMPLETION(g_state.cqv, tag(1), 0);
cq_verify(g_state.cqv); cq_verify(g_state.cqv);
op = g_state.ops; op = g_state.ops;
op->op = GRPC_OP_RECV_INITIAL_METADATA; op->op = GRPC_OP_RECV_INITIAL_METADATA;
@ -405,7 +405,7 @@ static void test_recv_status_on_client_twice() {
GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(g_state.call, g_state.ops, GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(g_state.call, g_state.ops,
(size_t)(op - g_state.ops), (size_t)(op - g_state.ops),
tag(1), NULL)); tag(1), NULL));
cq_expect_completion(g_state.cqv, tag(1), 1); CQ_EXPECT_COMPLETION(g_state.cqv, tag(1), 1);
cq_verify(g_state.cqv); cq_verify(g_state.cqv);
op = g_state.ops; op = g_state.ops;

@ -86,7 +86,7 @@ int main(int argc, char **argv) {
GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch( GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(
call, ops, (size_t)(op - ops), tag(1), NULL)); call, ops, (size_t)(op - ops), tag(1), NULL));
/* verify that all tags get completed */ /* verify that all tags get completed */
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(status == GRPC_STATUS_DEADLINE_EXCEEDED); GPR_ASSERT(status == GRPC_STATUS_DEADLINE_EXCEEDED);

@ -148,7 +148,7 @@ static void simple_request_body(grpc_end2end_test_fixture f) {
error = grpc_call_start_batch(c, ops, (size_t)(op - ops), tag(1), NULL); error = grpc_call_start_batch(c, ops, (size_t)(op - ops), tag(1), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(status == GRPC_STATUS_INTERNAL); GPR_ASSERT(status == GRPC_STATUS_INTERNAL);

@ -197,7 +197,7 @@ static void test_request_response_with_metadata_and_payload(
grpc_server_request_call(f.server, &s, &call_details, grpc_server_request_call(f.server, &s, &call_details,
&request_metadata_recv, f.cq, f.cq, tag(101)); &request_metadata_recv, f.cq, f.cq, tag(101));
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(101), 1); CQ_EXPECT_COMPLETION(cqv, tag(101), 1);
cq_verify(cqv); cq_verify(cqv);
memset(ops, 0, sizeof(ops)); memset(ops, 0, sizeof(ops));
@ -216,7 +216,7 @@ static void test_request_response_with_metadata_and_payload(
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(102), 1); CQ_EXPECT_COMPLETION(cqv, tag(102), 1);
cq_verify(cqv); cq_verify(cqv);
memset(ops, 0, sizeof(ops)); memset(ops, 0, sizeof(ops));
@ -241,8 +241,8 @@ static void test_request_response_with_metadata_and_payload(
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(103), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(103), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(103), 1); CQ_EXPECT_COMPLETION(cqv, tag(103), 1);
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(status == GRPC_STATUS_OK); GPR_ASSERT(status == GRPC_STATUS_OK);

@ -232,7 +232,7 @@ static void request_response_with_payload_and_call_creds(
grpc_server_request_call(f.server, &s, &call_details, grpc_server_request_call(f.server, &s, &call_details,
&request_metadata_recv, f.cq, f.cq, tag(101)); &request_metadata_recv, f.cq, f.cq, tag(101));
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(101), 1); CQ_EXPECT_COMPLETION(cqv, tag(101), 1);
cq_verify(cqv); cq_verify(cqv);
s_auth_context = grpc_call_auth_context(s); s_auth_context = grpc_call_auth_context(s);
GPR_ASSERT(s_auth_context != NULL); GPR_ASSERT(s_auth_context != NULL);
@ -262,7 +262,7 @@ static void request_response_with_payload_and_call_creds(
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(102), 1); CQ_EXPECT_COMPLETION(cqv, tag(102), 1);
cq_verify(cqv); cq_verify(cqv);
memset(ops, 0, sizeof(ops)); memset(ops, 0, sizeof(ops));
@ -287,8 +287,8 @@ static void request_response_with_payload_and_call_creds(
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(103), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(103), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(103), 1); CQ_EXPECT_COMPLETION(cqv, tag(103), 1);
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(status == GRPC_STATUS_OK); GPR_ASSERT(status == GRPC_STATUS_OK);
@ -448,7 +448,7 @@ static void test_request_with_server_rejecting_client_creds(
error = grpc_call_start_batch(c, ops, (size_t)(op - ops), tag(1), NULL); error = grpc_call_start_batch(c, ops, (size_t)(op - ops), tag(1), NULL);
GPR_ASSERT(error == GRPC_CALL_OK); GPR_ASSERT(error == GRPC_CALL_OK);
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(status == GRPC_STATUS_UNAUTHENTICATED); GPR_ASSERT(status == GRPC_STATUS_UNAUTHENTICATED);

@ -170,7 +170,7 @@ static void test_cancel_after_accept(grpc_end2end_test_config config,
error = grpc_server_request_call(f.server, &s, &call_details, error = grpc_server_request_call(f.server, &s, &call_details,
&request_metadata_recv, f.cq, f.cq, tag(2)); &request_metadata_recv, f.cq, f.cq, tag(2));
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(2), 1); CQ_EXPECT_COMPLETION(cqv, tag(2), 1);
cq_verify(cqv); cq_verify(cqv);
memset(ops, 0, sizeof(ops)); memset(ops, 0, sizeof(ops));
@ -200,8 +200,8 @@ static void test_cancel_after_accept(grpc_end2end_test_config config,
GPR_ASSERT(GRPC_CALL_OK == mode.initiate_cancel(c, NULL)); GPR_ASSERT(GRPC_CALL_OK == mode.initiate_cancel(c, NULL));
cq_expect_completion(cqv, tag(3), 1); CQ_EXPECT_COMPLETION(cqv, tag(3), 1);
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(status == mode.expect_status || status == GRPC_STATUS_INTERNAL); GPR_ASSERT(status == mode.expect_status || status == GRPC_STATUS_INTERNAL);

@ -174,7 +174,7 @@ static void test_cancel_after_accept_and_writes_closed(
error = grpc_server_request_call(f.server, &s, &call_details, error = grpc_server_request_call(f.server, &s, &call_details,
&request_metadata_recv, f.cq, f.cq, tag(2)); &request_metadata_recv, f.cq, f.cq, tag(2));
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(2), 1); CQ_EXPECT_COMPLETION(cqv, tag(2), 1);
cq_verify(cqv); cq_verify(cqv);
memset(ops, 0, sizeof(ops)); memset(ops, 0, sizeof(ops));
@ -204,8 +204,8 @@ static void test_cancel_after_accept_and_writes_closed(
GPR_ASSERT(GRPC_CALL_OK == mode.initiate_cancel(c, NULL)); GPR_ASSERT(GRPC_CALL_OK == mode.initiate_cancel(c, NULL));
cq_expect_completion(cqv, tag(3), 1); CQ_EXPECT_COMPLETION(cqv, tag(3), 1);
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(status == mode.expect_status || status == GRPC_STATUS_INTERNAL); GPR_ASSERT(status == mode.expect_status || status == GRPC_STATUS_INTERNAL);

@ -168,7 +168,7 @@ static void test_cancel_after_invoke(grpc_end2end_test_config config,
GPR_ASSERT(GRPC_CALL_OK == mode.initiate_cancel(c, NULL)); GPR_ASSERT(GRPC_CALL_OK == mode.initiate_cancel(c, NULL));
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(status == mode.expect_status || status == GRPC_STATUS_INTERNAL); GPR_ASSERT(status == mode.expect_status || status == GRPC_STATUS_INTERNAL);

@ -166,7 +166,7 @@ static void test_cancel_before_invoke(grpc_end2end_test_config config,
error = grpc_call_start_batch(c, ops, test_ops, tag(1), NULL); error = grpc_call_start_batch(c, ops, test_ops, tag(1), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(status == GRPC_STATUS_CANCELLED); GPR_ASSERT(status == GRPC_STATUS_CANCELLED);

@ -150,7 +150,7 @@ static void simple_request_body(grpc_end2end_test_fixture f, size_t num_ops) {
grpc_call_cancel_with_status(c, GRPC_STATUS_UNIMPLEMENTED, "xyz", NULL); grpc_call_cancel_with_status(c, GRPC_STATUS_UNIMPLEMENTED, "xyz", NULL);
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(status == GRPC_STATUS_UNIMPLEMENTED); GPR_ASSERT(status == GRPC_STATUS_UNIMPLEMENTED);

@ -196,7 +196,7 @@ static void request_for_disabled_algorithm(
grpc_server_request_call(f.server, &s, &call_details, grpc_server_request_call(f.server, &s, &call_details,
&request_metadata_recv, f.cq, f.cq, tag(101)); &request_metadata_recv, f.cq, f.cq, tag(101));
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(101), true); CQ_EXPECT_COMPLETION(cqv, tag(101), true);
cq_verify(cqv); cq_verify(cqv);
op = ops; op = ops;
@ -213,7 +213,7 @@ static void request_for_disabled_algorithm(
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(102), false); CQ_EXPECT_COMPLETION(cqv, tag(102), false);
op = ops; op = ops;
op->op = GRPC_OP_RECV_CLOSE_ON_SERVER; op->op = GRPC_OP_RECV_CLOSE_ON_SERVER;
@ -224,8 +224,8 @@ static void request_for_disabled_algorithm(
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(103), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(103), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(103), true); CQ_EXPECT_COMPLETION(cqv, tag(103), true);
cq_expect_completion(cqv, tag(1), true); CQ_EXPECT_COMPLETION(cqv, tag(1), true);
cq_verify(cqv); cq_verify(cqv);
/* call was cancelled (closed) ... */ /* call was cancelled (closed) ... */
@ -359,7 +359,7 @@ static void request_with_payload_template(
grpc_server_request_call(f.server, &s, &call_details, grpc_server_request_call(f.server, &s, &call_details,
&request_metadata_recv, f.cq, f.cq, tag(100)); &request_metadata_recv, f.cq, f.cq, tag(100));
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(100), true); CQ_EXPECT_COMPLETION(cqv, tag(100), true);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(GPR_BITCOUNT(grpc_call_test_only_get_encodings_accepted_by_peer( GPR_ASSERT(GPR_BITCOUNT(grpc_call_test_only_get_encodings_accepted_by_peer(
@ -419,7 +419,7 @@ static void request_with_payload_template(
op++; op++;
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(102), 1); CQ_EXPECT_COMPLETION(cqv, tag(102), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(request_payload_recv->type == GRPC_BB_RAW); GPR_ASSERT(request_payload_recv->type == GRPC_BB_RAW);
@ -436,8 +436,8 @@ static void request_with_payload_template(
op++; op++;
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(103), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(103), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(103), 1); CQ_EXPECT_COMPLETION(cqv, tag(103), 1);
cq_expect_completion(cqv, tag(2), 1); CQ_EXPECT_COMPLETION(cqv, tag(2), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(response_payload_recv->type == GRPC_BB_RAW); GPR_ASSERT(response_payload_recv->type == GRPC_BB_RAW);
@ -482,10 +482,10 @@ static void request_with_payload_template(
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(104), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(104), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_expect_completion(cqv, tag(3), 1); CQ_EXPECT_COMPLETION(cqv, tag(3), 1);
cq_expect_completion(cqv, tag(101), 1); CQ_EXPECT_COMPLETION(cqv, tag(101), 1);
cq_expect_completion(cqv, tag(104), 1); CQ_EXPECT_COMPLETION(cqv, tag(104), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(status == GRPC_STATUS_OK); GPR_ASSERT(status == GRPC_STATUS_OK);

@ -102,7 +102,7 @@ static void test_connectivity(grpc_end2end_test_config config) {
f.cq, tag(2)); f.cq, tag(2));
/* and now the watch should trigger */ /* and now the watch should trigger */
cq_expect_completion(cqv, tag(2), 1); CQ_EXPECT_COMPLETION(cqv, tag(2), 1);
cq_verify(cqv); cq_verify(cqv);
state = grpc_channel_check_connectivity_state(f.client, 0); state = grpc_channel_check_connectivity_state(f.client, 0);
GPR_ASSERT(state == GRPC_CHANNEL_TRANSIENT_FAILURE || GPR_ASSERT(state == GRPC_CHANNEL_TRANSIENT_FAILURE ||
@ -112,7 +112,7 @@ static void test_connectivity(grpc_end2end_test_config config) {
grpc_channel_watch_connectivity_state(f.client, GRPC_CHANNEL_CONNECTING, grpc_channel_watch_connectivity_state(f.client, GRPC_CHANNEL_CONNECTING,
GRPC_TIMEOUT_SECONDS_TO_DEADLINE(3), GRPC_TIMEOUT_SECONDS_TO_DEADLINE(3),
f.cq, tag(3)); f.cq, tag(3));
cq_expect_completion(cqv, tag(3), 1); CQ_EXPECT_COMPLETION(cqv, tag(3), 1);
cq_verify(cqv); cq_verify(cqv);
state = grpc_channel_check_connectivity_state(f.client, 0); state = grpc_channel_check_connectivity_state(f.client, 0);
GPR_ASSERT(state == GRPC_CHANNEL_TRANSIENT_FAILURE || GPR_ASSERT(state == GRPC_CHANNEL_TRANSIENT_FAILURE ||
@ -130,7 +130,7 @@ static void test_connectivity(grpc_end2end_test_config config) {
while (state != GRPC_CHANNEL_READY) { while (state != GRPC_CHANNEL_READY) {
grpc_channel_watch_connectivity_state( grpc_channel_watch_connectivity_state(
f.client, state, GRPC_TIMEOUT_SECONDS_TO_DEADLINE(3), f.cq, tag(4)); f.client, state, GRPC_TIMEOUT_SECONDS_TO_DEADLINE(3), f.cq, tag(4));
cq_expect_completion(cqv, tag(4), 1); CQ_EXPECT_COMPLETION(cqv, tag(4), 1);
cq_verify(cqv); cq_verify(cqv);
state = grpc_channel_check_connectivity_state(f.client, 0); state = grpc_channel_check_connectivity_state(f.client, 0);
GPR_ASSERT(state == GRPC_CHANNEL_READY || GPR_ASSERT(state == GRPC_CHANNEL_READY ||
@ -148,8 +148,8 @@ static void test_connectivity(grpc_end2end_test_config config) {
grpc_server_shutdown_and_notify(f.server, f.cq, tag(0xdead)); grpc_server_shutdown_and_notify(f.server, f.cq, tag(0xdead));
cq_expect_completion(cqv, tag(5), 1); CQ_EXPECT_COMPLETION(cqv, tag(5), 1);
cq_expect_completion(cqv, tag(0xdead), 1); CQ_EXPECT_COMPLETION(cqv, tag(0xdead), 1);
cq_verify(cqv); cq_verify(cqv);
state = grpc_channel_check_connectivity_state(f.client, 0); state = grpc_channel_check_connectivity_state(f.client, 0);
GPR_ASSERT(state == GRPC_CHANNEL_TRANSIENT_FAILURE || GPR_ASSERT(state == GRPC_CHANNEL_TRANSIENT_FAILURE ||

@ -160,7 +160,7 @@ static void simple_request_body(grpc_end2end_test_fixture f) {
grpc_server_request_call(f.server, &s, &call_details, grpc_server_request_call(f.server, &s, &call_details,
&request_metadata_recv, f.cq, f.cq, tag(101)); &request_metadata_recv, f.cq, f.cq, tag(101));
GPR_ASSERT(error == GRPC_CALL_OK); GPR_ASSERT(error == GRPC_CALL_OK);
cq_expect_completion(cqv, tag(101), 1); CQ_EXPECT_COMPLETION(cqv, tag(101), 1);
cq_verify(cqv); cq_verify(cqv);
peer = grpc_call_get_peer(s); peer = grpc_call_get_peer(s);
@ -194,8 +194,8 @@ static void simple_request_body(grpc_end2end_test_fixture f) {
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL);
GPR_ASSERT(error == GRPC_CALL_OK); GPR_ASSERT(error == GRPC_CALL_OK);
cq_expect_completion(cqv, tag(102), 1); CQ_EXPECT_COMPLETION(cqv, tag(102), 1);
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(status == GRPC_STATUS_UNIMPLEMENTED); GPR_ASSERT(status == GRPC_STATUS_UNIMPLEMENTED);

@ -137,7 +137,7 @@ static void do_request_and_shutdown_server(grpc_end2end_test_fixture *f,
grpc_server_request_call(f->server, &s, &call_details, grpc_server_request_call(f->server, &s, &call_details,
&request_metadata_recv, f->cq, f->cq, tag(101)); &request_metadata_recv, f->cq, f->cq, tag(101));
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(101), 1); CQ_EXPECT_COMPLETION(cqv, tag(101), 1);
cq_verify(cqv); cq_verify(cqv);
/* should be able to shut down the server early /* should be able to shut down the server early
@ -166,9 +166,9 @@ static void do_request_and_shutdown_server(grpc_end2end_test_fixture *f,
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(102), 1); CQ_EXPECT_COMPLETION(cqv, tag(102), 1);
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_expect_completion(cqv, tag(1000), 1); CQ_EXPECT_COMPLETION(cqv, tag(1000), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(status == GRPC_STATUS_UNIMPLEMENTED); GPR_ASSERT(status == GRPC_STATUS_UNIMPLEMENTED);

@ -110,7 +110,7 @@ static void empty_batch_body(grpc_end2end_test_fixture f) {
error = grpc_call_start_batch(c, op, 0, tag(1), NULL); error = grpc_call_start_batch(c, op, 0, tag(1), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_verify(cqv); cq_verify(cqv);
grpc_call_destroy(c); grpc_call_destroy(c);

@ -174,7 +174,7 @@ static void test_request(grpc_end2end_test_config config) {
&request_metadata_recv, f.cq, f.cq, tag(101)); &request_metadata_recv, f.cq, f.cq, tag(101));
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(status == GRPC_STATUS_PERMISSION_DENIED); GPR_ASSERT(status == GRPC_STATUS_PERMISSION_DENIED);

@ -170,7 +170,7 @@ static void test_request(grpc_end2end_test_config config) {
&request_metadata_recv, f.cq, f.cq, tag(101)); &request_metadata_recv, f.cq, f.cq, tag(101));
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(status == GRPC_STATUS_PERMISSION_DENIED); GPR_ASSERT(status == GRPC_STATUS_PERMISSION_DENIED);

@ -152,7 +152,7 @@ static void test_early_server_shutdown_finishes_inflight_calls(
grpc_server_request_call(f.server, &s, &call_details, grpc_server_request_call(f.server, &s, &call_details,
&request_metadata_recv, f.cq, f.cq, tag(101)); &request_metadata_recv, f.cq, f.cq, tag(101));
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(101), 1); CQ_EXPECT_COMPLETION(cqv, tag(101), 1);
cq_verify(cqv); cq_verify(cqv);
/* shutdown and destroy the server */ /* shutdown and destroy the server */
@ -181,9 +181,9 @@ static void test_early_server_shutdown_finishes_inflight_calls(
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(102), 1); CQ_EXPECT_COMPLETION(cqv, tag(102), 1);
cq_expect_completion(cqv, tag(0xdead), 1); CQ_EXPECT_COMPLETION(cqv, tag(0xdead), 1);
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_verify(cqv); cq_verify(cqv);
grpc_call_destroy(s); grpc_call_destroy(s);

@ -157,7 +157,7 @@ static void simple_request_body(grpc_end2end_test_fixture f) {
grpc_server_request_call(f.server, &s, &call_details, grpc_server_request_call(f.server, &s, &call_details,
&request_metadata_recv, f.cq, f.cq, tag(101)); &request_metadata_recv, f.cq, f.cq, tag(101));
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(101), 1); CQ_EXPECT_COMPLETION(cqv, tag(101), 1);
cq_verify(cqv); cq_verify(cqv);
memset(ops, 0, sizeof(ops)); memset(ops, 0, sizeof(ops));
@ -182,8 +182,8 @@ static void simple_request_body(grpc_end2end_test_fixture f) {
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(102), 1); CQ_EXPECT_COMPLETION(cqv, tag(102), 1);
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(status == GRPC_STATUS_UNIMPLEMENTED); GPR_ASSERT(status == GRPC_STATUS_UNIMPLEMENTED);

@ -310,7 +310,7 @@ static void simple_request_body(grpc_end2end_test_fixture f, size_t index) {
grpc_server_request_call(f.server, &s, &call_details, grpc_server_request_call(f.server, &s, &call_details,
&request_metadata_recv, f.cq, f.cq, tag(101)); &request_metadata_recv, f.cq, f.cq, tag(101));
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(101), 1); CQ_EXPECT_COMPLETION(cqv, tag(101), 1);
cq_verify(cqv); cq_verify(cqv);
memset(ops, 0, sizeof(ops)); memset(ops, 0, sizeof(ops));
@ -335,8 +335,8 @@ static void simple_request_body(grpc_end2end_test_fixture f, size_t index) {
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(102), 1); CQ_EXPECT_COMPLETION(cqv, tag(102), 1);
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(status == GRPC_STATUS_UNIMPLEMENTED); GPR_ASSERT(status == GRPC_STATUS_UNIMPLEMENTED);

@ -161,7 +161,7 @@ static void simple_request_body(grpc_end2end_test_fixture f) {
grpc_server_request_call(f.server, &s, &call_details, grpc_server_request_call(f.server, &s, &call_details,
&request_metadata_recv, f.cq, f.cq, tag(101)); &request_metadata_recv, f.cq, f.cq, tag(101));
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(101), 1); CQ_EXPECT_COMPLETION(cqv, tag(101), 1);
cq_verify(cqv); cq_verify(cqv);
peer = grpc_call_get_peer(s); peer = grpc_call_get_peer(s);
@ -195,8 +195,8 @@ static void simple_request_body(grpc_end2end_test_fixture f) {
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(102), 1); CQ_EXPECT_COMPLETION(cqv, tag(102), 1);
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(status == GRPC_STATUS_UNIMPLEMENTED); GPR_ASSERT(status == GRPC_STATUS_UNIMPLEMENTED);

@ -177,7 +177,7 @@ static void test_invoke_large_request(grpc_end2end_test_config config) {
grpc_server_request_call(f.server, &s, &call_details, grpc_server_request_call(f.server, &s, &call_details,
&request_metadata_recv, f.cq, f.cq, tag(101)); &request_metadata_recv, f.cq, f.cq, tag(101));
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(101), 1); CQ_EXPECT_COMPLETION(cqv, tag(101), 1);
cq_verify(cqv); cq_verify(cqv);
memset(ops, 0, sizeof(ops)); memset(ops, 0, sizeof(ops));
@ -195,7 +195,7 @@ static void test_invoke_large_request(grpc_end2end_test_config config) {
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(102), 1); CQ_EXPECT_COMPLETION(cqv, tag(102), 1);
cq_verify(cqv); cq_verify(cqv);
memset(ops, 0, sizeof(ops)); memset(ops, 0, sizeof(ops));
@ -220,8 +220,8 @@ static void test_invoke_large_request(grpc_end2end_test_config config) {
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(103), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(103), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(103), 1); CQ_EXPECT_COMPLETION(cqv, tag(103), 1);
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(status == GRPC_STATUS_UNIMPLEMENTED); GPR_ASSERT(status == GRPC_STATUS_UNIMPLEMENTED);

@ -179,7 +179,7 @@ static void test_request_with_large_metadata(grpc_end2end_test_config config) {
&request_metadata_recv, f.cq, f.cq, tag(101)); &request_metadata_recv, f.cq, f.cq, tag(101));
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(101), 1); CQ_EXPECT_COMPLETION(cqv, tag(101), 1);
cq_verify(cqv); cq_verify(cqv);
memset(ops, 0, sizeof(ops)); memset(ops, 0, sizeof(ops));
@ -198,7 +198,7 @@ static void test_request_with_large_metadata(grpc_end2end_test_config config) {
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(102), 1); CQ_EXPECT_COMPLETION(cqv, tag(102), 1);
cq_verify(cqv); cq_verify(cqv);
memset(ops, 0, sizeof(ops)); memset(ops, 0, sizeof(ops));
@ -220,8 +220,8 @@ static void test_request_with_large_metadata(grpc_end2end_test_config config) {
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(103), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(103), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(103), 1); CQ_EXPECT_COMPLETION(cqv, tag(103), 1);
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(status == GRPC_STATUS_OK); GPR_ASSERT(status == GRPC_STATUS_OK);

@ -204,7 +204,7 @@ static void request_response_with_payload(grpc_end2end_test_fixture f,
grpc_server_request_call(f.server, &s, &call_details, grpc_server_request_call(f.server, &s, &call_details,
&request_metadata_recv, f.cq, f.cq, tag(101)); &request_metadata_recv, f.cq, f.cq, tag(101));
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(101), 1); CQ_EXPECT_COMPLETION(cqv, tag(101), 1);
cq_verify(cqv); cq_verify(cqv);
memset(ops, 0, sizeof(ops)); memset(ops, 0, sizeof(ops));
@ -222,7 +222,7 @@ static void request_response_with_payload(grpc_end2end_test_fixture f,
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(102), 1); CQ_EXPECT_COMPLETION(cqv, tag(102), 1);
cq_verify(cqv); cq_verify(cqv);
memset(ops, 0, sizeof(ops)); memset(ops, 0, sizeof(ops));
@ -249,8 +249,8 @@ static void request_response_with_payload(grpc_end2end_test_fixture f,
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(103), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(103), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(103), 1); CQ_EXPECT_COMPLETION(cqv, tag(103), 1);
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(status == GRPC_STATUS_OK); GPR_ASSERT(status == GRPC_STATUS_OK);

@ -153,7 +153,7 @@ static void simple_request_body(grpc_end2end_test_fixture f) {
grpc_server_request_call(f.server, &s, &call_details, grpc_server_request_call(f.server, &s, &call_details,
&request_metadata_recv, f.cq, f.cq, tag(101)); &request_metadata_recv, f.cq, f.cq, tag(101));
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(101), 1); CQ_EXPECT_COMPLETION(cqv, tag(101), 1);
cq_verify(cqv); cq_verify(cqv);
memset(ops, 0, sizeof(ops)); memset(ops, 0, sizeof(ops));
@ -178,8 +178,8 @@ static void simple_request_body(grpc_end2end_test_fixture f) {
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(102), 1); CQ_EXPECT_COMPLETION(cqv, tag(102), 1);
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(status == GRPC_STATUS_UNIMPLEMENTED); GPR_ASSERT(status == GRPC_STATUS_UNIMPLEMENTED);
@ -380,17 +380,17 @@ static void test_max_concurrent_streams(grpc_end2end_test_config config) {
error = grpc_call_start_batch(s1, ops, (size_t)(op - ops), tag(102), NULL); error = grpc_call_start_batch(s1, ops, (size_t)(op - ops), tag(102), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(102), 1); CQ_EXPECT_COMPLETION(cqv, tag(102), 1);
cq_expect_completion(cqv, tag(live_call + 2), 1); CQ_EXPECT_COMPLETION(cqv, tag(live_call + 2), 1);
/* first request is finished, we should be able to start the second */ /* first request is finished, we should be able to start the second */
live_call = (live_call == 300) ? 400 : 300; live_call = (live_call == 300) ? 400 : 300;
cq_expect_completion(cqv, tag(live_call + 1), 1); CQ_EXPECT_COMPLETION(cqv, tag(live_call + 1), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(GRPC_CALL_OK == grpc_server_request_call( GPR_ASSERT(GRPC_CALL_OK == grpc_server_request_call(
f.server, &s2, &call_details, f.server, &s2, &call_details,
&request_metadata_recv, f.cq, f.cq, tag(201))); &request_metadata_recv, f.cq, f.cq, tag(201)));
cq_expect_completion(cqv, tag(201), 1); CQ_EXPECT_COMPLETION(cqv, tag(201), 1);
cq_verify(cqv); cq_verify(cqv);
memset(ops, 0, sizeof(ops)); memset(ops, 0, sizeof(ops));
@ -415,8 +415,8 @@ static void test_max_concurrent_streams(grpc_end2end_test_config config) {
error = grpc_call_start_batch(s2, ops, (size_t)(op - ops), tag(202), NULL); error = grpc_call_start_batch(s2, ops, (size_t)(op - ops), tag(202), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(live_call + 2), 1); CQ_EXPECT_COMPLETION(cqv, tag(live_call + 2), 1);
cq_expect_completion(cqv, tag(202), 1); CQ_EXPECT_COMPLETION(cqv, tag(202), 1);
cq_verify(cqv); cq_verify(cqv);
cq_verifier_destroy(cqv); cq_verifier_destroy(cqv);

@ -177,7 +177,7 @@ static void test_max_message_length(grpc_end2end_test_config config) {
grpc_server_request_call(f.server, &s, &call_details, grpc_server_request_call(f.server, &s, &call_details,
&request_metadata_recv, f.cq, f.cq, tag(101)); &request_metadata_recv, f.cq, f.cq, tag(101));
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(101), 1); CQ_EXPECT_COMPLETION(cqv, tag(101), 1);
cq_verify(cqv); cq_verify(cqv);
memset(ops, 0, sizeof(ops)); memset(ops, 0, sizeof(ops));
@ -195,8 +195,8 @@ static void test_max_message_length(grpc_end2end_test_config config) {
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(102), 1); CQ_EXPECT_COMPLETION(cqv, tag(102), 1);
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(status != GRPC_STATUS_OK); GPR_ASSERT(status != GRPC_STATUS_OK);

@ -148,7 +148,7 @@ static void simple_request_body(grpc_end2end_test_fixture f, size_t num_ops) {
error = grpc_call_start_batch(c, ops, num_ops, tag(1), NULL); error = grpc_call_start_batch(c, ops, num_ops, tag(1), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(status == GRPC_STATUS_DEADLINE_EXCEEDED); GPR_ASSERT(status == GRPC_STATUS_DEADLINE_EXCEEDED);

@ -166,7 +166,7 @@ static void test_invoke_network_status_change(grpc_end2end_test_config config) {
GPR_ASSERT(GRPC_CALL_OK == grpc_server_request_call( GPR_ASSERT(GRPC_CALL_OK == grpc_server_request_call(
f.server, &s, &call_details, f.server, &s, &call_details,
&request_metadata_recv, f.cq, f.cq, tag(101))); &request_metadata_recv, f.cq, f.cq, tag(101)));
cq_expect_completion(cqv, tag(101), 1); CQ_EXPECT_COMPLETION(cqv, tag(101), 1);
cq_verify(cqv); cq_verify(cqv);
op = ops; op = ops;
@ -183,7 +183,7 @@ static void test_invoke_network_status_change(grpc_end2end_test_config config) {
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(102), 1); CQ_EXPECT_COMPLETION(cqv, tag(102), 1);
cq_verify(cqv); cq_verify(cqv);
// Simulate the network loss event // Simulate the network loss event
@ -205,8 +205,8 @@ static void test_invoke_network_status_change(grpc_end2end_test_config config) {
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(103), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(103), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(103), 1); CQ_EXPECT_COMPLETION(cqv, tag(103), 1);
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_verify(cqv); cq_verify(cqv);
// Expected behavior of a RPC when network is lost. // Expected behavior of a RPC when network is lost.

@ -170,7 +170,7 @@ static void request_response_with_payload(grpc_end2end_test_fixture f) {
grpc_server_request_call(f.server, &s, &call_details, grpc_server_request_call(f.server, &s, &call_details,
&request_metadata_recv, f.cq, f.cq, tag(101)); &request_metadata_recv, f.cq, f.cq, tag(101));
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(101), 1); CQ_EXPECT_COMPLETION(cqv, tag(101), 1);
cq_verify(cqv); cq_verify(cqv);
memset(ops, 0, sizeof(ops)); memset(ops, 0, sizeof(ops));
@ -188,7 +188,7 @@ static void request_response_with_payload(grpc_end2end_test_fixture f) {
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(102), 1); CQ_EXPECT_COMPLETION(cqv, tag(102), 1);
cq_verify(cqv); cq_verify(cqv);
memset(ops, 0, sizeof(ops)); memset(ops, 0, sizeof(ops));
@ -213,8 +213,8 @@ static void request_response_with_payload(grpc_end2end_test_fixture f) {
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(103), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(103), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(103), 1); CQ_EXPECT_COMPLETION(cqv, tag(103), 1);
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(status == GRPC_STATUS_OK); GPR_ASSERT(status == GRPC_STATUS_OK);

@ -52,7 +52,7 @@ static void test_ping(grpc_end2end_test_config config) {
config.init_server(&f, NULL); config.init_server(&f, NULL);
grpc_channel_ping(f.client, f.cq, tag(0), NULL); grpc_channel_ping(f.client, f.cq, tag(0), NULL);
cq_expect_completion(cqv, tag(0), 0); CQ_EXPECT_COMPLETION(cqv, tag(0), 0);
/* check that we're still in idle, and start connecting */ /* check that we're still in idle, and start connecting */
GPR_ASSERT(grpc_channel_check_connectivity_state(f.client, 1) == GPR_ASSERT(grpc_channel_check_connectivity_state(f.client, 1) ==
@ -62,7 +62,7 @@ static void test_ping(grpc_end2end_test_config config) {
while (state != GRPC_CHANNEL_READY) { while (state != GRPC_CHANNEL_READY) {
grpc_channel_watch_connectivity_state( grpc_channel_watch_connectivity_state(
f.client, state, GRPC_TIMEOUT_SECONDS_TO_DEADLINE(3), f.cq, tag(99)); f.client, state, GRPC_TIMEOUT_SECONDS_TO_DEADLINE(3), f.cq, tag(99));
cq_expect_completion(cqv, tag(99), 1); CQ_EXPECT_COMPLETION(cqv, tag(99), 1);
cq_verify(cqv); cq_verify(cqv);
state = grpc_channel_check_connectivity_state(f.client, 0); state = grpc_channel_check_connectivity_state(f.client, 0);
GPR_ASSERT(state == GRPC_CHANNEL_READY || GPR_ASSERT(state == GRPC_CHANNEL_READY ||
@ -72,12 +72,12 @@ static void test_ping(grpc_end2end_test_config config) {
for (i = 1; i <= 5; i++) { for (i = 1; i <= 5; i++) {
grpc_channel_ping(f.client, f.cq, tag(i), NULL); grpc_channel_ping(f.client, f.cq, tag(i), NULL);
cq_expect_completion(cqv, tag(i), 1); CQ_EXPECT_COMPLETION(cqv, tag(i), 1);
cq_verify(cqv); cq_verify(cqv);
} }
grpc_server_shutdown_and_notify(f.server, f.cq, tag(0xdead)); grpc_server_shutdown_and_notify(f.server, f.cq, tag(0xdead));
cq_expect_completion(cqv, tag(0xdead), 1); CQ_EXPECT_COMPLETION(cqv, tag(0xdead), 1);
cq_verify(cqv); cq_verify(cqv);
/* cleanup server */ /* cleanup server */

@ -160,7 +160,7 @@ static void test_pingpong_streaming(grpc_end2end_test_config config,
grpc_server_request_call(f.server, &s, &call_details, grpc_server_request_call(f.server, &s, &call_details,
&request_metadata_recv, f.cq, f.cq, tag(100)); &request_metadata_recv, f.cq, f.cq, tag(100));
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(100), 1); CQ_EXPECT_COMPLETION(cqv, tag(100), 1);
cq_verify(cqv); cq_verify(cqv);
memset(ops, 0, sizeof(ops)); memset(ops, 0, sizeof(ops));
@ -206,7 +206,7 @@ static void test_pingpong_streaming(grpc_end2end_test_config config,
op++; op++;
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(102), 1); CQ_EXPECT_COMPLETION(cqv, tag(102), 1);
cq_verify(cqv); cq_verify(cqv);
memset(ops, 0, sizeof(ops)); memset(ops, 0, sizeof(ops));
@ -218,8 +218,8 @@ static void test_pingpong_streaming(grpc_end2end_test_config config,
op++; op++;
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(103), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(103), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(103), 1); CQ_EXPECT_COMPLETION(cqv, tag(103), 1);
cq_expect_completion(cqv, tag(2), 1); CQ_EXPECT_COMPLETION(cqv, tag(2), 1);
cq_verify(cqv); cq_verify(cqv);
grpc_byte_buffer_destroy(request_payload); grpc_byte_buffer_destroy(request_payload);
@ -252,10 +252,10 @@ static void test_pingpong_streaming(grpc_end2end_test_config config,
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(104), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(104), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_expect_completion(cqv, tag(3), 1); CQ_EXPECT_COMPLETION(cqv, tag(3), 1);
cq_expect_completion(cqv, tag(101), 1); CQ_EXPECT_COMPLETION(cqv, tag(101), 1);
cq_expect_completion(cqv, tag(104), 1); CQ_EXPECT_COMPLETION(cqv, tag(104), 1);
cq_verify(cqv); cq_verify(cqv);
grpc_call_destroy(c); grpc_call_destroy(c);

@ -154,7 +154,7 @@ static void simple_request_body(grpc_end2end_test_fixture f, void *rc) {
grpc_server_request_call(f.server, &s, &call_details, grpc_server_request_call(f.server, &s, &call_details,
&request_metadata_recv, f.cq, f.cq, tag(101)); &request_metadata_recv, f.cq, f.cq, tag(101));
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(101), 1); CQ_EXPECT_COMPLETION(cqv, tag(101), 1);
cq_verify(cqv); cq_verify(cqv);
memset(ops, 0, sizeof(ops)); memset(ops, 0, sizeof(ops));
@ -179,8 +179,8 @@ static void simple_request_body(grpc_end2end_test_fixture f, void *rc) {
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(102), 1); CQ_EXPECT_COMPLETION(cqv, tag(102), 1);
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(status == GRPC_STATUS_UNIMPLEMENTED); GPR_ASSERT(status == GRPC_STATUS_UNIMPLEMENTED);

@ -163,7 +163,7 @@ static void test_invoke_request_with_flags(
GPR_ASSERT(expectation == error); GPR_ASSERT(expectation == error);
if (expectation == GRPC_CALL_OK) { if (expectation == GRPC_CALL_OK) {
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_verify(cqv); cq_verify(cqv);
} }

@ -163,7 +163,7 @@ static void test_invoke_request_with_payload(grpc_end2end_test_config config) {
GPR_ASSERT(GRPC_CALL_OK == grpc_server_request_call( GPR_ASSERT(GRPC_CALL_OK == grpc_server_request_call(
f.server, &s, &call_details, f.server, &s, &call_details,
&request_metadata_recv, f.cq, f.cq, tag(101))); &request_metadata_recv, f.cq, f.cq, tag(101)));
cq_expect_completion(cqv, tag(101), 1); CQ_EXPECT_COMPLETION(cqv, tag(101), 1);
cq_verify(cqv); cq_verify(cqv);
memset(ops, 0, sizeof(ops)); memset(ops, 0, sizeof(ops));
@ -181,7 +181,7 @@ static void test_invoke_request_with_payload(grpc_end2end_test_config config) {
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(102), 1); CQ_EXPECT_COMPLETION(cqv, tag(102), 1);
cq_verify(cqv); cq_verify(cqv);
memset(ops, 0, sizeof(ops)); memset(ops, 0, sizeof(ops));
@ -201,8 +201,8 @@ static void test_invoke_request_with_payload(grpc_end2end_test_config config) {
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(103), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(103), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(103), 1); CQ_EXPECT_COMPLETION(cqv, tag(103), 1);
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(status == GRPC_STATUS_OK); GPR_ASSERT(status == GRPC_STATUS_OK);

@ -151,7 +151,7 @@ static void simple_request_body(grpc_end2end_test_fixture f) {
grpc_server_request_call(f.server, &s, &call_details, grpc_server_request_call(f.server, &s, &call_details,
&request_metadata_recv, f.cq, f.cq, tag(101)); &request_metadata_recv, f.cq, f.cq, tag(101));
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(101), 1); CQ_EXPECT_COMPLETION(cqv, tag(101), 1);
cq_verify(cqv); cq_verify(cqv);
memset(ops, 0, sizeof(ops)); memset(ops, 0, sizeof(ops));
@ -176,8 +176,8 @@ static void simple_request_body(grpc_end2end_test_fixture f) {
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(102), 1); CQ_EXPECT_COMPLETION(cqv, tag(102), 1);
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(status == GRPC_STATUS_UNIMPLEMENTED); GPR_ASSERT(status == GRPC_STATUS_UNIMPLEMENTED);

@ -145,7 +145,7 @@ static void test_early_server_shutdown_finishes_inflight_calls(
grpc_server_request_call(f.server, &s, &call_details, grpc_server_request_call(f.server, &s, &call_details,
&request_metadata_recv, f.cq, f.cq, tag(101)); &request_metadata_recv, f.cq, f.cq, tag(101));
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(101), 1); CQ_EXPECT_COMPLETION(cqv, tag(101), 1);
cq_verify(cqv); cq_verify(cqv);
memset(ops, 0, sizeof(ops)); memset(ops, 0, sizeof(ops));
@ -162,9 +162,9 @@ static void test_early_server_shutdown_finishes_inflight_calls(
grpc_server_shutdown_and_notify(f.server, f.cq, tag(1000)); grpc_server_shutdown_and_notify(f.server, f.cq, tag(1000));
grpc_server_cancel_all_calls(f.server); grpc_server_cancel_all_calls(f.server);
cq_expect_completion(cqv, tag(1000), 1); CQ_EXPECT_COMPLETION(cqv, tag(1000), 1);
cq_expect_completion(cqv, tag(102), 1); CQ_EXPECT_COMPLETION(cqv, tag(102), 1);
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_verify(cqv); cq_verify(cqv);
grpc_server_destroy(f.server); grpc_server_destroy(f.server);

@ -102,8 +102,8 @@ static void test_early_server_shutdown_finishes_tags(
f.server, &s, &call_details, f.server, &s, &call_details,
&request_metadata_recv, f.cq, f.cq, tag(101))); &request_metadata_recv, f.cq, f.cq, tag(101)));
grpc_server_shutdown_and_notify(f.server, f.cq, tag(1000)); grpc_server_shutdown_and_notify(f.server, f.cq, tag(1000));
cq_expect_completion(cqv, tag(101), 0); CQ_EXPECT_COMPLETION(cqv, tag(101), 0);
cq_expect_completion(cqv, tag(1000), 1); CQ_EXPECT_COMPLETION(cqv, tag(1000), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(s == NULL); GPR_ASSERT(s == NULL);

@ -148,7 +148,7 @@ static void simple_delayed_request_body(grpc_end2end_test_config config,
grpc_server_request_call(f->server, &s, &call_details, grpc_server_request_call(f->server, &s, &call_details,
&request_metadata_recv, f->cq, f->cq, tag(101)); &request_metadata_recv, f->cq, f->cq, tag(101));
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(101), 1); CQ_EXPECT_COMPLETION(cqv, tag(101), 1);
cq_verify(cqv); cq_verify(cqv);
memset(ops, 0, sizeof(ops)); memset(ops, 0, sizeof(ops));
@ -173,8 +173,8 @@ static void simple_delayed_request_body(grpc_end2end_test_config config,
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(102), 1); CQ_EXPECT_COMPLETION(cqv, tag(102), 1);
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(status == GRPC_STATUS_UNIMPLEMENTED); GPR_ASSERT(status == GRPC_STATUS_UNIMPLEMENTED);

@ -181,7 +181,7 @@ static void test_request_response_with_metadata_and_payload(
grpc_server_request_call(f.server, &s, &call_details, grpc_server_request_call(f.server, &s, &call_details,
&request_metadata_recv, f.cq, f.cq, tag(101)); &request_metadata_recv, f.cq, f.cq, tag(101));
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(101), 1); CQ_EXPECT_COMPLETION(cqv, tag(101), 1);
cq_verify(cqv); cq_verify(cqv);
memset(ops, 0, sizeof(ops)); memset(ops, 0, sizeof(ops));
@ -200,7 +200,7 @@ static void test_request_response_with_metadata_and_payload(
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(102), 1); CQ_EXPECT_COMPLETION(cqv, tag(102), 1);
cq_verify(cqv); cq_verify(cqv);
memset(ops, 0, sizeof(ops)); memset(ops, 0, sizeof(ops));
@ -225,8 +225,8 @@ static void test_request_response_with_metadata_and_payload(
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(103), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(103), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(103), 1); CQ_EXPECT_COMPLETION(cqv, tag(103), 1);
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(status == GRPC_STATUS_OK); GPR_ASSERT(status == GRPC_STATUS_OK);

@ -161,7 +161,7 @@ static void simple_request_body(grpc_end2end_test_fixture f) {
grpc_server_request_call(f.server, &s, &call_details, grpc_server_request_call(f.server, &s, &call_details,
&request_metadata_recv, f.cq, f.cq, tag(101)); &request_metadata_recv, f.cq, f.cq, tag(101));
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(101), 1); CQ_EXPECT_COMPLETION(cqv, tag(101), 1);
cq_verify(cqv); cq_verify(cqv);
peer = grpc_call_get_peer(s); peer = grpc_call_get_peer(s);
@ -195,8 +195,8 @@ static void simple_request_body(grpc_end2end_test_fixture f) {
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(102), 1); CQ_EXPECT_COMPLETION(cqv, tag(102), 1);
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(status == GRPC_STATUS_UNIMPLEMENTED); GPR_ASSERT(status == GRPC_STATUS_UNIMPLEMENTED);

@ -161,7 +161,7 @@ static void test(grpc_end2end_test_config config, bool request_status_early) {
GPR_ASSERT(GRPC_CALL_OK == grpc_server_request_call( GPR_ASSERT(GRPC_CALL_OK == grpc_server_request_call(
f.server, &s, &call_details, f.server, &s, &call_details,
&request_metadata_recv, f.cq, f.cq, tag(101))); &request_metadata_recv, f.cq, f.cq, tag(101)));
cq_expect_completion(cqv, tag(101), 1); CQ_EXPECT_COMPLETION(cqv, tag(101), 1);
cq_verify(cqv); cq_verify(cqv);
memset(ops, 0, sizeof(ops)); memset(ops, 0, sizeof(ops));
@ -175,7 +175,7 @@ static void test(grpc_end2end_test_config config, bool request_status_early) {
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(102), 1); CQ_EXPECT_COMPLETION(cqv, tag(102), 1);
cq_verify(cqv); cq_verify(cqv);
memset(ops, 0, sizeof(ops)); memset(ops, 0, sizeof(ops));
@ -186,9 +186,9 @@ static void test(grpc_end2end_test_config config, bool request_status_early) {
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(103), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(103), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(103), 1); CQ_EXPECT_COMPLETION(cqv, tag(103), 1);
if (!request_status_early) { if (!request_status_early) {
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
} }
cq_verify(cqv); cq_verify(cqv);
@ -215,11 +215,11 @@ static void test(grpc_end2end_test_config config, bool request_status_early) {
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
} }
cq_expect_completion(cqv, tag(104), 1); CQ_EXPECT_COMPLETION(cqv, tag(104), 1);
if (request_status_early) { if (request_status_early) {
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
} else { } else {
cq_expect_completion(cqv, tag(2), 1); CQ_EXPECT_COMPLETION(cqv, tag(2), 1);
} }
cq_verify(cqv); cq_verify(cqv);
@ -235,7 +235,7 @@ static void test(grpc_end2end_test_config config, bool request_status_early) {
error = grpc_call_start_batch(c, ops, (size_t)(op - ops), tag(3), NULL); error = grpc_call_start_batch(c, ops, (size_t)(op - ops), tag(3), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(3), 1); CQ_EXPECT_COMPLETION(cqv, tag(3), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(response_payload1_recv != NULL); GPR_ASSERT(response_payload1_recv != NULL);

@ -184,7 +184,7 @@ static void test_request_response_with_metadata_and_payload(
grpc_server_request_call(f.server, &s, &call_details, grpc_server_request_call(f.server, &s, &call_details,
&request_metadata_recv, f.cq, f.cq, tag(101)); &request_metadata_recv, f.cq, f.cq, tag(101));
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(101), 1); CQ_EXPECT_COMPLETION(cqv, tag(101), 1);
cq_verify(cqv); cq_verify(cqv);
memset(ops, 0, sizeof(ops)); memset(ops, 0, sizeof(ops));
@ -203,7 +203,7 @@ static void test_request_response_with_metadata_and_payload(
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(102), 1); CQ_EXPECT_COMPLETION(cqv, tag(102), 1);
cq_verify(cqv); cq_verify(cqv);
memset(ops, 0, sizeof(ops)); memset(ops, 0, sizeof(ops));
@ -229,8 +229,8 @@ static void test_request_response_with_metadata_and_payload(
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(103), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(103), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(103), 1); CQ_EXPECT_COMPLETION(cqv, tag(103), 1);
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(status == GRPC_STATUS_OK); GPR_ASSERT(status == GRPC_STATUS_OK);

@ -132,7 +132,7 @@ int main(int argc, char **argv) {
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
/* the call should immediately fail */ /* the call should immediately fail */
cq_expect_completion(cqv, tag(1), 0); CQ_EXPECT_COMPLETION(cqv, tag(1), 0);
cq_verify(cqv); cq_verify(cqv);
memset(ops, 0, sizeof(ops)); memset(ops, 0, sizeof(ops));
@ -149,7 +149,7 @@ int main(int argc, char **argv) {
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
/* the call should immediately fail */ /* the call should immediately fail */
cq_expect_completion(cqv, tag(2), 1); CQ_EXPECT_COMPLETION(cqv, tag(2), 1);
cq_verify(cqv); cq_verify(cqv);
peer = grpc_call_get_peer(call); peer = grpc_call_get_peer(call);

@ -182,7 +182,7 @@ static void start_lb_server(server_fixture *sf, int *ports, size_t nports,
tag(200)); tag(200));
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
gpr_log(GPR_INFO, "LB Server[%s] up", sf->servers_hostport); gpr_log(GPR_INFO, "LB Server[%s] up", sf->servers_hostport);
cq_expect_completion(cqv, tag(200), 1); CQ_EXPECT_COMPLETION(cqv, tag(200), 1);
cq_verify(cqv); cq_verify(cqv);
gpr_log(GPR_INFO, "LB Server[%s] after tag 200", sf->servers_hostport); gpr_log(GPR_INFO, "LB Server[%s] after tag 200", sf->servers_hostport);
@ -199,7 +199,7 @@ static void start_lb_server(server_fixture *sf, int *ports, size_t nports,
op++; op++;
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(202), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(202), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(202), 1); CQ_EXPECT_COMPLETION(cqv, tag(202), 1);
cq_verify(cqv); cq_verify(cqv);
gpr_log(GPR_INFO, "LB Server[%s] after RECV_MSG", sf->servers_hostport); gpr_log(GPR_INFO, "LB Server[%s] after RECV_MSG", sf->servers_hostport);
@ -254,7 +254,7 @@ static void start_lb_server(server_fixture *sf, int *ports, size_t nports,
op++; op++;
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(203), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(203), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(203), 1); CQ_EXPECT_COMPLETION(cqv, tag(203), 1);
cq_verify(cqv); cq_verify(cqv);
gpr_log(GPR_INFO, "LB Server[%s] after SEND_MESSAGE, iter %d", gpr_log(GPR_INFO, "LB Server[%s] after SEND_MESSAGE, iter %d",
sf->servers_hostport, i); sf->servers_hostport, i);
@ -275,8 +275,8 @@ static void start_lb_server(server_fixture *sf, int *ports, size_t nports,
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(204), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(204), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(201), 1); CQ_EXPECT_COMPLETION(cqv, tag(201), 1);
cq_expect_completion(cqv, tag(204), 1); CQ_EXPECT_COMPLETION(cqv, tag(204), 1);
cq_verify(cqv); cq_verify(cqv);
gpr_log(GPR_INFO, "LB Server[%s] after tag 204. All done. LB server out", gpr_log(GPR_INFO, "LB Server[%s] after tag 204. All done. LB server out",
sf->servers_hostport); sf->servers_hostport);
@ -424,8 +424,8 @@ static void start_backend_server(server_fixture *sf) {
error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(104), NULL); error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(104), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(101), 1); CQ_EXPECT_COMPLETION(cqv, tag(101), 1);
cq_expect_completion(cqv, tag(104), 1); CQ_EXPECT_COMPLETION(cqv, tag(104), 1);
cq_verify(cqv); cq_verify(cqv);
gpr_log(GPR_INFO, "Server[%s] DONE. After servicing %d calls", gpr_log(GPR_INFO, "Server[%s] DONE. After servicing %d calls",
sf->servers_hostport, sf->num_calls_serviced); sf->servers_hostport, sf->num_calls_serviced);
@ -504,7 +504,7 @@ static void perform_request(client_fixture *cf) {
error = grpc_call_start_batch(c, ops, (size_t)(op - ops), tag(2), NULL); error = grpc_call_start_batch(c, ops, (size_t)(op - ops), tag(2), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(2), 1); CQ_EXPECT_COMPLETION(cqv, tag(2), 1);
cq_verify(cqv); cq_verify(cqv);
GPR_ASSERT(byte_buffer_eq_string(response_payload_recv, PAYLOAD)); GPR_ASSERT(byte_buffer_eq_string(response_payload_recv, PAYLOAD));
@ -522,8 +522,8 @@ static void perform_request(client_fixture *cf) {
error = grpc_call_start_batch(c, ops, (size_t)(op - ops), tag(3), NULL); error = grpc_call_start_batch(c, ops, (size_t)(op - ops), tag(3), NULL);
GPR_ASSERT(GRPC_CALL_OK == error); GPR_ASSERT(GRPC_CALL_OK == error);
cq_expect_completion(cqv, tag(1), 1); CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
cq_expect_completion(cqv, tag(3), 1); CQ_EXPECT_COMPLETION(cqv, tag(3), 1);
cq_verify(cqv); cq_verify(cqv);
peer = grpc_call_get_peer(c); peer = grpc_call_get_peer(c);
gpr_log(GPR_INFO, "Client DONE WITH SERVER %s ", peer); gpr_log(GPR_INFO, "Client DONE WITH SERVER %s ", peer);

@ -42,6 +42,7 @@ import sys
CONFIG = [ CONFIG = [
'grpc-timeout', 'grpc-timeout',
'grpc-internal-encoding-request', 'grpc-internal-encoding-request',
'grpc-payload-bin',
':path', ':path',
'grpc-encoding', 'grpc-encoding',
'grpc-accept-encoding', 'grpc-accept-encoding',

Loading…
Cancel
Save