goaway_server_test.cc
Go to the documentation of this file.
1 /*
2  *
3  * Copyright 2016 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 <string>
22 
23 #include "absl/strings/str_cat.h"
24 
25 #include <grpc/grpc.h>
26 #include <grpc/grpc_security.h>
27 #include <grpc/support/alloc.h>
28 #include <grpc/support/log.h>
29 
37 #include "test/core/util/port.h"
39 
40 static void* tag(intptr_t t) { return reinterpret_cast<void*>(t); }
41 
42 static gpr_mu g_mu;
43 static int g_resolve_port = -1;
44 
45 static grpc_ares_request* (*iomgr_dns_lookup_ares)(
46  const char* dns_server, const char* addr, const char* default_port,
47  grpc_pollset_set* interested_parties, grpc_closure* on_done,
48  std::unique_ptr<grpc_core::ServerAddressList>* addresses,
49  std::unique_ptr<grpc_core::ServerAddressList>* balancer_addresses,
50  char** service_config_json, int query_timeout_ms);
51 
53 
54 static void set_resolve_port(int port) {
55  gpr_mu_lock(&g_mu);
58 }
59 
60 namespace {
61 
62 grpc_core::DNSResolver* g_default_dns_resolver;
63 
64 class TestDNSResolver : public grpc_core::DNSResolver {
65  public:
66  TaskHandle ResolveName(
68  grpc_pollset_set* interested_parties,
69  std::function<void(absl::StatusOr<std::vector<grpc_resolved_address>>)>
70  on_done) override {
71  if (name != "test") {
72  return g_default_dns_resolver->ResolveName(
73  name, default_port, interested_parties, std::move(on_done));
74  }
75  MakeDNSRequest(std::move(on_done));
76  return kNullHandle;
77  }
78 
80  absl::string_view name, absl::string_view default_port) override {
81  return g_default_dns_resolver->ResolveNameBlocking(name, default_port);
82  }
83 
84  bool Cancel(TaskHandle /*handle*/) override { return false; }
85 
86  private:
87  void MakeDNSRequest(
88  std::function<void(absl::StatusOr<std::vector<grpc_resolved_address>>)>
89  on_done) {
90  gpr_mu_lock(&g_mu);
91  if (g_resolve_port < 0) {
94  std::move(on_done), absl::UnknownError("Forced Failure"));
95  } else {
96  std::vector<grpc_resolved_address> addrs;
98  grpc_sockaddr_in* sa = reinterpret_cast<grpc_sockaddr_in*>(&addr);
99  sa->sin_family = GRPC_AF_INET;
100  sa->sin_addr.s_addr = 0x100007f;
101  sa->sin_port = grpc_htons(static_cast<uint16_t>(g_resolve_port));
102  addr.len = static_cast<socklen_t>(sizeof(*sa));
103  addrs.push_back(addr);
106  std::move(addrs));
107  }
108  }
109 };
110 
111 } // namespace
112 
114  const char* dns_server, const char* addr, const char* default_port,
115  grpc_pollset_set* interested_parties, grpc_closure* on_done,
116  std::unique_ptr<grpc_core::ServerAddressList>* addresses,
117  std::unique_ptr<grpc_core::ServerAddressList>* balancer_addresses,
118  char** service_config_json, int query_timeout_ms) {
119  if (0 != strcmp(addr, "test")) {
120  return iomgr_dns_lookup_ares(
121  dns_server, addr, default_port, interested_parties, on_done, addresses,
122  balancer_addresses, service_config_json, query_timeout_ms);
123  }
124 
126  gpr_mu_lock(&g_mu);
127  if (g_resolve_port < 0) {
129  error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Forced Failure");
130  } else {
131  *addresses = absl::make_unique<grpc_core::ServerAddressList>();
132  grpc_sockaddr_in sa;
133  memset(&sa, 0, sizeof(sa));
134  sa.sin_family = GRPC_AF_INET;
135  sa.sin_addr.s_addr = 0x100007f;
136  sa.sin_port = grpc_htons(static_cast<uint16_t>(g_resolve_port));
137  (*addresses)->emplace_back(&sa, sizeof(sa), nullptr);
139  }
141  return nullptr;
142 }
143 
145  if (request != nullptr) {
147  }
148 }
149 
150 int main(int argc, char** argv) {
152  cq_verifier* cqv;
153  grpc_op ops[6];
154  grpc_op* op;
155 
156  grpc::testing::TestEnvironment env(&argc, argv);
157 
158  gpr_mu_init(&g_mu);
159  grpc_init();
160  g_default_dns_resolver = grpc_core::GetDNSResolver();
161  auto* resolver = new TestDNSResolver();
162  grpc_core::SetDNSResolver(resolver);
167 
168  int was_cancelled1;
169  int was_cancelled2;
170 
171  grpc_metadata_array trailing_metadata_recv1;
172  grpc_metadata_array request_metadata1;
173  grpc_call_details request_details1;
174  grpc_status_code status1;
175  grpc_slice details1;
176  grpc_metadata_array_init(&trailing_metadata_recv1);
177  grpc_metadata_array_init(&request_metadata1);
178  grpc_call_details_init(&request_details1);
179 
180  grpc_metadata_array trailing_metadata_recv2;
181  grpc_metadata_array request_metadata2;
182  grpc_call_details request_details2;
183  grpc_status_code status2;
184  grpc_slice details2;
185  grpc_metadata_array_init(&trailing_metadata_recv2);
186  grpc_metadata_array_init(&request_metadata2);
187  grpc_call_details_init(&request_details2);
188 
190  cqv = cq_verifier_create(cq);
191 
192  /* reserve two ports */
193  int port1 = grpc_pick_unused_port_or_die();
194  int port2 = grpc_pick_unused_port_or_die();
195 
197 
198  grpc_channel_args client_args;
199  grpc_arg arg_array[2];
200  arg_array[0].type = GRPC_ARG_INTEGER;
201  arg_array[0].key =
202  const_cast<char*>("grpc.testing.fixed_reconnect_backoff_ms");
203  arg_array[0].value.integer = 1000;
204  /* When this test brings down server1 and then brings up server2,
205  * the targetted server port number changes, and the client channel
206  * needs to re-resolve to pick this up. This test requires that
207  * happen within 10 seconds, but gRPC's DNS resolvers rate limit
208  * resolution attempts to at most once every 30 seconds by default.
209  * So we tweak it for this test. */
210  arg_array[1].type = GRPC_ARG_INTEGER;
211  arg_array[1].key =
213  arg_array[1].value.integer = 1000;
214  client_args.args = arg_array;
215  client_args.num_args = 2;
216 
217  /* create a channel that picks first amongst the servers */
219  grpc_channel* chan = grpc_channel_create("test", creds, &client_args);
221  /* and an initial call to them */
222  grpc_slice host = grpc_slice_from_static_string("127.0.0.1");
223  grpc_call* call1 =
225  grpc_slice_from_static_string("/foo"), &host,
226  grpc_timeout_seconds_to_deadline(20), nullptr);
227  /* send initial metadata to probe connectivity */
228  memset(ops, 0, sizeof(ops));
229  op = ops;
233  op->reserved = nullptr;
234  op++;
236  (size_t)(op - ops),
237  tag(0x101), nullptr));
238  /* and receive status to probe termination */
239  memset(ops, 0, sizeof(ops));
240  op = ops;
242  op->data.recv_status_on_client.trailing_metadata = &trailing_metadata_recv1;
243  op->data.recv_status_on_client.status = &status1;
245  op->flags = 0;
246  op->reserved = nullptr;
247  op++;
249  (size_t)(op - ops),
250  tag(0x102), nullptr));
251 
252  /* bring a server up on the first port */
253  grpc_server* server1 = grpc_server_create(nullptr, nullptr);
254  addr = absl::StrCat("127.0.0.1:", port1);
255  grpc_server_credentials* server_creds =
257  grpc_server_add_http2_port(server1, addr.c_str(), server_creds);
258  grpc_server_credentials_release(server_creds);
259  grpc_server_register_completion_queue(server1, cq, nullptr);
260  grpc_server_start(server1);
261 
262  /* request a call to the server */
263  grpc_call* server_call1;
265  grpc_server_request_call(server1, &server_call1, &request_details1,
266  &request_metadata1, cq, cq, tag(0x301)));
267 
268  set_resolve_port(port1);
269 
270  /* first call should now start */
271  CQ_EXPECT_COMPLETION(cqv, tag(0x101), 1);
272  CQ_EXPECT_COMPLETION(cqv, tag(0x301), 1);
273  cq_verify(cqv);
274 
279  tag(0x9999));
280 
281  /* listen for close on the server call to probe for finishing */
282  memset(ops, 0, sizeof(ops));
283  op = ops;
285  op->data.recv_close_on_server.cancelled = &was_cancelled1;
286  op->flags = 0;
287  op++;
289  (size_t)(op - ops),
290  tag(0x302), nullptr));
291 
292  /* shutdown first server:
293  * we should see a connectivity change and then nothing */
294  set_resolve_port(-1);
295  grpc_server_shutdown_and_notify(server1, cq, tag(0xdead1));
296  CQ_EXPECT_COMPLETION(cqv, tag(0x9999), 1);
297  cq_verify(cqv);
298  cq_verify_empty(cqv);
299 
300  /* and a new call: should go through to server2 when we start it */
301  grpc_call* call2 =
303  grpc_slice_from_static_string("/foo"), &host,
304  grpc_timeout_seconds_to_deadline(20), nullptr);
305  /* send initial metadata to probe connectivity */
306  memset(ops, 0, sizeof(ops));
307  op = ops;
311  op->reserved = nullptr;
312  op++;
314  (size_t)(op - ops),
315  tag(0x201), nullptr));
316  /* and receive status to probe termination */
317  memset(ops, 0, sizeof(ops));
318  op = ops;
320  op->data.recv_status_on_client.trailing_metadata = &trailing_metadata_recv2;
321  op->data.recv_status_on_client.status = &status2;
323  op->flags = 0;
324  op->reserved = nullptr;
325  op++;
327  (size_t)(op - ops),
328  tag(0x202), nullptr));
329 
330  /* and bring up second server */
331  set_resolve_port(port2);
332  grpc_server* server2 = grpc_server_create(nullptr, nullptr);
333  addr = absl::StrCat("127.0.0.1:", port2);
334  grpc_server_credentials* another_server_creds =
336  grpc_server_add_http2_port(server2, addr.c_str(), another_server_creds);
337  grpc_server_credentials_release(another_server_creds);
338  grpc_server_register_completion_queue(server2, cq, nullptr);
339  grpc_server_start(server2);
340 
341  /* request a call to the server */
342  grpc_call* server_call2;
344  grpc_server_request_call(server2, &server_call2, &request_details2,
345  &request_metadata2, cq, cq, tag(0x401)));
346 
347  /* second call should now start */
348  CQ_EXPECT_COMPLETION(cqv, tag(0x201), 1);
349  CQ_EXPECT_COMPLETION(cqv, tag(0x401), 1);
350  cq_verify(cqv);
351 
352  /* listen for close on the server call to probe for finishing */
353  memset(ops, 0, sizeof(ops));
354  op = ops;
356  op->data.recv_close_on_server.cancelled = &was_cancelled2;
357  op->flags = 0;
358  op++;
360  (size_t)(op - ops),
361  tag(0x402), nullptr));
362 
363  /* shutdown second server: we should see nothing */
364  grpc_server_shutdown_and_notify(server2, cq, tag(0xdead2));
365  cq_verify_empty(cqv);
366 
367  grpc_call_cancel(call1, nullptr);
368  grpc_call_cancel(call2, nullptr);
369 
370  /* now everything else should finish */
371  CQ_EXPECT_COMPLETION(cqv, tag(0x102), 1);
372  CQ_EXPECT_COMPLETION(cqv, tag(0x202), 1);
373  CQ_EXPECT_COMPLETION(cqv, tag(0x302), 1);
374  CQ_EXPECT_COMPLETION(cqv, tag(0x402), 1);
375  CQ_EXPECT_COMPLETION(cqv, tag(0xdead1), 1);
376  CQ_EXPECT_COMPLETION(cqv, tag(0xdead2), 1);
377  cq_verify(cqv);
378 
379  grpc_call_unref(call1);
380  grpc_call_unref(call2);
381  grpc_call_unref(server_call1);
382  grpc_call_unref(server_call2);
383  grpc_server_destroy(server1);
384  grpc_server_destroy(server2);
385  grpc_channel_destroy(chan);
386 
387  grpc_metadata_array_destroy(&trailing_metadata_recv1);
388  grpc_metadata_array_destroy(&request_metadata1);
389  grpc_call_details_destroy(&request_details1);
390  grpc_slice_unref(details1);
391  grpc_metadata_array_destroy(&trailing_metadata_recv2);
392  grpc_metadata_array_destroy(&request_metadata2);
393  grpc_call_details_destroy(&request_details2);
394  grpc_slice_unref(details2);
395 
396  cq_verifier_destroy(cqv);
398 
399  grpc_core::SetDNSResolver(g_default_dns_resolver);
400  delete resolver;
401  grpc_shutdown();
403 
404  return 0;
405 }
grpc_arg
Definition: grpc_types.h:103
grpc_slice_unref
GPRAPI void grpc_slice_unref(grpc_slice s)
Definition: slice_api.cc:32
grpc_op::flags
uint32_t flags
Definition: grpc_types.h:644
GRPC_CHANNEL_READY
@ GRPC_CHANNEL_READY
Definition: include/grpc/impl/codegen/connectivity_state.h:36
gpr_mu_unlock
GPRAPI void gpr_mu_unlock(gpr_mu *mu)
grpc_call_cancel
GRPCAPI grpc_call_error grpc_call_cancel(grpc_call *call, void *reserved)
Definition: call.cc:1782
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_ERROR_NONE
#define GRPC_ERROR_NONE
Definition: error.h:234
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
generate.env
env
Definition: generate.py:37
absl::StrCat
std::string StrCat(const AlphaNum &a, const AlphaNum &b)
Definition: abseil-cpp/absl/strings/str_cat.cc:98
GRPC_ARG_INTEGER
@ GRPC_ARG_INTEGER
Definition: grpc_types.h:81
grpc_arg::value
union grpc_arg::grpc_arg_value value
grpc_core::DNSCallbackExecCtxScheduler
Definition: resolve_address_impl.h:31
memset
return memset(p, 0, total)
dns_server
Definition: dns_server.py:1
grpc_op::grpc_op_data::send_initial_metadata
struct grpc_op::grpc_op_data::grpc_op_send_initial_metadata send_initial_metadata
uint16_t
unsigned short uint16_t
Definition: stdint-msvc2008.h:79
grpc_metadata_array
Definition: grpc_types.h:579
grpc_call_details
Definition: grpc_types.h:585
grpc_pollset_set
struct grpc_pollset_set grpc_pollset_set
Definition: iomgr_fwd.h:23
resolve_address_impl.h
grpc_op::reserved
void * reserved
Definition: grpc_types.h:646
grpc_core::DNSResolver
Definition: resolve_address.h:42
string.h
benchmark.request
request
Definition: benchmark.py:77
grpc_channel_check_connectivity_state
GRPCAPI grpc_connectivity_state grpc_channel_check_connectivity_state(grpc_channel *channel, int try_to_connect)
Definition: channel_connectivity.cc:56
absl::string_view
Definition: abseil-cpp/absl/strings/string_view.h:167
resolve_address.h
testing::internal::string
::std::string string
Definition: bloaty/third_party/protobuf/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:881
error
grpc_error_handle error
Definition: retry_filter.cc:499
grpc_status_code
grpc_status_code
Definition: include/grpc/impl/codegen/status.h:28
grpc_resolved_address
Definition: resolved_address.h:34
grpc_server_create
GRPCAPI grpc_server * grpc_server_create(const grpc_channel_args *args, void *reserved)
Definition: src/core/lib/surface/server.cc:1456
GRPC_CALL_OK
@ GRPC_CALL_OK
Definition: grpc_types.h:466
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
gpr_inf_future
GPRAPI gpr_timespec gpr_inf_future(gpr_clock_type type)
Definition: src/core/lib/gpr/time.cc:55
setup.name
name
Definition: setup.py:542
my_cancel_ares_request
static void my_cancel_ares_request(grpc_ares_request *request)
Definition: goaway_server_test.cc:144
grpc_security.h
g_resolve_port
static int g_resolve_port
Definition: goaway_server_test.cc:43
sockaddr.h
grpc_channel_args
Definition: grpc_types.h:132
grpc_op::data
union grpc_op::grpc_op_data data
grpc_insecure_server_credentials_create
GRPCAPI grpc_server_credentials * grpc_insecure_server_credentials_create()
Definition: core/lib/security/credentials/insecure/insecure_credentials.cc:71
socket_utils.h
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)
DEBUG_LOCATION
#define DEBUG_LOCATION
Definition: debug_location.h:41
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
GRPC_INITIAL_METADATA_WAIT_FOR_READY
#define GRPC_INITIAL_METADATA_WAIT_FOR_READY
Definition: grpc_types.h:523
cq_verify_empty
void cq_verify_empty(cq_verifier *v)
Definition: cq_verifier.cc:302
absl::move
constexpr absl::remove_reference_t< T > && move(T &&t) noexcept
Definition: abseil-cpp/absl/utility/utility.h:221
GPR_ASSERT
#define GPR_ASSERT(x)
Definition: include/grpc/impl/codegen/log.h:94
iomgr_dns_lookup_ares
static grpc_ares_request *(* iomgr_dns_lookup_ares)(const char *dns_server, const char *addr, const char *default_port, grpc_pollset_set *interested_parties, grpc_closure *on_done, std::unique_ptr< grpc_core::ServerAddressList > *addresses, std::unique_ptr< grpc_core::ServerAddressList > *balancer_addresses, char **service_config_json, int query_timeout_ms)
Definition: goaway_server_test.cc:45
grpc_server_credentials_release
GRPCAPI void grpc_server_credentials_release(grpc_server_credentials *creds)
Definition: credentials.cc:95
grpc_core::DNSResolver::kNullHandle
static constexpr TaskHandle kNullHandle
Definition: resolve_address.h:46
grpc_server_add_http2_port
GRPCAPI int grpc_server_add_http2_port(grpc_server *server, const char *addr, grpc_server_credentials *creds)
Definition: chttp2_server.cc:1029
grpc_call_unref
GRPCAPI void grpc_call_unref(grpc_call *call)
Definition: call.cc:1770
grpc_ares_wrapper.h
gpr_mu_init
GPRAPI void gpr_mu_init(gpr_mu *mu)
grpc_completion_queue
Definition: completion_queue.cc:347
cq_verifier_destroy
void cq_verifier_destroy(cq_verifier *v)
Definition: cq_verifier.cc:92
absl::UnknownError
Status UnknownError(absl::string_view message)
Definition: third_party/abseil-cpp/absl/status/status.cc:383
grpc.h
grpc_call
struct grpc_call grpc_call
Definition: grpc_types.h:70
grpc_insecure_credentials_create
GRPCAPI grpc_channel_credentials * grpc_insecure_credentials_create()
Definition: core/lib/security/credentials/insecure/insecure_credentials.cc:64
grpc_op
Definition: grpc_types.h:640
grpc_channel_args::num_args
size_t num_args
Definition: grpc_types.h:133
grpc_slice_from_static_string
GPRAPI grpc_slice grpc_slice_from_static_string(const char *source)
Definition: slice/slice.cc:89
cq_verifier_create
cq_verifier * cq_verifier_create(grpc_completion_queue *cq)
Definition: cq_verifier.cc:86
server_address.h
grpc_slice
Definition: include/grpc/impl/codegen/slice.h:65
grpc_server
struct grpc_server grpc_server
Definition: grpc_types.h:65
intptr_t
_W64 signed int intptr_t
Definition: stdint-msvc2008.h:118
gpr_mu_lock
GPRAPI void gpr_mu_lock(gpr_mu *mu)
cq_verifier
Definition: cq_verifier.cc:76
grpc_server_destroy
GRPCAPI void grpc_server_destroy(grpc_server *server)
Definition: src/core/lib/surface/server.cc:1519
CQ_EXPECT_COMPLETION
#define CQ_EXPECT_COMPLETION(v, tag, success)
Definition: cq_verifier.h:58
grpc_pick_unused_port_or_die
int grpc_pick_unused_port_or_die(void)
grpc_op::op
grpc_op_type op
Definition: grpc_types.h:642
grpc_htons
uint16_t grpc_htons(uint16_t hostshort)
GRPC_ERROR_CREATE_FROM_STATIC_STRING
#define GRPC_ERROR_CREATE_FROM_STATIC_STRING(desc)
Definition: error.h:291
grpc_op::grpc_op_data::grpc_op_send_initial_metadata::count
size_t count
Definition: grpc_types.h:653
grpc_op::grpc_op_data::grpc_op_recv_status_on_client::status_details
grpc_slice * status_details
Definition: grpc_types.h:703
tests.unit._exit_scenarios.port
port
Definition: _exit_scenarios.py:179
grpc_ares_request
Definition: grpc_ares_wrapper.h:56
test_config.h
grpc_channel_credentials_release
GRPCAPI void grpc_channel_credentials_release(grpc_channel_credentials *creds)
Definition: credentials.cc:36
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
grpc_server_credentials
Definition: src/core/lib/security/credentials/credentials.h:259
tag
static void * tag(intptr_t t)
Definition: goaway_server_test.cc:40
iomgr_cancel_ares_request
static void(* iomgr_cancel_ares_request)(grpc_ares_request *request)
Definition: goaway_server_test.cc:52
grpc_channel_create
GRPCAPI grpc_channel * grpc_channel_create(const char *target, grpc_channel_credentials *creds, const grpc_channel_args *args)
Definition: chttp2_connector.cc:366
GRPC_PROPAGATE_DEFAULTS
#define GRPC_PROPAGATE_DEFAULTS
Definition: propagation_bits.h:45
cq_verifier.h
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
grpc_core::GetDNSResolver
DNSResolver * GetDNSResolver()
Definition: resolve_address.cc:38
main
int main(int argc, char **argv)
Definition: goaway_server_test.cc:150
GRPC_ARG_DNS_MIN_TIME_BETWEEN_RESOLUTIONS_MS
#define GRPC_ARG_DNS_MIN_TIME_BETWEEN_RESOLUTIONS_MS
Definition: grpc_types.h:266
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::testing::TestEnvironment
Definition: test/core/util/test_config.h:54
grpc_arg::key
char * key
Definition: grpc_types.h:105
grpc_core::DNSResolver::ResolveName
virtual TaskHandle ResolveName(absl::string_view name, absl::string_view default_port, grpc_pollset_set *interested_parties, std::function< void(absl::StatusOr< std::vector< grpc_resolved_address >>)> on_done)=0
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
cq_verify
void cq_verify(cq_verifier *v, int timeout_sec)
Definition: cq_verifier.cc:268
grpc_channel_destroy
GRPCAPI void grpc_channel_destroy(grpc_channel *channel)
Definition: channel.cc:437
grpc_core::SetDNSResolver
void SetDNSResolver(DNSResolver *resolver)
Definition: resolve_address.cc:36
grpc_dns_lookup_ares
grpc_ares_request *(* grpc_dns_lookup_ares)(const char *dns_server, const char *name, const char *default_port, grpc_pollset_set *interested_parties, grpc_closure *on_done, std::unique_ptr< grpc_core::ServerAddressList > *addresses, std::unique_ptr< grpc_core::ServerAddressList > *balancer_addresses, char **service_config_json, int query_timeout_ms)
my_dns_lookup_ares
static grpc_ares_request * my_dns_lookup_ares(const char *dns_server, const char *addr, const char *default_port, grpc_pollset_set *interested_parties, grpc_closure *on_done, std::unique_ptr< grpc_core::ServerAddressList > *addresses, std::unique_ptr< grpc_core::ServerAddressList > *balancer_addresses, char **service_config_json, int query_timeout_ms)
Definition: goaway_server_test.cc:113
grpc_core::ExecCtx::Run
static void Run(const DebugLocation &location, grpc_closure *closure, grpc_error_handle error)
Definition: exec_ctx.cc:98
grpc_channel
struct grpc_channel grpc_channel
Definition: grpc_types.h:62
GRPC_OP_RECV_CLOSE_ON_SERVER
@ GRPC_OP_RECV_CLOSE_ON_SERVER
Definition: grpc_types.h:633
grpc_channel_watch_connectivity_state
GRPCAPI void grpc_channel_watch_connectivity_state(grpc_channel *channel, grpc_connectivity_state last_observed_state, gpr_timespec deadline, grpc_completion_queue *cq, void *tag)
Definition: channel_connectivity.cc:227
g_mu
static gpr_mu g_mu
Definition: goaway_server_test.cc:42
grpc_core::DNSResolver::Cancel
virtual bool Cancel(TaskHandle handle)=0
grpc_completion_queue_create_for_next
GRPCAPI grpc_completion_queue * grpc_completion_queue_create_for_next(void *reserved)
Definition: completion_queue_factory.cc:62
absl::StatusOr
Definition: abseil-cpp/absl/status/statusor.h:187
grpc_arg::grpc_arg_value::integer
int integer
Definition: grpc_types.h:108
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
grpc_error
Definition: error_internal.h:42
function
std::function< bool(GrpcTool *, int, const char **, const CliCredentials &, GrpcToolOutputCallback)> function
Definition: grpc_tool.cc:250
GRPC_OP_RECV_STATUS_ON_CLIENT
@ GRPC_OP_RECV_STATUS_ON_CLIENT
Definition: grpc_types.h:627
GPR_CLOCK_REALTIME
@ GPR_CLOCK_REALTIME
Definition: gpr_types.h:39
grpc_arg::type
grpc_arg_type type
Definition: grpc_types.h:104
grpc_channel_args::args
grpc_arg * args
Definition: grpc_types.h:134
grpc_closure
Definition: closure.h:56
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
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_cancel_ares_request
void(* grpc_cancel_ares_request)(grpc_ares_request *request)
grpc_shutdown
GRPCAPI void grpc_shutdown(void)
Definition: init.cc:209
set_resolve_port
static void set_resolve_port(int port)
Definition: goaway_server_test.cc:54
grpc_core::DNSResolver::ResolveNameBlocking
virtual absl::StatusOr< std::vector< grpc_resolved_address > > ResolveNameBlocking(absl::string_view name, absl::string_view default_port)=0
grpc_channel_credentials
Definition: src/core/lib/security/credentials/credentials.h:96
addr
struct sockaddr_in addr
Definition: libuv/docs/code/tcp-echo-server/main.c:10
grpc_op::grpc_op_data::grpc_op_recv_close_on_server::cancelled
int * cancelled
Definition: grpc_types.h:714
cq
static grpc_completion_queue * cq
Definition: test/core/fling/client.cc:37
grpc_metadata_array_init
GRPCAPI void grpc_metadata_array_init(grpc_metadata_array *array)
Definition: metadata_array.cc:30


grpc
Author(s):
autogenerated on Thu Mar 13 2025 02:59:40