fix(ext/flash): graceful server startup/shutdown with unsettled promises in mind (#16616)

This PR resets the revert commit made by #16610, bringing back #16383
which attempts to fix the issue happening when we use the flash server
with `--watch` option enabled.
Also, some code changes are made to pass the regression test added in
#16610.
This commit is contained in:
Yusuke Tanaka 2022-11-25 02:38:09 +09:00 committed by GitHub
parent b6f49cf479
commit fd023cf793
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 305 additions and 148 deletions

View file

@ -57,32 +57,42 @@ Deno.test(async function httpServerCanResolveHostnames() {
await server;
});
Deno.test(async function httpServerRejectsOnAddrInUse() {
const ac = new AbortController();
// TODO(magurotuna): ignore this case for now because it's flaky on GitHub Actions,
// although it acts as expected when running locally.
// See https://github.com/denoland/deno/pull/16616
Deno.test({ ignore: true }, async function httpServerRejectsOnAddrInUse() {
const ac1 = new AbortController();
const listeningPromise = deferred();
let port: number;
const server = Deno.serve({
handler: (_req) => new Response("ok"),
hostname: "localhost",
port: 4501,
signal: ac.signal,
onListen: onListen(listeningPromise),
onError: createOnErrorCb(ac),
port: 0,
signal: ac1.signal,
onListen: (addr) => {
port = addr.port;
listeningPromise.resolve();
},
onError: createOnErrorCb(ac1),
});
await listeningPromise;
const ac2 = new AbortController();
assertRejects(
() =>
Deno.serve({
handler: (_req) => new Response("ok"),
hostname: "localhost",
port: 4501,
signal: ac.signal,
onListen: onListen(listeningPromise),
onError: createOnErrorCb(ac),
port,
signal: ac2.signal,
}),
Deno.errors.AddrInUse,
);
ac.abort();
ac1.abort();
ac2.abort();
await server;
});