diff options
author | Alexander Polcyn <apolcyn@google.com> | 2018-06-20 17:12:56 -0700 |
---|---|---|
committer | Alexander Polcyn <apolcyn@google.com> | 2018-06-26 10:09:46 -0700 |
commit | 0220a998db28008bca5dd27680405d28f359790c (patch) | |
tree | da34d461347a69d260a37589fea1440dce35a6e5 /test/cpp/naming | |
parent | 9fcfbb07bd5a7303cc23893268c40f65d249c340 (diff) |
Explicitly delete fd from pollset set after c-ares is done
Diffstat (limited to 'test/cpp/naming')
-rw-r--r-- | test/cpp/naming/cancel_ares_query_test.cc | 46 |
1 files changed, 35 insertions, 11 deletions
diff --git a/test/cpp/naming/cancel_ares_query_test.cc b/test/cpp/naming/cancel_ares_query_test.cc index 11cdc0b774..0d59bf6fb6 100644 --- a/test/cpp/naming/cancel_ares_query_test.cc +++ b/test/cpp/naming/cancel_ares_query_test.cc @@ -160,10 +160,7 @@ void CheckResolverResultAssertFailureLocked(void* arg, grpc_error* error) { gpr_mu_unlock(args->mu); } -TEST(CancelDuringAresQuery, TestCancelActiveDNSQuery) { - grpc_core::ExecCtx exec_ctx; - ArgsStruct args; - ArgsInit(&args); +void TestCancelActiveDNSQuery(ArgsStruct* args) { int fake_dns_port = grpc_pick_unused_port_or_die(); FakeNonResponsiveDNSServer fake_dns_server(fake_dns_port); char* client_target; @@ -173,20 +170,47 @@ TEST(CancelDuringAresQuery, TestCancelActiveDNSQuery) { fake_dns_port)); // create resolver and resolve grpc_core::OrphanablePtr<grpc_core::Resolver> resolver = - grpc_core::ResolverRegistry::CreateResolver(client_target, nullptr, - args.pollset_set, args.lock); + grpc_core::ResolverRegistry::CreateResolver( + client_target, nullptr, args->pollset_set, args->lock); gpr_free(client_target); grpc_closure on_resolver_result_changed; GRPC_CLOSURE_INIT(&on_resolver_result_changed, - CheckResolverResultAssertFailureLocked, (void*)&args, - grpc_combiner_scheduler(args.lock)); - resolver->NextLocked(&args.channel_args, &on_resolver_result_changed); + CheckResolverResultAssertFailureLocked, (void*)args, + grpc_combiner_scheduler(args->lock)); + resolver->NextLocked(&args->channel_args, &on_resolver_result_changed); // Without resetting and causing resolver shutdown, the // PollPollsetUntilRequestDone call should never finish. resolver.reset(); grpc_core::ExecCtx::Get()->Flush(); - PollPollsetUntilRequestDone(&args); - ArgsFinish(&args); + PollPollsetUntilRequestDone(args); + ArgsFinish(args); +} + +TEST(CancelDuringAresQuery, TestCancelActiveDNSQuery) { + grpc_core::ExecCtx exec_ctx; + ArgsStruct args; + ArgsInit(&args); + TestCancelActiveDNSQuery(&args); +} + +TEST(CancelDuringAresQuery, TestFdsAreDeletedFromPollsetSet) { + grpc_core::ExecCtx exec_ctx; + ArgsStruct args; + ArgsInit(&args); + // Add fake_other_pollset_set into the mix to test + // that we're explicitly deleting fd's from their pollset. + // If we aren't doing so, then the remaining presence of + // "fake_other_pollset_set" after the request is done and the resolver + // pollset set is destroyed should keep the resolver's fd alive and + // fail the test. + grpc_pollset_set* fake_other_pollset_set = grpc_pollset_set_create(); + grpc_pollset_set_add_pollset_set(fake_other_pollset_set, args.pollset_set); + // Note that running the cancellation c-ares test is somewhat irrelevant for + // this test. This test only cares about what happens to fd's that c-ares + // opens. + TestCancelActiveDNSQuery(&args); + EXPECT_EQ(grpc_iomgr_count_objects_for_testing(), 0u); + grpc_pollset_set_destroy(fake_other_pollset_set); } TEST(CancelDuringAresQuery, |