settings_timeout_test.cc
Go to the documentation of this file.
1 /*
2  *
3  * Copyright 2017 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 <functional>
20 #include <memory>
21 #include <string>
22 #include <thread>
23 
24 #include <gtest/gtest.h>
25 
26 #include "absl/memory/memory.h"
27 #include "absl/strings/str_cat.h"
28 
29 #include <grpc/grpc.h>
30 #include <grpc/grpc_security.h>
31 #include <grpc/support/alloc.h>
32 #include <grpc/support/log.h>
33 
42 #include "test/core/util/port.h"
44 
45 namespace grpc_core {
46 namespace test {
47 namespace {
48 
49 // A gRPC server, running in its own thread.
50 class ServerThread {
51  public:
52  explicit ServerThread(const char* address) : address_(address) {}
53 
54  void Start() {
55  // Start server with 1-second handshake timeout.
56  grpc_arg a[2];
57  a[0].type = GRPC_ARG_INTEGER;
58  a[0].key = const_cast<char*>(GRPC_ARG_SERVER_HANDSHAKE_TIMEOUT_MS);
59  a[0].value.integer = 1000;
60  a[1].key = const_cast<char*>(GRPC_ARG_RESOURCE_QUOTA);
61  a[1].type = GRPC_ARG_POINTER;
62  a[1].value.pointer.p = grpc_resource_quota_create("test");
63  a[1].value.pointer.vtable = grpc_resource_quota_arg_vtable();
64  grpc_channel_args args = {2, a};
65  server_ = grpc_server_create(&args, nullptr);
66  grpc_server_credentials* server_creds =
69  grpc_server_credentials_release(server_creds);
73  thread_ =
74  absl::make_unique<std::thread>(std::bind(&ServerThread::Serve, this));
76  static_cast<grpc_resource_quota*>(a[1].value.pointer.p));
77  }
78 
79  void Shutdown() {
80  grpc_completion_queue* shutdown_cq =
82  grpc_server_shutdown_and_notify(server_, shutdown_cq, nullptr);
83  GPR_ASSERT(grpc_completion_queue_pluck(shutdown_cq, nullptr,
85  nullptr)
87  grpc_completion_queue_destroy(shutdown_cq);
90  thread_->join();
91  }
92 
93  private:
94  void Serve() {
95  // The completion queue should not return anything other than shutdown.
99  }
100 
101  const char* address_; // Do not own.
102  grpc_server* server_ = nullptr;
104  std::unique_ptr<std::thread> thread_;
105 };
106 
107 // A TCP client that connects to the server, reads data until the server
108 // closes, and then terminates.
109 class Client {
110  public:
111  explicit Client(const char* server_address)
113 
114  void Connect() {
115  ExecCtx exec_ctx;
118  ASSERT_EQ(absl::OkStatus(), addresses_or.status())
119  << addresses_or.status().ToString();
120  ASSERT_GE(addresses_or->size(), 1UL);
123  grpc_pollset_set* pollset_set = grpc_pollset_set_create();
125  EventState state;
128  .PreconditionChannelArgs(nullptr)
129  .ToC();
130  grpc_tcp_client_connect(state.closure(), &endpoint_, pollset_set, args,
131  addresses_or->data(),
134  ASSERT_TRUE(PollUntilDone(&state, Timestamp::InfFuture()));
135  ASSERT_EQ(GRPC_ERROR_NONE, state.error());
136  grpc_pollset_set_destroy(pollset_set);
138  }
139 
140  // Reads until an error is returned.
141  // Returns true if an error was encountered before the deadline.
142  bool ReadUntilError() {
143  ExecCtx exec_ctx;
144  grpc_slice_buffer read_buffer;
145  grpc_slice_buffer_init(&read_buffer);
146  bool retval = true;
147  // Use a deadline of 3 seconds, which is a lot more than we should
148  // need for a 1-second timeout, but this helps avoid flakes.
149  Timestamp deadline = ExecCtx::Get()->Now() + Duration::Seconds(3);
150  while (true) {
151  EventState state;
152  grpc_endpoint_read(endpoint_, &read_buffer, state.closure(),
153  /*urgent=*/true, /*min_progress_size=*/1);
154  if (!PollUntilDone(&state, deadline)) {
155  retval = false;
156  break;
157  }
158  if (state.error() != GRPC_ERROR_NONE) break;
159  gpr_log(GPR_INFO, "client read %" PRIuPTR " bytes", read_buffer.length);
161  }
165  return retval;
166  }
167 
168  void Shutdown() {
169  ExecCtx exec_ctx;
172  GRPC_CLOSURE_CREATE(&Client::PollsetDestroy, pollset_,
173  grpc_schedule_on_exec_ctx));
174  }
175 
176  private:
177  // State used to wait for an I/O event.
178  class EventState {
179  public:
180  EventState() {
181  GRPC_CLOSURE_INIT(&closure_, &EventState::OnEventDone, this,
182  grpc_schedule_on_exec_ctx);
183  }
184 
185  ~EventState() { GRPC_ERROR_UNREF(error_); }
186 
187  grpc_closure* closure() { return &closure_; }
188 
189  bool done() const { return gpr_atm_acq_load(&done_atm_) != 0; }
190 
191  // Caller does NOT take ownership of the error.
192  grpc_error_handle error() const { return error_; }
193 
194  private:
195  static void OnEventDone(void* arg, grpc_error_handle error) {
196  gpr_log(GPR_INFO, "OnEventDone(): %s",
198  EventState* state = static_cast<EventState*>(arg);
199  state->error_ = GRPC_ERROR_REF(error);
200  gpr_atm_rel_store(&state->done_atm_, 1);
201  }
202 
206  };
207 
208  // Returns true if done, or false if deadline exceeded.
209  bool PollUntilDone(EventState* state, Timestamp deadline) {
210  while (true) {
211  grpc_pollset_worker* worker = nullptr;
212  gpr_mu_lock(mu_);
213  GRPC_LOG_IF_ERROR("grpc_pollset_work",
215  ExecCtx::Get()->Now() +
216  Duration::Milliseconds(100)));
217  // Flushes any work scheduled before or during polling.
218  ExecCtx::Get()->Flush();
220  if (state != nullptr && state->done()) return true;
221  if (ExecCtx::Get()->Now() >= deadline) return false;
222  }
223  }
224 
225  static void PollsetDestroy(void* arg, grpc_error_handle /*error*/) {
226  grpc_pollset* pollset = static_cast<grpc_pollset*>(arg);
227  grpc_pollset_destroy(pollset);
228  gpr_free(pollset);
229  }
230 
231  const char* server_address_; // Do not own.
235 };
236 
237 TEST(SettingsTimeout, Basic) {
238  // Construct server address string.
240  std::string server_address_string = absl::StrCat("localhost:", server_port);
241  // Start server.
242  gpr_log(GPR_INFO, "starting server on %s", server_address_string.c_str());
243  ServerThread server_thread(server_address_string.c_str());
244  server_thread.Start();
245  // Create client and connect to server.
246  gpr_log(GPR_INFO, "starting client connect");
247  Client client(server_address_string.c_str());
248  client.Connect();
249  // Client read. Should fail due to server dropping connection.
250  gpr_log(GPR_INFO, "starting client read");
251  EXPECT_TRUE(client.ReadUntilError());
252  // Shut down client.
253  gpr_log(GPR_INFO, "shutting down client");
254  client.Shutdown();
255  // Shut down server.
256  gpr_log(GPR_INFO, "shutting down server");
257  server_thread.Shutdown();
258  // Clean up.
259 }
260 
261 } // namespace
262 } // namespace test
263 } // namespace grpc_core
264 
265 int main(int argc, char** argv) {
266  ::testing::InitGoogleTest(&argc, argv);
267  grpc::testing::TestEnvironment env(&argc, argv);
268  grpc_init();
269  int result = RUN_ALL_TESTS();
270  grpc_shutdown();
271  return result;
272 }
grpc_pollset_worker
struct grpc_pollset_worker grpc_pollset_worker
Definition: pollset.h:39
GRPC_CLOSURE_INIT
#define GRPC_CLOSURE_INIT(closure, cb, cb_arg, scheduler)
Definition: closure.h:115
grpc_arg
Definition: grpc_types.h:103
_gevent_test_main.result
result
Definition: _gevent_test_main.py:96
GPR_INFO
#define GPR_INFO
Definition: include/grpc/impl/codegen/log.h:56
grpc_pollset_size
size_t grpc_pollset_size(void)
Definition: pollset.cc:56
gpr_mu_unlock
GPRAPI void gpr_mu_unlock(gpr_mu *mu)
pollset.h
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
Connect
static int Connect(uint16_t port)
Definition: bssl_shim.cc:98
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_completion_queue_create_for_pluck
GRPCAPI grpc_completion_queue * grpc_completion_queue_create_for_pluck(void *reserved)
Definition: completion_queue_factory.cc:69
grpc_resource_quota
struct grpc_resource_quota grpc_resource_quota
Definition: grpc_types.h:729
Timestamp
Definition: bloaty/third_party/protobuf/src/google/protobuf/timestamp.pb.h:69
grpc_core
Definition: call_metric_recorder.h:31
GRPC_ARG_RESOURCE_QUOTA
#define GRPC_ARG_RESOURCE_QUOTA
Definition: grpc_types.h:299
test
Definition: spinlock_test.cc:36
client
Definition: examples/python/async_streaming/client.py:1
grpc_pollset_set
struct grpc_pollset_set grpc_pollset_set
Definition: iomgr_fwd.h:23
server_thread
void server_thread(void *vargs)
Definition: concurrent_connectivity_test.cc:107
Client
bool Client(const std::vector< std::string > &args)
Definition: third_party/boringssl-with-bazel/src/tool/client.cc:381
server_port
static int server_port
Definition: bad_server_response_test.cc:86
grpc_pollset_set_create
grpc_pollset_set * grpc_pollset_set_create()
Definition: pollset_set.cc:29
gpr_free
GPRAPI void gpr_free(void *ptr)
Definition: alloc.cc:51
pollset_
grpc_pollset * pollset_
Definition: settings_timeout_test.cc:234
grpc_endpoint_read
void grpc_endpoint_read(grpc_endpoint *ep, grpc_slice_buffer *slices, grpc_closure *cb, bool urgent, int min_progress_size)
Definition: endpoint.cc:25
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_QUEUE_SHUTDOWN
@ GRPC_QUEUE_SHUTDOWN
Definition: grpc_types.h:554
GRPC_OP_COMPLETE
@ GRPC_OP_COMPLETE
Definition: grpc_types.h:558
absl::OkStatus
Status OkStatus()
Definition: third_party/abseil-cpp/absl/status/status.h:882
ASSERT_GE
#define ASSERT_GE(val1, val2)
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:2072
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_core::TEST
TEST(AvlTest, NoOp)
Definition: avl_test.cc:21
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
grpc_resource_quota_create
GRPCAPI grpc_resource_quota * grpc_resource_quota_create(const char *trace_name)
Definition: api.cc:66
grpc_pollset_work
grpc_error_handle grpc_pollset_work(grpc_pollset *pollset, grpc_pollset_worker **worker, grpc_core::Timestamp deadline)
Definition: pollset.cc:45
GRPC_LOG_IF_ERROR
#define GRPC_LOG_IF_ERROR(what, error)
Definition: error.h:398
a
int a
Definition: abseil-cpp/absl/container/internal/hash_policy_traits_test.cc:88
grpc_tcp_client_connect
int64_t grpc_tcp_client_connect(grpc_closure *on_connect, grpc_endpoint **endpoint, grpc_pollset_set *interested_parties, const grpc_channel_args *channel_args, const grpc_resolved_address *addr, grpc_core::Timestamp deadline)
Definition: tcp_client.cc:25
closure_
grpc_closure closure_
Definition: settings_timeout_test.cc:203
GRPC_CLOSURE_CREATE
#define GRPC_CLOSURE_CREATE(cb, cb_arg, scheduler)
Definition: closure.h:160
grpc_security.h
address_
const char * address_
Definition: settings_timeout_test.cc:101
grpc_channel_args
Definition: grpc_types.h:132
server_address
std::string server_address("0.0.0.0:10000")
grpc_pollset_init
void grpc_pollset_init(grpc_pollset *pollset, gpr_mu **mu)
Definition: pollset.cc:33
gpr_zalloc
GPRAPI void * gpr_zalloc(size_t size)
Definition: alloc.cc:40
client
static uv_tcp_t client
Definition: test-callback-stack.c:33
grpc_insecure_server_credentials_create
GRPCAPI grpc_server_credentials * grpc_insecure_server_credentials_create()
Definition: core/lib/security/credentials/insecure/insecure_credentials.cc:71
asyncio_get_stats.args
args
Definition: asyncio_get_stats.py:40
GPR_ASSERT
#define GPR_ASSERT(x)
Definition: include/grpc/impl/codegen/log.h:94
grpc_core::CoreConfiguration::Get
static const CoreConfiguration & Get()
Definition: core_configuration.h:82
gen_stats_data.c_str
def c_str(s, encoding='ascii')
Definition: gen_stats_data.py:38
server_
grpc_server * server_
Definition: settings_timeout_test.cc:102
grpc_server_credentials_release
GRPCAPI void grpc_server_credentials_release(grpc_server_credentials *creds)
Definition: credentials.cc:95
grpc_core::ExecCtx::Flush
bool Flush()
Definition: exec_ctx.cc:69
grpc_resource_quota_arg_vtable
const GRPCAPI grpc_arg_pointer_vtable * grpc_resource_quota_arg_vtable(void)
Definition: api.cc:62
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
gpr_log
GPRAPI void gpr_log(const char *file, int line, gpr_log_severity severity, const char *format,...) GPR_PRINT_FORMAT_CHECK(4
worker
Definition: worker.py:1
grpc_event
Definition: grpc_types.h:564
grpc_completion_queue
Definition: completion_queue.cc:347
closure
grpc_closure closure
Definition: src/core/lib/surface/server.cc:466
grpc.h
grpc_pollset_set_destroy
void grpc_pollset_set_destroy(grpc_pollset_set *pollset_set)
Definition: pollset_set.cc:33
gpr_atm_acq_load
#define gpr_atm_acq_load(p)
Definition: impl/codegen/atm_gcc_atomic.h:52
grpc_slice_buffer::length
size_t length
Definition: include/grpc/impl/codegen/slice.h:96
pollset_set.h
done
struct tab * done
Definition: bloaty/third_party/zlib/examples/enough.c:176
grpc_core::ChannelArgs::ToC
const grpc_channel_args * ToC() const
Definition: channel_args.cc:94
grpc_channel_args_destroy
void grpc_channel_args_destroy(grpc_channel_args *a)
Definition: channel_args.cc:360
arg
Definition: cmdline.cc:40
gpr_atm_rel_store
#define gpr_atm_rel_store(p, value)
Definition: impl/codegen/atm_gcc_atomic.h:54
GPR_CLOCK_MONOTONIC
@ GPR_CLOCK_MONOTONIC
Definition: gpr_types.h:36
grpc_server
struct grpc_server grpc_server
Definition: grpc_types.h:65
gpr_mu_lock
GPRAPI void gpr_mu_lock(gpr_mu *mu)
error.h
grpc_endpoint_shutdown
void grpc_endpoint_shutdown(grpc_endpoint *ep, grpc_error_handle why)
Definition: endpoint.cc:49
grpc_server_destroy
GRPCAPI void grpc_server_destroy(grpc_server *server)
Definition: src/core/lib/surface/server.cc:1519
benchmark::Shutdown
void Shutdown()
Definition: benchmark/src/benchmark.cc:607
slice_internal.h
RUN_ALL_TESTS
int RUN_ALL_TESTS() GTEST_MUST_USE_RESULT_
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:2471
grpc_pick_unused_port_or_die
int grpc_pick_unused_port_or_die(void)
grpc_endpoint_destroy
void grpc_endpoint_destroy(grpc_endpoint *ep)
Definition: endpoint.cc:53
grpc_core::CoreConfiguration::channel_args_preconditioning
const ChannelArgsPreconditioning & channel_args_preconditioning() const
Definition: core_configuration.h:139
tcp_client.h
grpc_slice_buffer_init
GPRAPI void grpc_slice_buffer_init(grpc_slice_buffer *sb)
Definition: slice/slice_buffer.cc:116
GRPC_ERROR_CREATE_FROM_STATIC_STRING
#define GRPC_ERROR_CREATE_FROM_STATIC_STRING(desc)
Definition: error.h:291
main
int main(int argc, char **argv)
Definition: settings_timeout_test.cc:265
test_config.h
value
const char * value
Definition: hpack_parser_table.cc:165
grpc_server_credentials
Definition: src/core/lib/security/credentials/credentials.h:259
gpr_atm
intptr_t gpr_atm
Definition: impl/codegen/atm_gcc_atomic.h:32
grpc_core::Duration::Milliseconds
static constexpr Duration Milliseconds(int64_t millis)
Definition: src/core/lib/gprpp/time.h:155
grpc_completion_queue_pluck
GRPCAPI grpc_event grpc_completion_queue_pluck(grpc_completion_queue *cq, void *tag, gpr_timespec deadline, void *reserved)
Definition: completion_queue.cc:1328
absl::Now
ABSL_NAMESPACE_BEGIN Time Now()
Definition: abseil-cpp/absl/time/clock.cc:39
testing::InitGoogleTest
GTEST_API_ void InitGoogleTest(int *argc, char **argv)
Definition: bloaty/third_party/googletest/googletest/src/gtest.cc:6106
GRPC_ERROR_REF
#define GRPC_ERROR_REF(err)
Definition: error.h:261
endpoint_
grpc_endpoint * endpoint_
Definition: settings_timeout_test.cc:232
GRPC_ARG_SERVER_HANDSHAKE_TIMEOUT_MS
#define GRPC_ARG_SERVER_HANDSHAKE_TIMEOUT_MS
Definition: grpc_types.h:270
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
error_
grpc_error_handle error_
Definition: settings_timeout_test.cc:205
grpc_core::GetDNSResolver
DNSResolver * GetDNSResolver()
Definition: resolve_address.cc:38
exec_ctx
grpc_core::ExecCtx exec_ctx
Definition: end2end_binder_transport_test.cc:75
grpc_error_std_string
std::string grpc_error_std_string(grpc_error_handle error)
Definition: error.cc:944
grpc_pollset_shutdown
void grpc_pollset_shutdown(grpc_pollset *pollset, grpc_closure *closure)
Definition: pollset.cc:37
grpc_resource_quota_unref
GRPCAPI void grpc_resource_quota_unref(grpc_resource_quota *resource_quota)
Definition: api.cc:79
alloc.h
grpc::testing::TestEnvironment
Definition: test/core/util/test_config.h:54
grpc_core::Duration::Seconds
static constexpr Duration Seconds(int64_t seconds)
Definition: src/core/lib/gprpp/time.h:151
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
done_atm_
gpr_atm done_atm_
Definition: settings_timeout_test.cc:204
grpc_completion_queue_next
GRPCAPI grpc_event grpc_completion_queue_next(grpc_completion_queue *cq, gpr_timespec deadline, void *reserved)
Definition: completion_queue.cc:1133
ASSERT_TRUE
#define ASSERT_TRUE(condition)
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:1973
arg
struct arg arg
state
Definition: bloaty/third_party/zlib/contrib/blast/blast.c:41
server_address_
const char * server_address_
Definition: settings_timeout_test.cc:231
GRPC_ERROR_UNREF
#define GRPC_ERROR_UNREF(err)
Definition: error.h:262
EXPECT_TRUE
#define EXPECT_TRUE(condition)
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:1967
grpc_slice_buffer_destroy_internal
void grpc_slice_buffer_destroy_internal(grpc_slice_buffer *sb)
Definition: slice/slice_buffer.cc:123
mu_
gpr_mu * mu_
Definition: settings_timeout_test.cc:233
grpc_core::Timestamp::InfFuture
static constexpr Timestamp InfFuture()
Definition: src/core/lib/gprpp/time.h:79
grpc_slice_buffer
Definition: include/grpc/impl/codegen/slice.h:83
grpc_completion_queue_create_for_next
GRPCAPI grpc_completion_queue * grpc_completion_queue_create_for_next(void *reserved)
Definition: completion_queue_factory.cc:62
GRPC_ARG_POINTER
@ GRPC_ARG_POINTER
Definition: grpc_types.h:82
absl::StatusOr
Definition: abseil-cpp/absl/status/statusor.h:187
asyncio_get_stats.type
type
Definition: asyncio_get_stats.py:37
grpc_core::ExecCtx::Now
Timestamp Now()
Definition: exec_ctx.cc:90
endpoint.h
grpc_event::type
grpc_completion_type type
Definition: grpc_types.h:566
cq_
grpc_completion_queue * cq_
Definition: settings_timeout_test.cc:103
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
grpc_endpoint_add_to_pollset
void grpc_endpoint_add_to_pollset(grpc_endpoint *ep, grpc_pollset *pollset)
Definition: endpoint.cc:35
grpc_pollset
Definition: bm_cq_multiple_threads.cc:37
grpc_pollset_destroy
void grpc_pollset_destroy(grpc_pollset *pollset)
Definition: pollset.cc:41
grpc_closure
Definition: closure.h:56
grpc_pollset_set_add_pollset
void grpc_pollset_set_add_pollset(grpc_pollset_set *pollset_set, grpc_pollset *pollset)
Definition: pollset_set.cc:37
grpc_endpoint
Definition: endpoint.h:105
grpc_shutdown
GRPCAPI void grpc_shutdown(void)
Definition: init.cc:209
grpc_core::DNSResolver::ResolveNameBlocking
virtual absl::StatusOr< std::vector< grpc_resolved_address > > ResolveNameBlocking(absl::string_view name, absl::string_view default_port)=0
grpc_slice_buffer_reset_and_unref_internal
void grpc_slice_buffer_reset_and_unref_internal(grpc_slice_buffer *sb)
Definition: slice/slice_buffer.cc:238
grpc_core::ChannelArgsPreconditioning::PreconditionChannelArgs
ChannelArgs PreconditionChannelArgs(const grpc_channel_args *args) const
Definition: channel_args_preconditioning.cc:34
grpc_core::ExecCtx::Get
static ExecCtx * Get()
Definition: exec_ctx.h:205
state
static struct rpc_state state
Definition: bad_server_response_test.cc:87
absl::StatusOr::status
const Status & status() const &
Definition: abseil-cpp/absl/status/statusor.h:678
ASSERT_EQ
#define ASSERT_EQ(val1, val2)
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:2056
api.h
thread_
std::unique_ptr< std::thread > thread_
Definition: settings_timeout_test.cc:104


grpc
Author(s):
autogenerated on Fri May 16 2025 03:00:12