resolve_address_test.cc
Go to the documentation of this file.
1 /*
2  *
3  * Copyright 2015 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 
20 
21 #include <string.h>
22 
24 #include <gmock/gmock.h>
25 #include <gtest/gtest.h>
26 
27 #include "absl/functional/bind_front.h"
28 #include "absl/strings/match.h"
29 
30 #include <grpc/grpc.h>
31 #include <grpc/support/alloc.h>
32 #include <grpc/support/log.h>
33 #include <grpc/support/sync.h>
34 #include <grpc/support/time.h>
35 
43 #include "test/core/util/cmdline.h"
47 
48 namespace {
49 
50 grpc_core::Timestamp NSecDeadline(int seconds) {
53 }
54 
55 const char* g_resolver_type = "";
56 
57 class ResolveAddressTest : public ::testing::Test {
58  public:
59  ResolveAddressTest() {
60  grpc_init();
64  pollset_set_ = grpc_pollset_set_create();
66  default_inject_config_ = grpc_ares_test_only_inject_config;
67  }
68 
69  ~ResolveAddressTest() override {
70  {
73  grpc_pollset_set_destroy(pollset_set_);
74  grpc_closure do_nothing_cb;
75  GRPC_CLOSURE_INIT(&do_nothing_cb, DoNothing, nullptr,
76  grpc_schedule_on_exec_ctx);
78  grpc_pollset_shutdown(pollset_, &do_nothing_cb);
80  // exec_ctx needs to be flushed before calling grpc_pollset_destroy()
84  // reset this since it might have been altered
85  grpc_ares_test_only_inject_config = default_inject_config_;
86  }
87  grpc_shutdown();
88  }
89 
90  void PollPollsetUntilRequestDone() {
91  // Try to give enough time for c-ares to run through its retries
92  // a few times if needed.
93  grpc_core::Timestamp deadline = NSecDeadline(90);
94  while (true) {
96  {
98  if (done_) {
99  break;
100  }
101  grpc_core::Duration time_left =
102  deadline - grpc_core::ExecCtx::Get()->Now();
103  gpr_log(GPR_DEBUG, "done=%d, time_left=%" PRId64, done_,
104  time_left.millis());
105  ASSERT_GE(time_left, grpc_core::Duration::Zero());
106  grpc_pollset_worker* worker = nullptr;
108  NSecDeadline(1)));
109  }
110  }
111  }
112 
113  void MustSucceed(absl::StatusOr<std::vector<grpc_resolved_address>> result) {
114  EXPECT_EQ(result.status(), absl::OkStatus());
115  EXPECT_FALSE(result->empty());
116  Finish();
117  }
118 
119  void MustFail(absl::StatusOr<std::vector<grpc_resolved_address>> result) {
120  EXPECT_NE(result.status(), absl::OkStatus());
121  Finish();
122  }
123 
124  void MustFailExpectCancelledErrorMessage(
125  absl::StatusOr<std::vector<grpc_resolved_address>> result) {
126  EXPECT_NE(result.status(), absl::OkStatus());
127  EXPECT_THAT(result.status().ToString(),
128  testing::HasSubstr("DNS query cancelled"));
129  Finish();
130  }
131 
132  void DontCare(
133  absl::StatusOr<std::vector<grpc_resolved_address>> /* result */) {
134  Finish();
135  }
136 
137  // This test assumes the environment has an ipv6 loopback
138  void MustSucceedWithIPv6First(
139  absl::StatusOr<std::vector<grpc_resolved_address>> result) {
140  EXPECT_EQ(result.status(), absl::OkStatus());
141  EXPECT_TRUE(!result->empty() &&
142  reinterpret_cast<const struct sockaddr*>((*result)[0].addr)
143  ->sa_family == AF_INET6);
144  Finish();
145  }
146 
147  void MustSucceedWithIPv4First(
148  absl::StatusOr<std::vector<grpc_resolved_address>> result) {
149  EXPECT_EQ(result.status(), absl::OkStatus());
150  EXPECT_TRUE(!result->empty() &&
151  reinterpret_cast<const struct sockaddr*>((*result)[0].addr)
152  ->sa_family == AF_INET);
153  Finish();
154  }
155 
156  void MustNotBeCalled(
157  absl::StatusOr<std::vector<grpc_resolved_address>> /*result*/) {
158  FAIL() << "This should never be called";
159  }
160 
161  void Finish() {
163  done_ = true;
164  GRPC_LOG_IF_ERROR("pollset_kick", grpc_pollset_kick(pollset_, nullptr));
165  }
166 
167  grpc_pollset_set* pollset_set() const { return pollset_set_; }
168 
169  private:
170  static void DoNothing(void* /*arg*/, grpc_error_handle /*error*/) {}
171 
172  gpr_mu* mu_;
173  bool done_ = false; // guarded by mu
174  grpc_pollset* pollset_; // guarded by mu
175  grpc_pollset_set* pollset_set_;
176  // the default value of grpc_ares_test_only_inject_config, which might
177  // be modified during a test
178  void (*default_inject_config_)(ares_channel channel) = nullptr;
179 };
180 
181 } // namespace
182 
183 TEST_F(ResolveAddressTest, Localhost) {
186  "localhost:1", "", pollset_set(),
187  absl::bind_front(&ResolveAddressTest::MustSucceed, this));
189  PollPollsetUntilRequestDone();
190 }
191 
192 TEST_F(ResolveAddressTest, DefaultPort) {
195  "localhost", "1", pollset_set(),
196  absl::bind_front(&ResolveAddressTest::MustSucceed, this));
198  PollPollsetUntilRequestDone();
199 }
200 
201 TEST_F(ResolveAddressTest, LocalhostResultHasIPv6First) {
202  if (std::string(g_resolver_type) != "ares") {
203  GTEST_SKIP() << "this test is only valid with the c-ares resolver";
204  }
207  "localhost:1", "", pollset_set(),
208  absl::bind_front(&ResolveAddressTest::MustSucceedWithIPv6First, this));
210  PollPollsetUntilRequestDone();
211 }
212 
213 namespace {
214 
215 bool IPv6DisabledGetSourceAddr(address_sorting_source_addr_factory* /*factory*/,
216  const address_sorting_address* dest_addr,
217  address_sorting_address* source_addr) {
218  // Mock lack of IPv6. For IPv4, set the source addr to be the same
219  // as the destination; tests won't actually connect on the result anyways.
220  if (address_sorting_abstract_get_family(dest_addr) ==
222  return false;
223  }
224  memcpy(source_addr->addr, &dest_addr->addr, dest_addr->len);
225  source_addr->len = dest_addr->len;
226  return true;
227 }
228 
229 void DeleteSourceAddrFactory(address_sorting_source_addr_factory* factory) {
230  delete factory;
231 }
232 
234  kMockIpv6DisabledSourceAddrFactoryVtable = {
235  IPv6DisabledGetSourceAddr,
236  DeleteSourceAddrFactory,
237 };
238 
239 } // namespace
240 
241 TEST_F(ResolveAddressTest, LocalhostResultHasIPv4FirstWhenIPv6IsntAvalailable) {
242  if (std::string(g_resolver_type) != "ares") {
243  GTEST_SKIP() << "this test is only valid with the c-ares resolver";
244  }
245  // Mock the kernel source address selection. Note that source addr factory
246  // is reset to its default value during grpc initialization for each test.
249  mock->vtable = &kMockIpv6DisabledSourceAddrFactoryVtable;
251  // run the test
254  "localhost:1", "", pollset_set(),
255  absl::bind_front(&ResolveAddressTest::MustSucceedWithIPv4First, this));
257  PollPollsetUntilRequestDone();
258 }
259 
260 TEST_F(ResolveAddressTest, NonNumericDefaultPort) {
263  "localhost", "http", pollset_set(),
264  absl::bind_front(&ResolveAddressTest::MustSucceed, this));
266  PollPollsetUntilRequestDone();
267 }
268 
269 TEST_F(ResolveAddressTest, MissingDefaultPort) {
272  "localhost", "", pollset_set(),
273  absl::bind_front(&ResolveAddressTest::MustFail, this));
275  PollPollsetUntilRequestDone();
276 }
277 
278 TEST_F(ResolveAddressTest, IPv6WithPort) {
281  "[2001:db8::1]:1", "", pollset_set(),
282  absl::bind_front(&ResolveAddressTest::MustSucceed, this));
284  PollPollsetUntilRequestDone();
285 }
286 
287 void TestIPv6WithoutPort(ResolveAddressTest* test, const char* target) {
290  target, "80", test->pollset_set(),
291  absl::bind_front(&ResolveAddressTest::MustSucceed, test));
293  test->PollPollsetUntilRequestDone();
294 }
295 
296 TEST_F(ResolveAddressTest, IPv6WithoutPortNoBrackets) {
297  TestIPv6WithoutPort(this, "2001:db8::1");
298 }
299 
300 TEST_F(ResolveAddressTest, IPv6WithoutPortWithBrackets) {
301  TestIPv6WithoutPort(this, "[2001:db8::1]");
302 }
303 
304 TEST_F(ResolveAddressTest, IPv6WithoutPortV4MappedV6) {
305  TestIPv6WithoutPort(this, "2001:db8::1.2.3.4");
306 }
307 
308 void TestInvalidIPAddress(ResolveAddressTest* test, const char* target) {
311  target, "", test->pollset_set(),
312  absl::bind_front(&ResolveAddressTest::MustFail, test));
314  test->PollPollsetUntilRequestDone();
315 }
316 
317 TEST_F(ResolveAddressTest, InvalidIPv4Addresses) {
318  TestInvalidIPAddress(this, "293.283.1238.3:1");
319 }
320 
321 TEST_F(ResolveAddressTest, InvalidIPv6Addresses) {
322  TestInvalidIPAddress(this, "[2001:db8::11111]:1");
323 }
324 
325 void TestUnparseableHostPort(ResolveAddressTest* test, const char* target) {
328  target, "1", test->pollset_set(),
329  absl::bind_front(&ResolveAddressTest::MustFail, test));
331  test->PollPollsetUntilRequestDone();
332 }
333 
334 TEST_F(ResolveAddressTest, UnparseableHostPortsOnlyBracket) {
335  TestUnparseableHostPort(this, "[");
336 }
337 
338 TEST_F(ResolveAddressTest, UnparseableHostPortsMissingRightBracket) {
339  TestUnparseableHostPort(this, "[::1");
340 }
341 
342 TEST_F(ResolveAddressTest, UnparseableHostPortsBadPort) {
343  TestUnparseableHostPort(this, "[::1]bad");
344 }
345 
346 TEST_F(ResolveAddressTest, UnparseableHostPortsBadIPv6) {
347  TestUnparseableHostPort(this, "[1.2.3.4]");
348 }
349 
350 TEST_F(ResolveAddressTest, UnparseableHostPortsBadLocalhost) {
351  TestUnparseableHostPort(this, "[localhost]");
352 }
353 
354 TEST_F(ResolveAddressTest, UnparseableHostPortsBadLocalhostWithPort) {
355  TestUnparseableHostPort(this, "[localhost]:1");
356 }
357 
358 // Kick off a simple DNS resolution and then immediately cancel. This
359 // test doesn't care what the result is, just that we don't crash etc.
360 TEST_F(ResolveAddressTest, ImmediateCancel) {
362  auto request_handle = grpc_core::GetDNSResolver()->ResolveName(
363  "localhost:1", "1", pollset_set(),
364  absl::bind_front(&ResolveAddressTest::DontCare, this));
365  if (grpc_core::GetDNSResolver()->Cancel(request_handle)) {
366  Finish();
367  }
369  PollPollsetUntilRequestDone();
370 }
371 
372 // Attempt to cancel a request after it has completed.
373 TEST_F(ResolveAddressTest, CancelDoesNotSucceed) {
375  auto request_handle = grpc_core::GetDNSResolver()->ResolveName(
376  "localhost:1", "1", pollset_set(),
377  absl::bind_front(&ResolveAddressTest::MustSucceed, this));
379  PollPollsetUntilRequestDone();
380  ASSERT_FALSE(grpc_core::GetDNSResolver()->Cancel(request_handle));
381 }
382 
383 namespace {
384 
385 int g_fake_non_responsive_dns_server_port;
386 
387 void InjectNonResponsiveDNSServer(ares_channel channel) {
389  "Injecting broken nameserver list. Bad server address:|[::1]:%d|.",
390  g_fake_non_responsive_dns_server_port);
391  // Configure a non-responsive DNS server at the front of c-ares's nameserver
392  // list.
393  struct ares_addr_port_node dns_server_addrs[1];
394  memset(dns_server_addrs, 0, sizeof(dns_server_addrs));
395  dns_server_addrs[0].family = AF_INET6;
396  (reinterpret_cast<char*>(&dns_server_addrs[0].addr.addr6))[15] = 0x1;
397  dns_server_addrs[0].tcp_port = g_fake_non_responsive_dns_server_port;
398  dns_server_addrs[0].udp_port = g_fake_non_responsive_dns_server_port;
399  dns_server_addrs[0].next = nullptr;
401 }
402 
403 } // namespace
404 
405 TEST_F(ResolveAddressTest, CancelWithNonResponsiveDNSServer) {
406  if (std::string(g_resolver_type) != "ares") {
407  GTEST_SKIP() << "the native resolver doesn't support cancellation, so we "
408  "can only test this with c-ares";
409  }
410  // Inject an unresponsive DNS server into the resolver's DNS server config
413  kWaitForClientToSendFirstBytes,
415  g_fake_non_responsive_dns_server_port = fake_dns_server.port();
416  grpc_ares_test_only_inject_config = InjectNonResponsiveDNSServer;
417  // Run the test
419  auto request_handle = grpc_core::GetDNSResolver()->ResolveName(
420  "foo.bar.com:1", "1", pollset_set(),
421  absl::bind_front(&ResolveAddressTest::MustNotBeCalled, this));
422  grpc_core::ExecCtx::Get()->Flush(); // initiate DNS requests
423  ASSERT_TRUE(grpc_core::GetDNSResolver()->Cancel(request_handle));
424  Finish();
425  // let cancellation work finish to ensure the callback is not called
427  PollPollsetUntilRequestDone();
428 }
429 
430 // RAII class for pollset and pollset_set creation
432  public:
433  static std::unique_ptr<PollsetSetWrapper> Create() {
434  return absl::WrapUnique<PollsetSetWrapper>(new PollsetSetWrapper());
435  }
436 
440  grpc_pollset_shutdown(ps_, nullptr);
443  gpr_free(ps_);
444  gpr_log(GPR_DEBUG, "PollsetSetWrapper:%p deleted", this);
445  }
446 
448 
449  private:
451  ps_ = static_cast<grpc_pollset*>(gpr_zalloc(grpc_pollset_size()));
455  gpr_log(GPR_DEBUG, "PollsetSetWrapper:%p created", this);
456  }
457 
461 };
462 
463 TEST_F(ResolveAddressTest, DeleteInterestedPartiesAfterCancellation) {
464  // Regression test for race around interested_party deletion after
465  // cancellation.
466  if (absl::string_view(g_resolver_type) != "ares") {
467  GTEST_SKIP() << "the native resolver doesn't support cancellation, so we "
468  "can only test this with c-ares";
469  }
470  // Inject an unresponsive DNS server into the resolver's DNS server config
473  kWaitForClientToSendFirstBytes,
475  g_fake_non_responsive_dns_server_port = fake_dns_server.port();
476  grpc_ares_test_only_inject_config = InjectNonResponsiveDNSServer;
477  {
479  // Create a pollset_set, destroyed immediately after cancellation
480  std::unique_ptr<PollsetSetWrapper> pss = PollsetSetWrapper::Create();
481  // Run the test
482  auto request_handle = grpc_core::GetDNSResolver()->ResolveName(
483  "foo.bar.com:1", "1", pss->pollset_set(),
484  absl::bind_front(&ResolveAddressTest::MustNotBeCalled, this));
485  grpc_core::ExecCtx::Get()->Flush(); // initiate DNS requests
486  ASSERT_TRUE(grpc_core::GetDNSResolver()->Cancel(request_handle));
487  }
488  {
489  // let cancellation work finish to ensure the callback is not called
491  Finish();
492  }
493  PollPollsetUntilRequestDone();
494 }
495 
496 int main(int argc, char** argv) {
497  // Configure the DNS resolver (c-ares vs. native) based on the
498  // name of the binary. TODO(apolcyn): is there a way to pass command
499  // line flags to a gtest that it works in all of our test environments?
500  if (absl::StrContains(std::string(argv[0]), "using_native_resolver")) {
501  g_resolver_type = "native";
502  } else if (absl::StrContains(std::string(argv[0]), "using_ares_resolver")) {
503  g_resolver_type = "ares";
504  } else {
505  GPR_ASSERT(0);
506  }
507  GPR_GLOBAL_CONFIG_SET(grpc_dns_resolver, g_resolver_type);
508  ::testing::InitGoogleTest(&argc, argv);
509  grpc::testing::TestEnvironment env(&argc, argv);
510  const auto result = RUN_ALL_TESTS();
511  return result;
512 }
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
EXPECT_FALSE
#define EXPECT_FALSE(condition)
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:1970
absl::time_internal::cctz::seconds
std::chrono::duration< std::int_fast64_t > seconds
Definition: abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h:40
_gevent_test_main.result
result
Definition: _gevent_test_main.py:96
PollsetSetWrapper::mu_
gpr_mu * mu_
Definition: resolve_address_test.cc:458
grpc_pollset_size
size_t grpc_pollset_size(void)
Definition: pollset.cc:56
iomgr.h
address_sorting.h
gpr_mu_unlock
GPRAPI void gpr_mu_unlock(gpr_mu *mu)
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
AF_INET6
#define AF_INET6
Definition: ares_setup.h:208
address_sorting_source_addr_factory::vtable
const address_sorting_source_addr_factory_vtable * vtable
Definition: address_sorting.h:90
generate.env
env
Definition: generate.py:37
TestIPv6WithoutPort
void TestIPv6WithoutPort(ResolveAddressTest *test, const char *target)
Definition: resolve_address_test.cc:287
memset
return memset(p, 0, total)
absl::bind_front
constexpr ABSL_NAMESPACE_BEGIN functional_internal::bind_front_t< F, BoundArgs... > bind_front(F &&func, BoundArgs &&... args)
Definition: abseil-cpp/absl/functional/bind_front.h:182
EXPECT_THAT
#define EXPECT_THAT(value, matcher)
grpc_core::MutexLockForGprMu
Definition: src/core/lib/gprpp/sync.h:152
test
Definition: spinlock_test.cc:36
ares_addr_port_node
Definition: ares.h:704
grpc_pollset_set
struct grpc_pollset_set grpc_pollset_set
Definition: iomgr_fwd.h:23
string.h
absl::string_view
Definition: abseil-cpp/absl/strings/string_view.h:167
grpc_pollset_set_create
grpc_pollset_set * grpc_pollset_set_create()
Definition: pollset_set.cc:29
grpc_core::Timestamp
Definition: src/core/lib/gprpp/time.h:62
gpr_free
GPRAPI void gpr_free(void *ptr)
Definition: alloc.cc:51
pollset_
grpc_pollset * pollset_
Definition: settings_timeout_test.cc:234
TEST_F
TEST_F(ResolveAddressTest, Localhost)
Definition: resolve_address_test.cc:183
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
TestUnparseableHostPort
void TestUnparseableHostPort(ResolveAddressTest *test, const char *target)
Definition: resolve_address_test.cc:325
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
address_sorting_address::len
size_t len
Definition: address_sorting.h:52
ctx
static struct test_ctx ctx
Definition: test-ipc-send-recv.c:65
main
int main(int argc, char **argv)
Definition: resolve_address_test.cc:496
grpc_pollset_work
grpc_error_handle grpc_pollset_work(grpc_pollset *pollset, grpc_pollset_worker **worker, grpc_core::Timestamp deadline)
Definition: pollset.cc:45
GTEST_SKIP
#define GTEST_SKIP()
Definition: perf_counters_gtest.cc:10
GRPC_LOG_IF_ERROR
#define GRPC_LOG_IF_ERROR(what, error)
Definition: error.h:398
time.h
PollsetSetWrapper::~PollsetSetWrapper
~PollsetSetWrapper()
Definition: resolve_address_test.cc:437
PollsetSetWrapper::pollset_set
grpc_pollset_set * pollset_set()
Definition: resolve_address_test.cc:447
done_
std::atomic< bool > done_
Definition: fuzzing_event_engine_test.cc:57
grpc_core::testing::FakeUdpAndTcpServer::port
int port()
Definition: fake_udp_and_tcp_server.h:94
gen_build_yaml.struct
def struct(**kwargs)
Definition: test/core/end2end/gen_build_yaml.py:30
testing::Test
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:402
mu_
Mutex mu_
Definition: oob_backend_metric.cc:115
grpc_pollset_init
void grpc_pollset_init(grpc_pollset *pollset, gpr_mu **mu)
Definition: pollset.cc:33
EXPECT_EQ
#define EXPECT_EQ(a, b)
Definition: iomgr/time_averaged_stats_test.cc:27
gpr_zalloc
GPRAPI void * gpr_zalloc(size_t size)
Definition: alloc.cc:40
address_sorting_source_addr_factory_vtable
Definition: address_sorting.h:78
memcpy
memcpy(mem, inblock.get(), min(CONTAINING_RECORD(inblock.get(), MEMBLOCK, data) ->size, size))
address_sorting_address::addr
char addr[128]
Definition: address_sorting.h:51
channel
wrapped_grpc_channel * channel
Definition: src/php/ext/grpc/call.h:33
GPR_ASSERT
#define GPR_ASSERT(x)
Definition: include/grpc/impl/codegen/log.h:94
grpc_pollset_set_del_pollset
void grpc_pollset_set_del_pollset(grpc_pollset_set *pollset_set, grpc_pollset *pollset)
Definition: pollset_set.cc:42
grpc_core::ExecCtx::Flush
bool Flush()
Definition: exec_ctx.cc:69
EXPECT_NE
#define EXPECT_NE(val1, val2)
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:2028
grpc_ares_wrapper.h
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
address_sorting_abstract_get_family
address_sorting_family address_sorting_abstract_get_family(const address_sorting_address *address)
Definition: address_sorting.c:135
grpc_core::testing::FakeUdpAndTcpServer
Definition: fake_udp_and_tcp_server.h:72
grpc.h
grpc_pollset_set_destroy
void grpc_pollset_set_destroy(grpc_pollset_set *pollset_set)
Definition: pollset_set.cc:33
address_sorting_address
Definition: address_sorting.h:50
time.h
FAIL
@ FAIL
Definition: call_creds.cc:42
absl::StrContains
ABSL_NAMESPACE_BEGIN bool StrContains(absl::string_view haystack, absl::string_view needle) noexcept
Definition: third_party/abseil-cpp/absl/strings/match.h:46
gpr_mu_lock
GPRAPI void gpr_mu_lock(gpr_mu *mu)
RUN_ALL_TESTS
int RUN_ALL_TESTS() GTEST_MUST_USE_RESULT_
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:2471
PollsetSetWrapper::ps_
grpc_pollset * ps_
Definition: resolve_address_test.cc:459
grpc_core::testing::FakeUdpAndTcpServer::AcceptMode
AcceptMode
Definition: fake_udp_and_tcp_server.h:79
grpc_pollset_kick
grpc_error_handle grpc_pollset_kick(grpc_pollset *pollset, grpc_pollset_worker *specific_worker)
Definition: pollset.cc:51
fake_udp_and_tcp_server.h
grpc_core::ExecCtx
Definition: exec_ctx.h:97
ARES_SUCCESS
#define ARES_SUCCESS
Definition: ares.h:98
PollsetSetWrapper::pss_
grpc_pollset_set * pss_
Definition: resolve_address_test.cc:460
GPR_GLOBAL_CONFIG_SET
#define GPR_GLOBAL_CONFIG_SET(name, value)
Definition: global_config_generic.h:26
executor.h
test_config.h
grpc_core::Duration::Zero
static constexpr Duration Zero()
Definition: src/core/lib/gprpp/time.h:130
ares_channeldata
Definition: ares_private.h:266
testing::InitGoogleTest
GTEST_API_ void InitGoogleTest(int *argc, char **argv)
Definition: bloaty/third_party/googletest/googletest/src/gtest.cc:6106
grpc_core::Duration::millis
constexpr int64_t millis() const
Definition: src/core/lib/gprpp/time.h:208
ares_set_servers_ports
CARES_EXTERN int ares_set_servers_ports(ares_channel channel, struct ares_addr_port_node *servers)
Definition: ares_options.c:195
gpr_mu
pthread_mutex_t gpr_mu
Definition: impl/codegen/sync_posix.h:47
TestInvalidIPAddress
void TestInvalidIPAddress(ResolveAddressTest *test, const char *target)
Definition: resolve_address_test.cc:308
grpc_core::GetDNSResolver
DNSResolver * GetDNSResolver()
Definition: resolve_address.cc:38
benchmark::internal::Finish
double Finish(Counter const &c, IterationCount iterations, double cpu_time, double num_threads)
Definition: benchmark/src/counter.cc:20
exec_ctx
grpc_core::ExecCtx exec_ctx
Definition: end2end_binder_transport_test.cc:75
grpc_pollset_shutdown
void grpc_pollset_shutdown(grpc_pollset *pollset, grpc_closure *closure)
Definition: pollset.cc:37
alloc.h
address_sorting_override_source_addr_factory_for_testing
void address_sorting_override_source_addr_factory_for_testing(address_sorting_source_addr_factory *factory)
Definition: address_sorting.c:329
cmdline.h
dns_resolver_selection.h
grpc::testing::TestEnvironment
Definition: test/core/util/test_config.h:54
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
ASSERT_TRUE
#define ASSERT_TRUE(condition)
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:1973
ASSERT_FALSE
#define ASSERT_FALSE(condition)
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:1976
test_config.h
ADDRESS_SORTING_AF_INET6
@ ADDRESS_SORTING_AF_INET6
Definition: address_sorting.h:96
EXPECT_TRUE
#define EXPECT_TRUE(condition)
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:1967
PollsetSetWrapper::PollsetSetWrapper
PollsetSetWrapper()
Definition: resolve_address_test.cc:450
grpc_core::testing::FakeUdpAndTcpServer::CloseSocketUponCloseFromPeer
static ProcessReadResult CloseSocketUponCloseFromPeer(int bytes_received_size, int read_error, int s)
Definition: fake_udp_and_tcp_server.cc:179
GPR_DEBUG
#define GPR_DEBUG
Definition: include/grpc/impl/codegen/log.h:55
address_sorting_source_addr_factory
struct address_sorting_source_addr_factory address_sorting_source_addr_factory
absl::StatusOr
Definition: abseil-cpp/absl/status/statusor.h:187
grpc_core::ExecCtx::Now
Timestamp Now()
Definition: exec_ctx.cc:90
grpc_init
GRPCAPI void grpc_init(void)
Definition: init.cc:146
grpc_error
Definition: error_internal.h:42
grpc_core::Timestamp::FromTimespecRoundUp
static Timestamp FromTimespecRoundUp(gpr_timespec t)
Definition: src/core/lib/gprpp/time.cc:136
grpc_core::Duration
Definition: src/core/lib/gprpp/time.h:122
grpc_pollset
Definition: bm_cq_multiple_threads.cc:37
grpc_pollset_destroy
void grpc_pollset_destroy(grpc_pollset *pollset)
Definition: pollset.cc:41
sync.h
grpc_closure
Definition: closure.h:56
PollsetSetWrapper::Create
static std::unique_ptr< PollsetSetWrapper > Create()
Definition: resolve_address_test.cc:433
grpc_pollset_set_add_pollset
void grpc_pollset_set_add_pollset(grpc_pollset_set *pollset_set, grpc_pollset *pollset)
Definition: pollset_set.cc:37
testing::HasSubstr
PolymorphicMatcher< internal::HasSubstrMatcher< internal::string > > HasSubstr(const internal::string &substring)
Definition: cares/cares/test/gmock-1.8.0/gmock/gmock.h:8803
address_sorting_source_addr_factory
Definition: address_sorting.h:89
grpc_shutdown
GRPCAPI void grpc_shutdown(void)
Definition: init.cc:209
setup.target
target
Definition: third_party/bloaty/third_party/protobuf/python/setup.py:179
grpc_ares_test_only_inject_config
void(* grpc_ares_test_only_inject_config)(ares_channel channel)
sync.h
grpc_core::ExecCtx::Get
static ExecCtx * Get()
Definition: exec_ctx.h:205
DoNothing
static void DoNothing(void *, grpc_error_handle)
Definition: bm_call_create.cc:334
ASSERT_EQ
#define ASSERT_EQ(val1, val2)
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:2056
PollsetSetWrapper
Definition: resolve_address_test.cc:431


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