Skip to content

Commit 5e1bc26

Browse files
committed
Add TestEventEngine
1 parent 4f90b80 commit 5e1bc26

File tree

1 file changed

+67
-50
lines changed

1 file changed

+67
-50
lines changed

test/core/end2end/goaway_server_test.cc

Lines changed: 67 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -65,14 +65,6 @@
6565
static gpr_mu g_mu;
6666
static 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-
7668
static 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

8274
namespace {
8375

76+
using grpc_event_engine::experimental::EndpointConfig;
8477
using grpc_event_engine::experimental::EventEngine;
78+
using grpc_event_engine::experimental::MemoryAllocator;
79+
using grpc_event_engine::experimental::MemoryAllocatorFactory;
8580

8681
class 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

178198
int 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

Comments
 (0)