From 60ffac5d623ac8d3c16df0e6b83ef0a195a4bf0c Mon Sep 17 00:00:00 2001 From: Khafra Date: Sun, 25 Aug 2024 13:46:59 -0400 Subject: [PATCH] set websocket readyState on fail Fixes https://github.com/nodejs/undici/issues/3506 set websocket readyState on fail Fixes https://github.com/nodejs/undici/issues/3506 --- lib/web/websocket/websocket.js | 2 ++ test/websocket/issue-3506.js | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 test/websocket/issue-3506.js diff --git a/lib/web/websocket/websocket.js b/lib/web/websocket/websocket.js index d8991fe3cf3..345f2888cc4 100644 --- a/lib/web/websocket/websocket.js +++ b/lib/web/websocket/websocket.js @@ -522,6 +522,8 @@ class WebSocket extends EventTarget { this.#handler.socket.destroy() } + this.#handler.readyState = states.CLOSED + if (reason) { // TODO: process.nextTick fireEvent('error', this, (type, init) => new ErrorEvent(type, init), { diff --git a/test/websocket/issue-3506.js b/test/websocket/issue-3506.js new file mode 100644 index 00000000000..565f673fb8e --- /dev/null +++ b/test/websocket/issue-3506.js @@ -0,0 +1,18 @@ +'use strict' + +const { test } = require('node:test') +const { WebSocket } = require('../..') +const { tspl } = require('@matteo.collina/tspl') + +test('readyState is set on fail', async (t) => { + const { deepStrictEqual, completed } = tspl(t, { plan: 1 }) + const ws = new WebSocket('ws://localhost:1') + + t.after(() => ws.close()) + + ws.addEventListener('error', () => { + deepStrictEqual(ws.readyState, WebSocket.CLOSED) + }) + + await completed +})