Go to the documentation of this file.
24 #include <gmock/gmock.h>
26 #include "absl/strings/str_cat.h"
27 #include "absl/strings/str_format.h"
29 #include <grpc/byte_buffer.h>
58 #define BAD_SOCKET_RETURN_VAL INVALID_SOCKET
61 #define BAD_SOCKET_RETURN_VAL (-1)
66 void*
Tag(
intptr_t t) {
return reinterpret_cast<void*
>(t); }
91 std::shared_ptr<grpc_core::WorkSerializer> lock;
95 void ArgsInit(ArgsStruct*
args) {
100 args->lock = std::make_shared<grpc_core::WorkSerializer>();
102 args->channel_args =
nullptr;
107 void ArgsFinish(ArgsStruct*
args) {
112 grpc_schedule_on_exec_ctx);
121 void PollPollsetUntilRequestDone(ArgsStruct*
args) {
139 explicit AssertFailureResultHandler(ArgsStruct*
args) :
args_(
args) {}
141 ~AssertFailureResultHandler()
override {
157 void TestCancelActiveDNSQuery(ArgsStruct*
args) {
160 kWaitForClientToSendFirstBytes,
163 "dns://[::1]:%d/dont-care-since-wont-be-resolved.test.com:1234",
164 fake_dns_server.
port());
168 client_target.c_str(),
nullptr,
args->pollset_set,
args->lock,
169 std::unique_ptr<grpc_core::Resolver::ResultHandler>(
170 new AssertFailureResultHandler(
args)));
171 resolver->StartLocked();
176 PollPollsetUntilRequestDone(
args);
205 TEST_F(CancelDuringAresQuery, TestCancelActiveDNSQuery) {
209 TestCancelActiveDNSQuery(&
args);
214 void MaybePollArbitraryPollsetTwice() {
240 void MaybePollArbitraryPollsetTwice() {}
244 TEST_F(CancelDuringAresQuery, TestFdsAreDeletedFromPollsetSet) {
259 TestCancelActiveDNSQuery(&
args);
265 MaybePollArbitraryPollsetTwice();
275 } cancellation_test_query_timeout_setting;
277 void TestCancelDuringActiveQuery(
278 cancellation_test_query_timeout_setting query_timeout_setting) {
282 kWaitForClientToSendFirstBytes,
289 query_timeout_setting);
294 if (query_timeout_setting ==
NONE) {
299 client_args =
nullptr;
301 }
else if (query_timeout_setting == SHORT) {
305 expected_error_message_substring =
318 }
else if (query_timeout_setting == ZERO) {
350 const char* error_string;
354 memset(ops_base, 0,
sizeof(ops_base));
380 call, ops_base,
static_cast<size_t>(
op - ops_base),
Tag(1),
nullptr);
390 gpr_free(
const_cast<char*
>(error_string));
400 TEST_F(CancelDuringAresQuery,
401 TestHitDeadlineAndDestroyChannelDuringAresResolutionIsGraceful) {
402 TestCancelDuringActiveQuery(
NONE );
406 CancelDuringAresQuery,
407 TestHitDeadlineAndDestroyChannelDuringAresResolutionWithQueryTimeoutIsGraceful) {
408 TestCancelDuringActiveQuery(SHORT );
412 CancelDuringAresQuery,
413 TestHitDeadlineAndDestroyChannelDuringAresResolutionWithZeroQueryTimeoutIsGraceful) {
414 TestCancelDuringActiveQuery(ZERO );
419 int main(
int argc,
char** argv) {
struct grpc_pollset_worker grpc_pollset_worker
#define GRPC_CLOSURE_INIT(closure, cb, cb_arg, scheduler)
GPRAPI void grpc_slice_unref(grpc_slice s)
size_t grpc_pollset_size(void)
GPRAPI void gpr_mu_unlock(gpr_mu *mu)
GRPCAPI void grpc_call_details_destroy(grpc_call_details *details)
GRPCAPI void grpc_call_details_init(grpc_call_details *details)
grpc_metadata_array * trailing_metadata
gpr_timespec grpc_timeout_seconds_to_deadline(int64_t time_s)
grpc_status_code * status
@ GRPC_STATUS_UNAVAILABLE
std::string StrCat(const AlphaNum &a, const AlphaNum &b)
return memset(p, 0, total)
ABSL_MUST_USE_RESULT std::string StrFormat(const FormatSpec< Args... > &format, const Args &... args)
struct grpc_op::grpc_op_data::grpc_op_send_initial_metadata send_initial_metadata
#define EXPECT_THAT(value, matcher)
struct grpc_pollset_set grpc_pollset_set
grpc_pollset_set * grpc_pollset_set_create()
GPRAPI void gpr_free(void *ptr)
virtual void ReportResult(Result result)=0
Reports a result to the channel.
OPENSSL_EXPORT pem_password_cb void * u
grpc_error_handle grpc_pollset_work(grpc_pollset *pollset, grpc_pollset_worker **worker, grpc_core::Timestamp deadline)
@ GRPC_STATUS_DEADLINE_EXCEEDED
#define GRPC_LOG_IF_ERROR(what, error)
grpc_channel_args * args_
static void SetUpTestCase()
size_t grpc_iomgr_count_objects_for_testing(void)
void grpc_pollset_init(grpc_pollset *pollset, gpr_mu **mu)
union grpc_op::grpc_op_data data
GPRAPI void * gpr_zalloc(size_t size)
#define GRPC_ARG_DNS_ARES_QUERY_TIMEOUT_MS
GRPCAPI void grpc_metadata_array_destroy(grpc_metadata_array *array)
static grpc_metadata_array trailing_metadata_recv
@ GRPC_OP_RECV_INITIAL_METADATA
GPRAPI int gpr_time_cmp(gpr_timespec a, gpr_timespec b)
void grpc_pollset_set_del_pollset(grpc_pollset_set *pollset_set, grpc_pollset *pollset)
static const CoreConfiguration & Get()
GRPCAPI void grpc_call_unref(grpc_call *call)
const char ** error_string
gpr_timespec grpc_timeout_milliseconds_to_deadline(int64_t time_ms)
GPRAPI void gpr_log(const char *file, int line, gpr_log_severity severity, const char *format,...) GPR_PRINT_FORMAT_CHECK(4
void cq_verifier_destroy(cq_verifier *v)
Results returned by the resolver.
struct grpc_call grpc_call
void grpc_pollset_set_destroy(grpc_pollset_set *pollset_set)
#define gpr_atm_acq_load(p)
GRPCAPI grpc_channel_credentials * grpc_insecure_credentials_create()
void grpc_channel_args_destroy(grpc_channel_args *a)
GPRAPI grpc_slice grpc_slice_from_static_string(const char *source)
cq_verifier * cq_verifier_create(grpc_completion_queue *cq)
#define gpr_atm_rel_store(p, value)
GPRAPI void gpr_mu_lock(gpr_mu *mu)
static grpc_metadata_array request_metadata_recv
#define CQ_EXPECT_COMPLETION(v, tag, success)
int RUN_ALL_TESTS() GTEST_MUST_USE_RESULT_
grpc_error_handle grpc_pollset_kick(grpc_pollset *pollset, grpc_pollset_worker *specific_worker)
GPRAPI gpr_timespec gpr_now(gpr_clock_type clock)
#define GPR_GLOBAL_CONFIG_SET(name, value)
grpc_slice * status_details
static grpc_slice details
OrphanablePtr< Resolver > CreateResolver(absl::string_view target, const grpc_channel_args *args, grpc_pollset_set *pollset_set, std::shared_ptr< WorkSerializer > work_serializer, std::unique_ptr< Resolver::ResultHandler > result_handler) const
GRPCAPI void grpc_channel_credentials_release(grpc_channel_credentials *creds)
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)
int main(int argc, char **argv)
ABSL_NAMESPACE_BEGIN Time Now()
GRPCAPI grpc_channel * grpc_channel_create(const char *target, grpc_channel_credentials *creds, const grpc_channel_args *args)
GTEST_API_ void InitGoogleTest(int *argc, char **argv)
#define GRPC_PROPAGATE_DEFAULTS
static void TearDownTestCase()
GRPCAPI void grpc_completion_queue_destroy(grpc_completion_queue *cq)
@ GRPC_OP_SEND_INITIAL_METADATA
grpc_core::ExecCtx exec_ctx
void grpc_pollset_shutdown(grpc_pollset *pollset, grpc_closure *closure)
std::unique_ptr< T, Deleter > OrphanablePtr
struct grpc_op::grpc_op_data::grpc_op_recv_status_on_client recv_status_on_client
void grpc_pollset_set_add_pollset_set(grpc_pollset_set *bag, grpc_pollset_set *item)
GRPCAPI grpc_event grpc_completion_queue_next(grpc_completion_queue *cq, gpr_timespec deadline, void *reserved)
void cq_verify(cq_verifier *v, int timeout_sec)
GRPCAPI void grpc_completion_queue_shutdown(grpc_completion_queue *cq)
GRPCAPI void grpc_channel_destroy(grpc_channel *channel)
const ResolverRegistry & resolver_registry() const
struct grpc_channel grpc_channel
static ProcessReadResult CloseSocketUponCloseFromPeer(int bytes_received_size, int read_error, int s)
static constexpr Timestamp InfFuture()
GRPCAPI grpc_completion_queue * grpc_completion_queue_create_for_next(void *reserved)
struct grpc_op::grpc_op_data::grpc_op_recv_initial_metadata recv_initial_metadata
grpc_completion_type type
GRPCAPI void grpc_init(void)
@ GRPC_OP_RECV_STATUS_ON_CLIENT
void grpc_pollset_destroy(grpc_pollset *pollset)
void grpc_pollset_set_add_pollset(grpc_pollset_set *pollset_set, grpc_pollset *pollset)
PolymorphicMatcher< internal::HasSubstrMatcher< internal::string > > HasSubstr(const internal::string &substring)
static grpc_metadata_array initial_metadata_recv
GRPCAPI grpc_call_error grpc_call_start_batch(grpc_call *call, const grpc_op *ops, size_t nops, void *tag, void *reserved)
GRPCAPI void grpc_shutdown(void)
static grpc_completion_queue * cq
grpc_channel_args * grpc_channel_args_copy_and_add(const grpc_channel_args *src, const grpc_arg *to_add, size_t num_to_add)
@ GRPC_OP_SEND_CLOSE_FROM_CLIENT
static grpc_call_details call_details
static void DoNothing(void *, grpc_error_handle)
GRPCAPI void grpc_metadata_array_init(grpc_metadata_array *array)
#define TEST_F(test_fixture, test_name)
grpc
Author(s):
autogenerated on Fri May 16 2025 02:57:52