mirror of
https://github.com/denoland/deno.git
synced 2025-08-04 02:48:24 +00:00
fix(ext/websockets): ensure we fully send frames before close (#19484)
Fixes #19483
This commit is contained in:
parent
ceb03cfb03
commit
72da18dd47
2 changed files with 81 additions and 10 deletions
|
@ -100,7 +100,7 @@ Deno.test(
|
|||
promise.resolve();
|
||||
};
|
||||
|
||||
await Promise.all([promise, server]);
|
||||
await Promise.all([promise, server.finished]);
|
||||
ws.close();
|
||||
},
|
||||
);
|
||||
|
@ -145,7 +145,57 @@ Deno.test({
|
|||
ws.onclose = () => {
|
||||
promise.resolve();
|
||||
};
|
||||
await Promise.all([promise, server]);
|
||||
await Promise.all([promise, server.finished]);
|
||||
});
|
||||
|
||||
// https://github.com/denoland/deno/issues/19483
|
||||
Deno.test({
|
||||
sanitizeOps: false,
|
||||
sanitizeResources: false,
|
||||
}, async function websocketCloseFlushes() {
|
||||
const promise = deferred();
|
||||
|
||||
const ac = new AbortController();
|
||||
const listeningPromise = deferred();
|
||||
|
||||
const server = Deno.serve({
|
||||
handler: (req) => {
|
||||
const { response, socket } = Deno.upgradeWebSocket(req);
|
||||
socket.onopen = () => socket.send("Hello");
|
||||
socket.onmessage = () => {
|
||||
socket.send("Bye");
|
||||
socket.close();
|
||||
};
|
||||
socket.onclose = () => ac.abort();
|
||||
socket.onerror = () => fail();
|
||||
return response;
|
||||
},
|
||||
signal: ac.signal,
|
||||
onListen: () => listeningPromise.resolve(),
|
||||
hostname: "localhost",
|
||||
port: 4247,
|
||||
});
|
||||
|
||||
await listeningPromise;
|
||||
|
||||
const ws = new WebSocket("ws://localhost:4247/");
|
||||
assertEquals(ws.url, "ws://localhost:4247/");
|
||||
let seenBye = false;
|
||||
ws.onerror = () => fail();
|
||||
ws.onmessage = ({ data }) => {
|
||||
if (data == "Hello") {
|
||||
ws.send("Hello!");
|
||||
} else {
|
||||
assertEquals(data, "Bye");
|
||||
seenBye = true;
|
||||
}
|
||||
};
|
||||
ws.onclose = () => {
|
||||
promise.resolve();
|
||||
};
|
||||
await Promise.all([promise, server.finished]);
|
||||
|
||||
assert(seenBye);
|
||||
});
|
||||
|
||||
Deno.test(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue