inproc_callback_test.cc
Go to the documentation of this file.
1 /*
2  *
3  * Copyright 2018 gRPC authors.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
19 #include <string.h>
20 
21 #include <grpc/support/alloc.h>
22 #include <grpc/support/log.h>
23 #include <grpc/support/sync.h>
24 
30 #include "test/core/util/port.h"
32 
33 typedef struct inproc_fixture_data {
34  bool phony; // reserved for future expansion. Struct can't be empty
36 
37 namespace {
38 template <typename F>
39 class CQDeletingCallback : public grpc_completion_queue_functor {
40  public:
41  explicit CQDeletingCallback(F f) : func_(f) {
42  functor_run = &CQDeletingCallback::Run;
43  inlineable = false;
44  }
45  ~CQDeletingCallback() {}
46  static void Run(grpc_completion_queue_functor* cb, int ok) {
47  auto* callback = static_cast<CQDeletingCallback*>(cb);
48  callback->func_(static_cast<bool>(ok));
49  delete callback;
50  }
51 
52  private:
53  F func_;
54 };
55 
56 template <typename F>
57 grpc_completion_queue_functor* NewDeletingCallback(F f) {
58  return new CQDeletingCallback<F>(f);
59 }
60 
61 class ShutdownCallback : public grpc_completion_queue_functor {
62  public:
63  ShutdownCallback() : done_(false) {
64  functor_run = &ShutdownCallback::StaticRun;
65  inlineable = false;
66  gpr_mu_init(&mu_);
67  gpr_cv_init(&cv_);
68  }
69  ~ShutdownCallback() {
72  }
73  static void StaticRun(grpc_completion_queue_functor* cb, int ok) {
74  auto* callback = static_cast<ShutdownCallback*>(cb);
75  callback->Run(static_cast<bool>(ok));
76  }
77  void Run(bool /*ok*/) {
78  gpr_log(GPR_DEBUG, "CQ shutdown notification invoked");
79  gpr_mu_lock(&mu_);
80  done_ = true;
83  }
84  // The Wait function waits for a specified amount of
85  // time for the completion of the shutdown and returns
86  // whether it was successfully shut down
87  bool Wait(gpr_timespec deadline) {
88  gpr_mu_lock(&mu_);
89  while (!done_ && !gpr_cv_wait(&cv_, &mu_, deadline)) {
90  }
91  bool ret = done_;
93  return ret;
94  }
95 
96  private:
97  bool done_;
98  gpr_mu mu_;
99  gpr_cv cv_;
100 };
101 
102 ShutdownCallback* g_shutdown_callback;
103 } // namespace
104 
105 // The following global structure is the tag collection. It holds
106 // all information related to tags expected and tags received
107 // during the execution, with each callback setting a tag.
108 // The tag sets are implemented and checked using arrays and
109 // linear lookups (rather than maps) so that this test doesn't
110 // need the C++ standard library.
113 const size_t kAvailableTags = 4;
118 
119 // Mark that a tag is expected; this function must be executed in the
120 // main thread only while there are no other threads altering the
121 // expectation set (e.g., by calling expect_tag or verify_tags)
122 static void expect_tag(intptr_t tag, bool ok) {
123  size_t idx = static_cast<size_t>(tag);
125  tags_needed[idx] = true;
126  tags_expected[idx] = ok;
127 }
128 
129 // Check that the expected tags have reached, within a certain
130 // deadline. This must also be executed only on the main thread while
131 // there are no other threads altering the expectation set (e.g., by
132 // calling expect_tag or verify_tags). The tag verifier doesn't have
133 // to drive the CQ at all (unlike the next-based end2end tests)
134 // because the tags will get set when the callbacks are executed,
135 // which happens when a particular batch related to a callback is
136 // complete.
137 static void verify_tags(gpr_timespec deadline) {
138  bool done = false;
139 
141  while (!done) {
142  done = gpr_time_cmp(gpr_now(GPR_CLOCK_MONOTONIC), deadline) > 0;
143  for (size_t i = 0; i < kAvailableTags; i++) {
144  if (tags_needed[i]) {
145  if (tags_valid[i]) {
146  gpr_log(GPR_DEBUG, "Verifying tag %d", static_cast<int>(i));
147  if (tags[i] != tags_expected[i]) {
148  gpr_log(GPR_ERROR, "Got wrong result (%d instead of %d) for tag %d",
149  tags[i], tags_expected[i], static_cast<int>(i));
150  GPR_ASSERT(false);
151  }
152  tags_valid[i] = false;
153  tags_needed[i] = false;
154  } else if (done) {
155  gpr_log(GPR_ERROR, "Didn't get tag %d", static_cast<int>(i));
156  GPR_ASSERT(false);
157  }
158  }
159  }
160  bool empty = true;
161  for (size_t i = 0; i < kAvailableTags; i++) {
162  if (tags_needed[i]) {
163  empty = false;
164  }
165  }
166  done = done || empty;
167  if (done) {
168  for (size_t i = 0; i < kAvailableTags; i++) {
169  if (tags_valid[i]) {
170  gpr_log(GPR_ERROR, "Got unexpected tag %d and result %d",
171  static_cast<int>(i), tags[i]);
172  GPR_ASSERT(false);
173  }
174  tags_valid[i] = false;
175  }
176  } else {
177  gpr_cv_wait(&tags_cv, &tags_mu, deadline);
178  }
179  }
181 }
182 
183 // This function creates a callback functor that emits the
184 // desired tag into the global tag set
186  auto func = [t](bool ok) {
188  gpr_log(GPR_DEBUG, "Completing operation %" PRIdPTR, t);
189  bool was_empty = true;
190  for (size_t i = 0; i < kAvailableTags; i++) {
191  if (tags_valid[i]) {
192  was_empty = false;
193  }
194  }
195  size_t idx = static_cast<size_t>(t);
196  tags[idx] = ok;
197  tags_valid[idx] = true;
198  if (was_empty) {
200  }
202  };
203  auto cb = NewDeletingCallback(func);
204  return cb;
205 }
206 
208  const grpc_channel_args* /*client_args*/,
209  const grpc_channel_args* /*server_args*/) {
211  inproc_fixture_data* ffd = static_cast<inproc_fixture_data*>(
213  memset(&f, 0, sizeof(f));
214 
215  f.fixture_data = ffd;
216  g_shutdown_callback = new ShutdownCallback();
217  f.cq =
218  grpc_completion_queue_create_for_callback(g_shutdown_callback, nullptr);
219 
220  return f;
221 }
222 
224  const grpc_channel_args* client_args) {
225  f->client = grpc_inproc_channel_create(f->server, client_args, nullptr);
226  GPR_ASSERT(f->client);
227 }
228 
230  const grpc_channel_args* server_args) {
231  if (f->server) {
232  grpc_server_destroy(f->server);
233  }
234  f->server = grpc_server_create(server_args, nullptr);
235  grpc_server_register_completion_queue(f->server, f->cq, nullptr);
236  grpc_server_start(f->server);
237 }
238 
240  inproc_fixture_data* ffd = static_cast<inproc_fixture_data*>(f->fixture_data);
241  gpr_free(ffd);
242 }
243 
245  grpc_end2end_test_config config, const char* test_name,
246  const grpc_channel_args* client_args,
247  const grpc_channel_args* server_args) {
249  gpr_log(GPR_INFO, "Running test: %s/%s", test_name, config.name);
250  f = config.create_fixture(client_args, server_args);
251  config.init_server(&f, server_args);
252  config.init_client(&f, client_args);
253  return f;
254 }
255 
258 }
259 
261 
262 static void drain_cq(grpc_completion_queue* /*cq*/) {
263  // Wait for the shutdown callback to arrive, or fail the test
264  GPR_ASSERT(g_shutdown_callback->Wait(five_seconds_from_now()));
265  gpr_log(GPR_DEBUG, "CQ shutdown wait complete");
266  delete g_shutdown_callback;
267 }
268 
270  if (!f->server) return;
271  grpc_server_shutdown_and_notify(f->server, f->cq, tag(1));
272  expect_tag(1, true);
274  grpc_server_destroy(f->server);
275  f->server = nullptr;
276 }
277 
279  if (!f->client) return;
280  grpc_channel_destroy(f->client);
281  f->client = nullptr;
282 }
283 
287 
289  drain_cq(f->cq);
291 }
292 
295  grpc_call* c;
296  grpc_call* s;
297  grpc_op ops[6];
298  grpc_op* op;
304  const char* error_string;
307  int was_cancelled = 2;
308  char* peer;
309  gpr_timespec deadline = five_seconds_from_now();
310 
311  c = grpc_channel_create_call(f.client, nullptr, GRPC_PROPAGATE_DEFAULTS, f.cq,
312  grpc_slice_from_static_string("/foo"), nullptr,
313  deadline, nullptr);
314  GPR_ASSERT(c);
315 
316  peer = grpc_call_get_peer(c);
317  GPR_ASSERT(peer != nullptr);
318  gpr_log(GPR_DEBUG, "client_peer_before_call=%s", peer);
319  gpr_free(peer);
320 
325 
326  // Create a basic client unary request batch (no payload)
327  memset(ops, 0, sizeof(ops));
328  op = ops;
331  op->flags = 0;
332  op->reserved = nullptr;
333  op++;
335  op->flags = 0;
336  op->reserved = nullptr;
337  op++;
340  op->flags = 0;
341  op->reserved = nullptr;
342  op++;
347  op->data.recv_status_on_client.error_string = &error_string;
348  op->flags = 0;
349  op->reserved = nullptr;
350  op++;
351  error = grpc_call_start_batch(c, ops, static_cast<size_t>(op - ops), tag(1),
352  nullptr);
354 
355  // Register a call at the server-side to match the incoming client call
357  &request_metadata_recv, f.cq, f.cq, tag(2));
359 
360  // We expect that the server call creation callback (and no others) will
361  // execute now since no other batch should be complete.
362  expect_tag(2, true);
363  verify_tags(deadline);
364 
365  peer = grpc_call_get_peer(s);
366  GPR_ASSERT(peer != nullptr);
367  gpr_log(GPR_DEBUG, "server_peer=%s", peer);
368  gpr_free(peer);
369  peer = grpc_call_get_peer(c);
370  GPR_ASSERT(peer != nullptr);
371  gpr_log(GPR_DEBUG, "client_peer=%s", peer);
372  gpr_free(peer);
373 
374  // Create the server response batch (no payload)
375  memset(ops, 0, sizeof(ops));
376  op = ops;
379  op->flags = 0;
380  op->reserved = nullptr;
381  op++;
385  grpc_slice status_details = grpc_slice_from_static_string("xyz");
386  op->data.send_status_from_server.status_details = &status_details;
387  op->flags = 0;
388  op->reserved = nullptr;
389  op++;
392  op->flags = 0;
393  op->reserved = nullptr;
394  op++;
395  error = grpc_call_start_batch(s, ops, static_cast<size_t>(op - ops), tag(3),
396  nullptr);
398 
399  // Both the client request and server response batches should get complete
400  // now and we should see that their callbacks have been executed
401  expect_tag(3, true);
402  expect_tag(1, true);
403  verify_tags(deadline);
404 
406  GPR_ASSERT(0 == grpc_slice_str_cmp(details, "xyz"));
407  // the following sanity check makes sure that the requested error string is
408  // correctly populated by the core. It looks for certain substrings that are
409  // not likely to change much. Some parts of the error, like time created,
410  // obviously are not checked.
411  GPR_ASSERT(nullptr != strstr(error_string, "xyz"));
412  GPR_ASSERT(nullptr != strstr(error_string, "Error received from peer"));
413  GPR_ASSERT(nullptr != strstr(error_string, "grpc_message"));
414  GPR_ASSERT(nullptr != strstr(error_string, "grpc_status"));
418 
420  gpr_free(static_cast<void*>(const_cast<char*>(error_string)));
425 
427  grpc_call_unref(s);
428 }
429 
432 
433  f = begin_test(config, "test_invoke_simple_request", nullptr, nullptr);
435  end_test(&f);
436  config.tear_down_data(&f);
437 }
438 
440  int i;
442  begin_test(config, "test_invoke_10_simple_requests", nullptr, nullptr);
443  for (i = 0; i < 10; i++) {
445  gpr_log(GPR_INFO, "Running test: Passed simple request %d", i);
446  }
447  end_test(&f);
448  config.tear_down_data(&f);
449 }
450 
452  int i;
453  const int many = 1000;
455  begin_test(config, "test_invoke_many_simple_requests", nullptr, nullptr);
457  for (i = 0; i < many; i++) {
459  }
460  double us =
462  many;
463  gpr_log(GPR_INFO, "Time per ping %f us", us);
464  end_test(&f);
465  config.tear_down_data(&f);
466 }
467 
469  int i;
470  for (i = 0; i < 10; i++) {
472  }
475 }
476 
477 static void simple_request_pre_init() {
480 }
481 
482 /* All test configurations */
484  {"inproc-callback", FEATURE_MASK_SUPPORTS_AUTHORITY_HEADER, nullptr,
487 };
488 
489 int main(int argc, char** argv) {
490  grpc::testing::TestEnvironment env(&argc, argv);
491  grpc_init();
492 
495 
496  grpc_shutdown();
497 
498  return 0;
499 }
gpr_cv_signal
GPRAPI void gpr_cv_signal(gpr_cv *cv)
gpr_timespec_to_micros
GPRAPI double gpr_timespec_to_micros(gpr_timespec t)
Definition: src/core/lib/gpr/time.cc:237
expect_tag
static void expect_tag(intptr_t tag, bool ok)
Definition: inproc_callback_test.cc:122
grpc_slice_unref
GPRAPI void grpc_slice_unref(grpc_slice s)
Definition: slice_api.cc:32
GPR_INFO
#define GPR_INFO
Definition: include/grpc/impl/codegen/log.h:56
FEATURE_MASK_SUPPORTS_AUTHORITY_HEADER
#define FEATURE_MASK_SUPPORTS_AUTHORITY_HEADER
Definition: end2end_tests.h:38
grpc_op::flags
uint32_t flags
Definition: grpc_types.h:644
grpc_call_error
grpc_call_error
Definition: grpc_types.h:464
gpr_mu_unlock
GPRAPI void gpr_mu_unlock(gpr_mu *mu)
grpc_call_details_destroy
GRPCAPI void grpc_call_details_destroy(grpc_call_details *details)
Definition: call_details.cc:36
grpc_call_details_init
GRPCAPI void grpc_call_details_init(grpc_call_details *details)
Definition: call_details.cc:30
grpc_op::grpc_op_data::grpc_op_recv_status_on_client::trailing_metadata
grpc_metadata_array * trailing_metadata
Definition: grpc_types.h:701
grpc_timeout_seconds_to_deadline
gpr_timespec grpc_timeout_seconds_to_deadline(int64_t time_s)
Definition: test/core/util/test_config.cc:81
log.h
port.h
grpc_op::grpc_op_data::grpc_op_recv_status_on_client::status
grpc_status_code * status
Definition: grpc_types.h:702
grpc_completion_queue_create_for_callback
GRPCAPI grpc_completion_queue * grpc_completion_queue_create_for_callback(grpc_completion_queue_functor *shutdown_callback, void *reserved)
Definition: completion_queue_factory.cc:76
generate.env
env
Definition: generate.py:37
memset
return memset(p, 0, total)
grpc_call_details::flags
uint32_t flags
Definition: grpc_types.h:589
cv_
std::condition_variable cv_
Definition: client_callback_end2end_test.cc:733
grpc_op::grpc_op_data::send_initial_metadata
struct grpc_op::grpc_op_data::grpc_op_send_initial_metadata send_initial_metadata
false
#define false
Definition: setup_once.h:323
end_test
static void end_test(grpc_end2end_test_fixture *f)
Definition: inproc_callback_test.cc:284
inproc_fixture_data
struct inproc_fixture_data inproc_fixture_data
grpc_call_get_peer
GRPCAPI char * grpc_call_get_peer(grpc_call *call)
Definition: call.cc:1774
grpc_metadata_array
Definition: grpc_types.h:579
grpc_call_details
Definition: grpc_types.h:585
tags_needed
bool tags_needed[kAvailableTags]
Definition: inproc_callback_test.cc:117
grpc_op::reserved
void * reserved
Definition: grpc_types.h:646
gpr_cv
pthread_cond_t gpr_cv
Definition: impl/codegen/sync_posix.h:48
tags_mu
static gpr_mu tags_mu
Definition: inproc_callback_test.cc:111
string.h
simple_request
static void simple_request(grpc_end2end_test_config config)
Definition: inproc_callback_test.cc:468
shutdown_client
static void shutdown_client(grpc_end2end_test_fixture *f)
Definition: inproc_callback_test.cc:278
drain_cq
static void drain_cq(grpc_completion_queue *)
Definition: inproc_callback_test.cc:262
gpr_free
GPRAPI void gpr_free(void *ptr)
Definition: alloc.cc:51
error
grpc_error_handle error
Definition: retry_filter.cc:499
grpc_status_code
grpc_status_code
Definition: include/grpc/impl/codegen/status.h:28
completion_queue.h
grpc_server_create
GRPCAPI grpc_server * grpc_server_create(const grpc_channel_args *args, void *reserved)
Definition: src/core/lib/surface/server.cc:1456
gpr_malloc
GPRAPI void * gpr_malloc(size_t size)
Definition: alloc.cc:29
GRPC_CALL_OK
@ GRPC_CALL_OK
Definition: grpc_types.h:466
configs
static grpc_end2end_test_config configs[]
Definition: inproc_callback_test.cc:483
status
absl::Status status
Definition: rls.cc:251
grpc_server_register_completion_queue
GRPCAPI void grpc_server_register_completion_queue(grpc_server *server, grpc_completion_queue *cq, void *reserved)
Definition: src/core/lib/surface/server.cc:1466
grpc_call_details::method
grpc_slice method
Definition: grpc_types.h:586
grpc_end2end_test_config
Definition: end2end_tests.h:53
inproc_fixture_data
Definition: inproc.cc:35
inproc_transport.h
grpc_channel_args
Definition: grpc_types.h:132
verify_tags
static void verify_tags(gpr_timespec deadline)
Definition: inproc_callback_test.cc:137
main
int main(int argc, char **argv)
Definition: inproc_callback_test.cc:489
done_
std::atomic< bool > done_
Definition: fuzzing_event_engine_test.cc:57
mu_
Mutex mu_
Definition: oob_backend_metric.cc:115
grpc_op::data
union grpc_op::grpc_op_data data
tags
bool tags[kAvailableTags]
Definition: inproc_callback_test.cc:114
grpc_end2end_test_fixture
Definition: end2end_tests.h:46
grpc_metadata_array_destroy
GRPCAPI void grpc_metadata_array_destroy(grpc_metadata_array *array)
Definition: metadata_array.cc:35
gpr_mu_destroy
GPRAPI void gpr_mu_destroy(gpr_mu *mu)
grpc_server_request_call
GRPCAPI grpc_call_error grpc_server_request_call(grpc_server *server, grpc_call **call, grpc_call_details *details, grpc_metadata_array *request_metadata, grpc_completion_queue *cq_bound_to_call, grpc_completion_queue *cq_for_notification, void *tag_new)
Definition: src/core/lib/surface/server.cc:1526
trailing_metadata_recv
static grpc_metadata_array trailing_metadata_recv
Definition: test/core/fling/client.cc:43
c
void c(T a)
Definition: miscompile_with_no_unique_address_test.cc:40
autogen_x86imm.f
f
Definition: autogen_x86imm.py:9
GRPC_OP_RECV_INITIAL_METADATA
@ GRPC_OP_RECV_INITIAL_METADATA
Definition: grpc_types.h:617
GPR_ASSERT
#define GPR_ASSERT(x)
Definition: include/grpc/impl/codegen/log.h:94
GRPC_OP_SEND_STATUS_FROM_SERVER
@ GRPC_OP_SEND_STATUS_FROM_SERVER
Definition: grpc_types.h:612
gpr_time_cmp
GPRAPI int gpr_time_cmp(gpr_timespec a, gpr_timespec b)
Definition: src/core/lib/gpr/time.cc:30
gpr_cv_destroy
GPRAPI void gpr_cv_destroy(gpr_cv *cv)
shutdown_server
static void shutdown_server(grpc_end2end_test_fixture *f)
Definition: inproc_callback_test.cc:269
grpc_call_unref
GRPCAPI void grpc_call_unref(grpc_call *call)
Definition: call.cc:1770
five_seconds_from_now
static gpr_timespec five_seconds_from_now()
Definition: inproc_callback_test.cc:260
gpr_time_sub
GPRAPI gpr_timespec gpr_time_sub(gpr_timespec a, gpr_timespec b)
Definition: src/core/lib/gpr/time.cc:168
grpc_op::grpc_op_data::grpc_op_send_status_from_server::status
grpc_status_code status
Definition: grpc_types.h:673
grpc_op::grpc_op_data::grpc_op_recv_status_on_client::error_string
const char ** error_string
Definition: grpc_types.h:707
gpr_log
GPRAPI void gpr_log(const char *file, int line, gpr_log_severity severity, const char *format,...) GPR_PRINT_FORMAT_CHECK(4
gpr_mu_init
GPRAPI void gpr_mu_init(gpr_mu *mu)
grpc_completion_queue
Definition: completion_queue.cc:347
grpc_call
struct grpc_call grpc_call
Definition: grpc_types.h:70
done
struct tab * done
Definition: bloaty/third_party/zlib/examples/enough.c:176
grpc_op
Definition: grpc_types.h:640
tags_valid
bool tags_valid[kAvailableTags]
Definition: inproc_callback_test.cc:115
gpr_cv_wait
GPRAPI int gpr_cv_wait(gpr_cv *cv, gpr_mu *mu, gpr_timespec abs_deadline)
grpc_slice_from_static_string
GPRAPI grpc_slice grpc_slice_from_static_string(const char *source)
Definition: slice/slice.cc:89
was_cancelled
static int was_cancelled
Definition: test/core/fling/server.cc:58
grpc_slice
Definition: include/grpc/impl/codegen/slice.h:65
GPR_CLOCK_MONOTONIC
@ GPR_CLOCK_MONOTONIC
Definition: gpr_types.h:36
intptr_t
_W64 signed int intptr_t
Definition: stdint-msvc2008.h:118
gpr_mu_lock
GPRAPI void gpr_mu_lock(gpr_mu *mu)
request_metadata_recv
static grpc_metadata_array request_metadata_recv
Definition: test/core/fling/server.cc:48
grpc_server_destroy
GRPCAPI void grpc_server_destroy(grpc_server *server)
Definition: src/core/lib/surface/server.cc:1519
callback
static void callback(void *arg, int status, int timeouts, struct hostent *host)
Definition: acountry.c:224
inproc_init_client
void inproc_init_client(grpc_end2end_test_fixture *f, const grpc_channel_args *client_args)
Definition: inproc_callback_test.cc:223
GPR_ERROR
#define GPR_ERROR
Definition: include/grpc/impl/codegen/log.h:57
end2end_tests.h
gpr_now
GPRAPI gpr_timespec gpr_now(gpr_clock_type clock)
F
#define F(b, c, d)
Definition: md4.c:112
n
int n
Definition: abseil-cpp/absl/container/btree_test.cc:1080
inproc_init_server
void inproc_init_server(grpc_end2end_test_fixture *f, const grpc_channel_args *server_args)
Definition: inproc_callback_test.cc:229
setup.idx
idx
Definition: third_party/bloaty/third_party/capstone/bindings/python/setup.py:197
grpc_op::op
grpc_op_type op
Definition: grpc_types.h:642
google_benchmark.example.empty
def empty(state)
Definition: example.py:31
grpc_op::grpc_op_data::grpc_op_send_initial_metadata::count
size_t count
Definition: grpc_types.h:653
test_invoke_simple_request
static void test_invoke_simple_request(grpc_end2end_test_config config)
Definition: inproc_callback_test.cc:430
grpc_op::grpc_op_data::grpc_op_recv_status_on_client::status_details
grpc_slice * status_details
Definition: grpc_types.h:703
details
static grpc_slice details
Definition: test/core/fling/client.cc:46
test_config.h
grpc_channel_create_call
GRPCAPI grpc_call * grpc_channel_create_call(grpc_channel *channel, grpc_call *parent_call, uint32_t propagation_mask, grpc_completion_queue *completion_queue, grpc_slice method, const grpc_slice *host, gpr_timespec deadline, void *reserved)
Definition: channel.cc:311
grpc_op::grpc_op_data::recv_close_on_server
struct grpc_op::grpc_op_data::grpc_op_recv_close_on_server recv_close_on_server
inproc_tear_down
void inproc_tear_down(grpc_end2end_test_fixture *f)
Definition: inproc_callback_test.cc:239
test_invoke_10_simple_requests
static void test_invoke_10_simple_requests(grpc_end2end_test_config config)
Definition: inproc_callback_test.cc:439
func
const EVP_CIPHER *(* func)(void)
Definition: cipher_extra.c:73
GRPC_PROPAGATE_DEFAULTS
#define GRPC_PROPAGATE_DEFAULTS
Definition: propagation_bits.h:45
grpc_op::grpc_op_data::send_status_from_server
struct grpc_op::grpc_op_data::grpc_op_send_status_from_server send_status_from_server
begin_test
static grpc_end2end_test_fixture begin_test(grpc_end2end_test_config config, const char *test_name, const grpc_channel_args *client_args, const grpc_channel_args *server_args)
Definition: inproc_callback_test.cc:244
gpr_mu
pthread_mutex_t gpr_mu
Definition: impl/codegen/sync_posix.h:47
grpc_completion_queue_destroy
GRPCAPI void grpc_completion_queue_destroy(grpc_completion_queue *cq)
Definition: completion_queue.cc:1424
GRPC_OP_SEND_INITIAL_METADATA
@ GRPC_OP_SEND_INITIAL_METADATA
Definition: grpc_types.h:598
ret
UniquePtr< SSL_SESSION > ret
Definition: ssl_x509.cc:1029
alloc.h
grpc_op::grpc_op_data::recv_status_on_client
struct grpc_op::grpc_op_data::grpc_op_recv_status_on_client recv_status_on_client
grpc_op::grpc_op_data::grpc_op_send_status_from_server::trailing_metadata_count
size_t trailing_metadata_count
Definition: grpc_types.h:671
grpc::testing::TestEnvironment
Definition: test/core/util/test_config.h:54
grpc_server_shutdown_and_notify
GRPCAPI void grpc_server_shutdown_and_notify(grpc_server *server, grpc_completion_queue *cq, void *tag)
Definition: src/core/lib/surface/server.cc:1503
grpc_completion_queue_shutdown
GRPCAPI void grpc_completion_queue_shutdown(grpc_completion_queue *cq)
Definition: completion_queue.cc:1416
ok
bool ok
Definition: async_end2end_test.cc:197
inproc_fixture_data::phony
bool phony
Definition: inproc.cc:36
grpc_completion_queue_functor
Definition: grpc_types.h:773
grpc_channel_destroy
GRPCAPI void grpc_channel_destroy(grpc_channel *channel)
Definition: channel.cc:437
server.h
test_invoke_many_simple_requests
static void test_invoke_many_simple_requests(grpc_end2end_test_config config)
Definition: inproc_callback_test.cc:451
config_s
Definition: bloaty/third_party/zlib/deflate.c:120
kAvailableTags
const size_t kAvailableTags
Definition: inproc_callback_test.cc:113
GRPC_OP_RECV_CLOSE_ON_SERVER
@ GRPC_OP_RECV_CLOSE_ON_SERVER
Definition: grpc_types.h:633
tags_expected
bool tags_expected[kAvailableTags]
Definition: inproc_callback_test.cc:116
GRPC_STATUS_UNIMPLEMENTED
@ GRPC_STATUS_UNIMPLEMENTED
Definition: include/grpc/impl/codegen/status.h:124
gpr_cv_broadcast
GPRAPI void gpr_cv_broadcast(gpr_cv *cv)
n_seconds_from_now
static gpr_timespec n_seconds_from_now(int n)
Definition: inproc_callback_test.cc:256
GPR_DEBUG
#define GPR_DEBUG
Definition: include/grpc/impl/codegen/log.h:55
grpc_op::grpc_op_data::recv_initial_metadata
struct grpc_op::grpc_op_data::grpc_op_recv_initial_metadata recv_initial_metadata
grpc_op::grpc_op_data::grpc_op_send_status_from_server::status_details
grpc_slice * status_details
Definition: grpc_types.h:677
gpr_timespec
Definition: gpr_types.h:50
inproc_create_fixture
static grpc_end2end_test_fixture inproc_create_fixture(const grpc_channel_args *, const grpc_channel_args *)
Definition: inproc_callback_test.cc:207
googletest-break-on-failure-unittest.Run
def Run(command)
Definition: bloaty/third_party/googletest/googletest/test/googletest-break-on-failure-unittest.py:76
grpc_init
GRPCAPI void grpc_init(void)
Definition: init.cc:146
grpc_server_start
GRPCAPI void grpc_server_start(grpc_server *server)
Definition: src/core/lib/surface/server.cc:1497
tags_cv
static gpr_cv tags_cv
Definition: inproc_callback_test.cc:112
GRPC_OP_RECV_STATUS_ON_CLIENT
@ GRPC_OP_RECV_STATUS_ON_CLIENT
Definition: grpc_types.h:627
grpc_op::grpc_op_data::grpc_op_recv_initial_metadata::recv_initial_metadata
grpc_metadata_array * recv_initial_metadata
Definition: grpc_types.h:685
grpc_slice_str_cmp
GPRAPI int grpc_slice_str_cmp(grpc_slice a, const char *b)
Definition: slice/slice.cc:426
t1
Table t1
Definition: abseil-cpp/absl/container/internal/raw_hash_set_allocator_test.cc:185
simple_request_body
static void simple_request_body(grpc_end2end_test_config, grpc_end2end_test_fixture f)
Definition: inproc_callback_test.cc:293
sync.h
op
static grpc_op * op
Definition: test/core/fling/client.cc:47
ops
static grpc_op ops[6]
Definition: test/core/fling/client.cc:39
initial_metadata_recv
static grpc_metadata_array initial_metadata_recv
Definition: test/core/fling/client.cc:42
grpc_call_start_batch
GRPCAPI grpc_call_error grpc_call_start_batch(grpc_call *call, const grpc_op *ops, size_t nops, void *tag, void *reserved)
Definition: call.cc:1831
grpc_shutdown
GRPCAPI void grpc_shutdown(void)
Definition: init.cc:209
grpc_op::grpc_op_data::grpc_op_recv_close_on_server::cancelled
int * cancelled
Definition: grpc_types.h:714
cb
OPENSSL_EXPORT pem_password_cb * cb
Definition: pem.h:351
grpc_inproc_channel_create
grpc_channel * grpc_inproc_channel_create(grpc_server *server, const grpc_channel_args *args, void *)
Definition: inproc_transport.cc:1247
GRPC_OP_SEND_CLOSE_FROM_CLIENT
@ GRPC_OP_SEND_CLOSE_FROM_CLIENT
Definition: grpc_types.h:607
i
uint64_t i
Definition: abseil-cpp/absl/container/btree_benchmark.cc:230
call_details
static grpc_call_details call_details
Definition: test/core/fling/server.cc:47
gpr_cv_init
GPRAPI void gpr_cv_init(gpr_cv *cv)
grpc_metadata_array_init
GRPCAPI void grpc_metadata_array_init(grpc_metadata_array *array)
Definition: metadata_array.cc:30
tag
static grpc_completion_queue_functor * tag(intptr_t t)
Definition: inproc_callback_test.cc:185
simple_request_pre_init
static void simple_request_pre_init()
Definition: inproc_callback_test.cc:477
channel.h


grpc
Author(s):
autogenerated on Thu Mar 13 2025 03:00:20