Skip to content

Commit 4f90b80

Browse files
committed
implement TestDNSResolver
1 parent 518943a commit 4f90b80

File tree

1 file changed

+41
-71
lines changed

1 file changed

+41
-71
lines changed

test/core/end2end/goaway_server_test.cc

Lines changed: 41 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -81,87 +81,57 @@ static void set_resolve_port(int port) {
8181

8282
namespace {
8383

84-
class TestDNSResolver : public grpc_core::DNSResolver {
84+
using grpc_event_engine::experimental::EventEngine;
85+
86+
class TestDNSResolver : public EventEngine::DNSResolver {
8587
public:
86-
explicit TestDNSResolver(
87-
std::shared_ptr<grpc_core::DNSResolver> default_resolver)
88-
: default_resolver_(std::move(default_resolver)),
89-
engine_(grpc_event_engine::experimental::GetDefaultEventEngine()) {}
90-
TaskHandle LookupHostname(
91-
std::function<void(absl::StatusOr<std::vector<grpc_resolved_address>>)>
92-
on_resolved,
93-
absl::string_view name, absl::string_view default_port,
94-
grpc_core::Duration timeout, grpc_pollset_set* interested_parties,
95-
absl::string_view name_server) override {
88+
TestDNSResolver()
89+
: engine_(grpc_event_engine::experimental::GetDefaultEventEngine()),
90+
default_resolver_(engine_->GetDNSResolver(
91+
EventEngine::DNSResolver::ResolverOptions())) {}
92+
93+
void LookupHostname(LookupHostnameCallback on_resolve, absl::string_view name,
94+
absl::string_view default_port) override {
95+
CHECK(default_resolver_.ok());
9696
if (name != "test") {
97-
return default_resolver_->LookupHostname(std::move(on_resolved), name,
98-
default_port, timeout,
99-
interested_parties, name_server);
97+
return (*default_resolver_)
98+
->LookupHostname(std::move(on_resolve), name, default_port);
10099
}
101-
MakeDNSRequest(std::move(on_resolved));
102-
return kNullHandle;
103-
}
104-
105-
absl::StatusOr<std::vector<grpc_resolved_address>> LookupHostnameBlocking(
106-
absl::string_view name, absl::string_view default_port) override {
107-
return default_resolver_->LookupHostnameBlocking(name, default_port);
108-
}
109-
110-
TaskHandle LookupSRV(
111-
std::function<void(absl::StatusOr<std::vector<grpc_resolved_address>>)>
112-
on_resolved,
113-
absl::string_view /* name */, grpc_core::Duration /* timeout */,
114-
grpc_pollset_set* /* interested_parties */,
115-
absl::string_view /* name_server */) override {
116-
engine_->Run([on_resolved] {
117-
grpc_core::ExecCtx exec_ctx;
118-
on_resolved(absl::UnimplementedError(
119-
"The Testing DNS resolver does not support looking up SRV records"));
120-
});
121-
return {-1, -1};
122-
};
123-
124-
TaskHandle LookupTXT(
125-
std::function<void(absl::StatusOr<std::string>)> on_resolved,
126-
absl::string_view /* name */, grpc_core::Duration /* timeout */,
127-
grpc_pollset_set* /* interested_parties */,
128-
absl::string_view /* name_server */) override {
129-
// Not supported
130-
engine_->Run([on_resolved] {
131-
grpc_core::ExecCtx exec_ctx;
132-
on_resolved(absl::UnimplementedError(
133-
"The Testing DNS resolver does not support looking up TXT records"));
134-
});
135-
return {-1, -1};
136-
};
137-
138-
bool Cancel(TaskHandle /*handle*/) override { return false; }
139-
140-
private:
141-
void MakeDNSRequest(
142-
std::function<void(absl::StatusOr<std::vector<grpc_resolved_address>>)>
143-
on_done) {
144100
gpr_mu_lock(&g_mu);
145101
if (g_resolve_port < 0) {
146102
gpr_mu_unlock(&g_mu);
147-
new grpc_core::DNSCallbackExecCtxScheduler(
148-
std::move(on_done), absl::UnknownError("Forced Failure"));
103+
engine_->Run([on_resolve = std::move(on_resolve)]() mutable {
104+
on_resolve(absl::UnknownError("Forced Failure"));
105+
});
149106
} else {
150-
std::vector<grpc_resolved_address> addrs;
151-
grpc_resolved_address addr;
152-
grpc_sockaddr_in* sa = reinterpret_cast<grpc_sockaddr_in*>(&addr);
153-
sa->sin_family = GRPC_AF_INET;
154-
sa->sin_addr.s_addr = 0x100007f;
155-
sa->sin_port = grpc_htons(static_cast<uint16_t>(g_resolve_port));
156-
addr.len = static_cast<socklen_t>(sizeof(*sa));
157-
addrs.push_back(addr);
107+
std::vector<EventEngine::ResolvedAddress> addrs;
108+
struct sockaddr_in in;
109+
in.sin_family = GRPC_AF_INET;
110+
in.sin_addr.s_addr = 0x100007f;
111+
in.sin_port = grpc_htons(static_cast<uint16_t>(g_resolve_port));
112+
addrs.push_back(EventEngine::ResolvedAddress(
113+
reinterpret_cast<const sockaddr*>(&in), sizeof(struct sockaddr_in)));
158114
gpr_mu_unlock(&g_mu);
159-
new grpc_core::DNSCallbackExecCtxScheduler(std::move(on_done),
160-
std::move(addrs));
115+
engine_->Run([on_resolve = std::move(on_resolve),
116+
addrs = std::move(addrs)]() mutable {
117+
on_resolve(std::move(addrs));
118+
});
161119
}
162120
}
163-
std::shared_ptr<grpc_core::DNSResolver> default_resolver_;
164-
std::shared_ptr<grpc_event_engine::experimental::EventEngine> engine_;
121+
void LookupSRV(LookupSRVCallback on_resolve,
122+
absl::string_view name) override {
123+
CHECK(default_resolver_.ok());
124+
return (*default_resolver_)->LookupSRV(std::move(on_resolve), name);
125+
}
126+
void LookupTXT(LookupTXTCallback on_resolve,
127+
absl::string_view name) override {
128+
CHECK(default_resolver_.ok());
129+
return (*default_resolver_)->LookupTXT(std::move(on_resolve), name);
130+
}
131+
132+
private:
133+
std::shared_ptr<EventEngine> engine_;
134+
absl::StatusOr<std::unique_ptr<EventEngine::DNSResolver>> default_resolver_;
165135
};
166136

167137
} // namespace

0 commit comments

Comments
 (0)