6565static gpr_mu g_mu;
6666static int g_resolve_port = -1 ;
6767
68- static grpc_ares_request* (*iomgr_dns_lookup_ares)(
69- const char * dns_server, const char * addr, const char * default_port,
70- grpc_pollset_set* interested_parties, grpc_closure* on_done,
71- std::unique_ptr<grpc_core::EndpointAddressesList>* addresses,
72- int query_timeout_ms);
73-
74- static void (*iomgr_cancel_ares_request)(grpc_ares_request* request);
75-
7668static void set_resolve_port (int port) {
7769 gpr_mu_lock (&g_mu);
7870 g_resolve_port = port;
@@ -81,12 +73,15 @@ static void set_resolve_port(int port) {
8173
8274namespace {
8375
76+ using grpc_event_engine::experimental::EndpointConfig;
8477using grpc_event_engine::experimental::EventEngine;
78+ using grpc_event_engine::experimental::MemoryAllocator;
79+ using grpc_event_engine::experimental::MemoryAllocatorFactory;
8580
8681class TestDNSResolver : public EventEngine ::DNSResolver {
8782 public:
88- TestDNSResolver ()
89- : engine_(grpc_event_engine::experimental::GetDefaultEventEngine( )),
83+ explicit TestDNSResolver (std::shared_ptr<EventEngine> engine )
84+ : engine_(std::move(engine )),
9085 default_resolver_(engine_->GetDNSResolver (
9186 EventEngine::DNSResolver::ResolverOptions ())) {}
9287
@@ -134,46 +129,71 @@ class TestDNSResolver : public EventEngine::DNSResolver {
134129 absl::StatusOr<std::unique_ptr<EventEngine::DNSResolver>> default_resolver_;
135130};
136131
137- } // namespace
132+ class TestEventEngine : public EventEngine {
133+ public:
134+ explicit TestEventEngine (std::shared_ptr<EventEngine> default_event_engine)
135+ : default_event_engine_(std::move(default_event_engine)) {}
136+ ~TestEventEngine () override = default ;
137+
138+ absl::StatusOr<std::unique_ptr<Listener>> CreateListener (
139+ Listener::AcceptCallback on_accept,
140+ absl::AnyInvocable<void (absl::Status)> on_shutdown,
141+ const EndpointConfig& config,
142+ std::unique_ptr<MemoryAllocatorFactory> memory_allocator_factory)
143+ override {
144+ return default_event_engine_->CreateListener (
145+ std::move (on_accept), std::move (on_shutdown), config,
146+ std::move (memory_allocator_factory));
147+ }
138148
139- static grpc_ares_request* my_dns_lookup_ares (
140- const char * dns_server, const char * addr, const char * default_port,
141- grpc_pollset_set* interested_parties, grpc_closure* on_done,
142- std::unique_ptr<grpc_core::EndpointAddressesList>* addresses,
143- int query_timeout_ms) {
144- if (0 != strcmp (addr, " test" )) {
145- // A records should suffice
146- return iomgr_dns_lookup_ares (dns_server, addr, default_port,
147- interested_parties, on_done, addresses,
148- query_timeout_ms);
149+ ConnectionHandle Connect (OnConnectCallback on_connect,
150+ const ResolvedAddress& addr,
151+ const EndpointConfig& args,
152+ MemoryAllocator memory_allocator,
153+ Duration timeout) override {
154+ return default_event_engine_->Connect (std::move (on_connect), addr, args,
155+ std::move (memory_allocator), timeout);
149156 }
150157
151- grpc_error_handle error;
152- gpr_mu_lock (&g_mu);
153- if (g_resolve_port < 0 ) {
154- gpr_mu_unlock (&g_mu);
155- error = GRPC_ERROR_CREATE (" Forced Failure" );
156- } else {
157- *addresses = std::make_unique<grpc_core::EndpointAddressesList>();
158- grpc_resolved_address address;
159- memset (&address, 0 , sizeof (address));
160- auto * sa = reinterpret_cast <grpc_sockaddr_in*>(&address.addr );
161- sa->sin_family = GRPC_AF_INET;
162- sa->sin_addr .s_addr = 0x100007f ;
163- sa->sin_port = grpc_htons (static_cast <uint16_t >(g_resolve_port));
164- address.len = sizeof (grpc_sockaddr_in);
165- (*addresses)->emplace_back (address, grpc_core::ChannelArgs ());
166- gpr_mu_unlock (&g_mu);
158+ bool CancelConnect (ConnectionHandle handle) override {
159+ return default_event_engine_->CancelConnect (handle);
167160 }
168- grpc_core::ExecCtx::Run (DEBUG_LOCATION, on_done, error);
169- return nullptr ;
170- }
171161
172- static void my_cancel_ares_request (grpc_ares_request* request) {
173- if (request != nullptr ) {
174- iomgr_cancel_ares_request (request);
162+ bool IsWorkerThread () override {
163+ return default_event_engine_->IsWorkerThread ();
175164 }
176- }
165+
166+ absl::StatusOr<std::unique_ptr<DNSResolver>> GetDNSResolver (
167+ const DNSResolver::ResolverOptions& options) override {
168+ return std::make_unique<TestDNSResolver>(default_event_engine_);
169+ }
170+
171+ void Run (Closure* closure) override {
172+ return default_event_engine_->Run (closure);
173+ }
174+
175+ void Run (absl::AnyInvocable<void ()> closure) override {
176+ return default_event_engine_->Run (std::move (closure));
177+ }
178+
179+ TaskHandle RunAfter (Duration when, Closure* closure) override {
180+ return default_event_engine_->RunAfter (when, closure);
181+ }
182+
183+ TaskHandle RunAfter (Duration when,
184+ absl::AnyInvocable<void ()> closure) override {
185+ return default_event_engine_->RunAfter (when, std::move (closure));
186+ }
187+
188+ bool Cancel (TaskHandle handle) override {
189+ return default_event_engine_->Cancel (handle);
190+ }
191+
192+ private:
193+ std::shared_ptr<EventEngine> default_event_engine_;
194+ };
195+
196+ } // namespace
177197
178198int main (int argc, char ** argv) {
179199 // TODO(yijiem): rewrite this test with a custom EventEngine DNS Resolver
@@ -190,12 +210,9 @@ int main(int argc, char** argv) {
190210
191211 gpr_mu_init (&g_mu);
192212 grpc_init ();
193- grpc_core::ResetDNSResolver (
194- std::make_unique<TestDNSResolver>(grpc_core::GetDNSResolver ()));
195- iomgr_dns_lookup_ares = grpc_dns_lookup_hostname_ares;
196- iomgr_cancel_ares_request = grpc_cancel_ares_request;
197- grpc_dns_lookup_hostname_ares = my_dns_lookup_ares;
198- grpc_cancel_ares_request = my_cancel_ares_request;
213+ auto test_event_engine = std::make_shared<TestEventEngine>(
214+ grpc_event_engine::experimental::GetDefaultEventEngine ());
215+ grpc_event_engine::experimental::SetDefaultEventEngine (test_event_engine);
199216
200217 int was_cancelled1;
201218 int was_cancelled2;
0 commit comments