mirror of
https://github.com/denoland/deno.git
synced 2025-09-30 22:21:15 +00:00
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:
parent
b6f49cf479
commit
fd023cf793
6 changed files with 305 additions and 148 deletions
|
@ -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;
|
||||
});
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue