From 48be723d89e1d9ab59891b1d85e90242555868f0 Mon Sep 17 00:00:00 2001 From: Aras Abbasi Date: Wed, 24 Sep 2025 05:16:20 +0200 Subject: [PATCH] chore: remove tspl from websocket --- .../websocket/client-received-masked-frame.js | 9 +- test/websocket/close-invalid-status-code.js | 9 +- test/websocket/close-invalid-utf-8.js | 35 ++-- test/websocket/close.js | 33 ++-- test/websocket/constructor.js | 13 +- test/websocket/continuation-frames.js | 14 +- test/websocket/custom-headers.js | 29 ++-- .../diagnostics-channel-handshake-response.js | 30 ++-- .../diagnostics-channel-open-close.js | 18 +- .../diagnostics-channel-ping-pong.js | 16 +- test/websocket/events.js | 155 +++++++++--------- test/websocket/fragments.js | 7 +- test/websocket/frame.js | 13 +- test/websocket/issue-2679.js | 6 +- test/websocket/issue-2844.js | 46 +++--- test/websocket/issue-2859.js | 12 +- test/websocket/issue-3202.js | 10 +- test/websocket/issue-3506.js | 10 +- test/websocket/issue-3546.js | 14 +- test/websocket/issue-3697-2399493917.js | 10 +- test/websocket/issue-4273.js | 9 +- test/websocket/issue-4487.js | 3 +- test/websocket/messageevent.js | 27 ++- test/websocket/opening-handshake.js | 49 +++--- test/websocket/ping-pong.js | 9 +- test/websocket/ping-util.js | 28 ++-- test/websocket/receive.js | 13 +- test/websocket/send-mutable.js | 9 +- test/websocket/send.js | 57 ++++--- test/websocket/util.js | 17 +- test/websocket/websocketinit.js | 5 +- 31 files changed, 342 insertions(+), 373 deletions(-) diff --git a/test/websocket/client-received-masked-frame.js b/test/websocket/client-received-masked-frame.js index f3948b86353..b3639836c7c 100644 --- a/test/websocket/client-received-masked-frame.js +++ b/test/websocket/client-received-masked-frame.js @@ -4,11 +4,10 @@ const { test } = require('node:test') const { once } = require('node:events') const { WebSocketServer } = require('ws') const { WebSocket } = require('../..') -const { tspl } = require('@matteo.collina/tspl') const { WebsocketFrameSend } = require('../../lib/web/websocket/frame') test('Client fails the connection if receiving a masked frame', async (t) => { - const assert = tspl(t, { plan: 2 }) + t.plan(2) const body = Buffer.allocUnsafe(2) body.writeUInt16BE(1006, 0) @@ -27,11 +26,11 @@ test('Client fails the connection if receiving a masked frame', async (t) => { const ws = new WebSocket(`ws://localhost:${server.address().port}`) ws.addEventListener('close', (e) => { - assert.deepStrictEqual(e.code, 1006) + t.assert.deepStrictEqual(e.code, 1006) }) ws.addEventListener('error', () => { - assert.ok(true) + t.assert.ok(true) }) t.after(() => { @@ -40,6 +39,4 @@ test('Client fails the connection if receiving a masked frame', async (t) => { }) await once(ws, 'close') - - await assert.completed }) diff --git a/test/websocket/close-invalid-status-code.js b/test/websocket/close-invalid-status-code.js index 03df53dcb58..9825555f799 100644 --- a/test/websocket/close-invalid-status-code.js +++ b/test/websocket/close-invalid-status-code.js @@ -4,10 +4,9 @@ const { test } = require('node:test') const { once } = require('node:events') const { WebSocketServer } = require('ws') const { WebSocket } = require('../..') -const { tspl } = require('@matteo.collina/tspl') test('Client fails the connection if receiving a masked frame', async (t) => { - const assert = tspl(t, { plan: 2 }) + t.plan(2) const server = new WebSocketServer({ port: 0 }) @@ -21,11 +20,11 @@ test('Client fails the connection if receiving a masked frame', async (t) => { const ws = new WebSocket(`ws://localhost:${server.address().port}`) ws.addEventListener('close', (e) => { - assert.deepStrictEqual(e.code, 1006) + t.assert.deepStrictEqual(e.code, 1006) }) ws.addEventListener('error', () => { - assert.ok(true) + t.assert.ok(true) }) t.after(() => { @@ -34,6 +33,4 @@ test('Client fails the connection if receiving a masked frame', async (t) => { }) await once(ws, 'close') - - await assert.completed }) diff --git a/test/websocket/close-invalid-utf-8.js b/test/websocket/close-invalid-utf-8.js index ecfae445f2c..6dfb4eb584f 100644 --- a/test/websocket/close-invalid-utf-8.js +++ b/test/websocket/close-invalid-utf-8.js @@ -4,23 +4,27 @@ const { test } = require('node:test') const { once } = require('node:events') const { WebSocketServer } = require('ws') const { WebSocket } = require('../..') -const { tspl } = require('@matteo.collina/tspl') -test('Receiving a close frame with invalid utf-8', async (t) => { - const assert = tspl(t, { plan: 2 }) +test('Receiving a close frame with invalid utf-8', (t, done) => { + t.plan(2) const server = new WebSocketServer({ port: 0 }) + t.after(() => { + server.close() + }) server.on('connection', (ws) => { ws.close(1000, Buffer.from([0xFF, 0xFE])) ws.on('close', (code) => { - assert.equal(code, 1007) + t.assert.strictEqual(code, 1007) + done() }) }) const events = [] const ws = new WebSocket(`ws://localhost:${server.address().port}`) + t.after(() => { ws.close() }) ws.addEventListener('close', (e) => { events.push({ type: 'close', code: e.code }) @@ -30,20 +34,13 @@ test('Receiving a close frame with invalid utf-8', async (t) => { events.push({ type: 'error' }) }) - t.after(() => { - server.close() - ws.close() + once(ws, 'close').then(() => { + // An error event should be propagated immediately, then we should receive + // a close event with a 1006 code. The code is 1006, and not 1007 (as we send + // the server) because the connection is closed before the server responds. + t.assert.deepStrictEqual(events, [ + { type: 'error' }, + { type: 'close', code: 1006 } + ]) }) - - await once(ws, 'close') - - // An error event should be propagated immediately, then we should receive - // a close event with a 1006 code. The code is 1006, and not 1007 (as we send - // the server) because the connection is closed before the server responds. - assert.deepStrictEqual(events, [ - { type: 'error' }, - { type: 'close', code: 1006 } - ]) - - await assert.completed }) diff --git a/test/websocket/close.js b/test/websocket/close.js index c4305d60948..33a7005a494 100644 --- a/test/websocket/close.js +++ b/test/websocket/close.js @@ -2,18 +2,17 @@ const { tspl } = require('@matteo.collina/tspl') const { describe, test, after } = require('node:test') -const assert = require('node:assert') const { WebSocketServer } = require('ws') const { WebSocket } = require('../..') describe('Close', () => { - test('Close with code', () => { + test('Close with code', (t) => { return new Promise((resolve) => { const server = new WebSocketServer({ port: 0 }) server.on('connection', (ws) => { ws.on('close', (code) => { - assert.equal(code, 1000) + t.assert.strictEqual(code, 1000) server.close() resolve() }) @@ -24,14 +23,14 @@ describe('Close', () => { }) }) - test('Close with code and reason', () => { + test('Close with code and reason', (t) => { return new Promise((resolve) => { const server = new WebSocketServer({ port: 0 }) server.on('connection', (ws) => { ws.on('close', (code, reason) => { - assert.equal(code, 1000) - assert.deepStrictEqual(reason, Buffer.from('Goodbye')) + t.assert.strictEqual(code, 1000) + t.assert.deepStrictEqual(reason, Buffer.from('Goodbye')) server.close() resolve() }) @@ -42,14 +41,14 @@ describe('Close', () => { }) }) - test('Close with invalid code', () => { + test('Close with invalid code', (t) => { const server = new WebSocketServer({ port: 0 }) const ws = new WebSocket(`ws://localhost:${server.address().port}`) return new Promise((resolve) => { ws.addEventListener('open', () => { - assert.throws( + t.assert.throws( () => ws.close(2999), { name: 'InvalidAccessError', @@ -57,7 +56,7 @@ describe('Close', () => { } ) - assert.throws( + t.assert.throws( () => ws.close(5000), { name: 'InvalidAccessError', @@ -72,14 +71,14 @@ describe('Close', () => { }) }) - test('Close with invalid reason', () => { + test('Close with invalid reason', (t) => { const server = new WebSocketServer({ port: 0 }) const ws = new WebSocket(`ws://localhost:${server.address().port}`) return new Promise((resolve) => { ws.addEventListener('open', () => { - assert.throws( + t.assert.throws( () => ws.close(1000, 'a'.repeat(124)), { name: 'SyntaxError', @@ -94,14 +93,14 @@ describe('Close', () => { }) }) - test('Close with no code or reason', () => { + test('Close with no code or reason', (t) => { const server = new WebSocketServer({ port: 0 }) return new Promise((resolve) => { server.on('connection', (ws) => { ws.on('close', (code, reason) => { - assert.equal(code, 1005) - assert.deepStrictEqual(reason, Buffer.alloc(0)) + t.assert.strictEqual(code, 1005) + t.assert.deepStrictEqual(reason, Buffer.alloc(0)) server.close() resolve() }) @@ -112,14 +111,14 @@ describe('Close', () => { }) }) - test('Close with a 3000 status code', () => { + test('Close with a 3000 status code', (t) => { const server = new WebSocketServer({ port: 0 }) return new Promise((resolve) => { server.on('connection', (ws) => { ws.on('close', (code, reason) => { - assert.equal(code, 3000) - assert.deepStrictEqual(reason, Buffer.alloc(0)) + t.assert.strictEqual(code, 3000) + t.assert.deepStrictEqual(reason, Buffer.alloc(0)) server.close() resolve() }) diff --git a/test/websocket/constructor.js b/test/websocket/constructor.js index a4a10bffad9..7e275ca2178 100644 --- a/test/websocket/constructor.js +++ b/test/websocket/constructor.js @@ -1,11 +1,10 @@ 'use strict' const { test } = require('node:test') -const assert = require('node:assert') const { WebSocket } = require('../..') -test('Constructor', () => { - assert.throws( +test('Constructor', (t) => { + t.assert.throws( () => new WebSocket('abc'), { name: 'SyntaxError', @@ -13,7 +12,7 @@ test('Constructor', () => { } ) - assert.throws( + t.assert.throws( () => new WebSocket('wss://echo.websocket.events/#a'), { name: 'SyntaxError', @@ -21,7 +20,7 @@ test('Constructor', () => { } ) - assert.throws( + t.assert.throws( () => new WebSocket('wss://echo.websocket.events', ''), { name: 'SyntaxError', @@ -29,7 +28,7 @@ test('Constructor', () => { } ) - assert.throws( + t.assert.throws( () => new WebSocket('wss://echo.websocket.events', ['chat', 'chat']), { name: 'SyntaxError', @@ -37,7 +36,7 @@ test('Constructor', () => { } ) - assert.throws( + t.assert.throws( () => new WebSocket('wss://echo.websocket.events', ['<>@,;:\\"/[]?={}\t']), { name: 'SyntaxError', diff --git a/test/websocket/continuation-frames.js b/test/websocket/continuation-frames.js index 70f2d52fb9c..2f0732d6ce3 100644 --- a/test/websocket/continuation-frames.js +++ b/test/websocket/continuation-frames.js @@ -3,10 +3,9 @@ const { test } = require('node:test') const { WebSocketServer } = require('ws') const { WebSocket } = require('../..') -const { tspl } = require('@matteo.collina/tspl') -test('Receiving multiple continuation frames works as expected', async (t) => { - const p = tspl(t, { plan: 1 }) +test('Receiving multiple continuation frames works as expected', (t, done) => { + t.plan(1) const frames = [ Buffer.from([0x01, 0x05, 0x68, 0x65, 0x6c, 0x6c, 0x6f]), // text frame "hello" (fragmented) @@ -27,13 +26,14 @@ test('Receiving multiple continuation frames works as expected', async (t) => { const ws = new WebSocket(`ws://localhost:${server.address().port}`) - ws.onerror = p.fail - ws.onmessage = (e) => p.deepStrictEqual(e.data, 'hellohellohellohello') + ws.onerror = t.assert.fail + ws.onmessage = (e) => { + t.assert.deepStrictEqual(e.data, 'hellohellohellohello') + done() + } t.after(() => { server.close() ws.close() }) - - await p.completed }) diff --git a/test/websocket/custom-headers.js b/test/websocket/custom-headers.js index ebe3ae541ab..a66c416f2e6 100644 --- a/test/websocket/custom-headers.js +++ b/test/websocket/custom-headers.js @@ -1,30 +1,27 @@ 'use strict' const { test } = require('node:test') -const assert = require('node:assert') const { Agent, WebSocket } = require('../..') -test('Setting custom headers', (t) => { +test('Setting custom headers', (t, done) => { const headers = { 'x-khafra-hello': 'hi', Authorization: 'Bearer base64orsomethingitreallydoesntmatter' } - return new Promise((resolve, reject) => { - class TestAgent extends Agent { - dispatch (options) { - assert.deepStrictEqual(options.headers['x-khafra-hello'], headers['x-khafra-hello']) - assert.deepStrictEqual(options.headers.Authorization, headers.Authorization) - resolve() - return false - } + class TestAgent extends Agent { + dispatch (options) { + t.assert.deepStrictEqual(options.headers['x-khafra-hello'], headers['x-khafra-hello']) + t.assert.deepStrictEqual(options.headers.Authorization, headers.Authorization) + done() + return false } + } - const ws = new WebSocket('wss://echo.websocket.events', { - headers, - dispatcher: new TestAgent() - }) - - ws.onclose = ws.onerror = ws.onmessage = reject + const ws = new WebSocket('wss://echo.websocket.events', { + headers, + dispatcher: new TestAgent() }) + + ws.onclose = ws.onerror = ws.onmessage = t.assert.fail }) diff --git a/test/websocket/diagnostics-channel-handshake-response.js b/test/websocket/diagnostics-channel-handshake-response.js index 8ca79cfa17d..7ba349da510 100644 --- a/test/websocket/diagnostics-channel-handshake-response.js +++ b/test/websocket/diagnostics-channel-handshake-response.js @@ -4,10 +4,10 @@ const { test } = require('node:test') const dc = require('node:diagnostics_channel') const { WebSocketServer } = require('ws') const { WebSocket } = require('../..') -const { tspl } = require('@matteo.collina/tspl') +const { once } = require('node:events') test('diagnostics channel - undici:websocket:open includes handshake response', async (t) => { - const { equal, ok, completed } = tspl(t, { plan: 11 }) + t.plan(11) const server = new WebSocketServer({ port: 0 }) const { port } = server.address() @@ -20,20 +20,20 @@ test('diagnostics channel - undici:websocket:open includes handshake response', const openListener = (data) => { // Verify handshake response data - ok(data.handshakeResponse, 'handshakeResponse should be defined') - equal(data.handshakeResponse.status, 101, 'status should be 101') - equal(data.handshakeResponse.statusText, 'Switching Protocols', 'statusText should be correct') + t.assert.ok(data.handshakeResponse, 'handshakeResponse should be defined') + t.assert.strictEqual(data.handshakeResponse.status, 101, 'status should be 101') + t.assert.strictEqual(data.handshakeResponse.statusText, 'Switching Protocols', 'statusText should be correct') // Check handshake response headers const headers = data.handshakeResponse.headers - ok(headers, 'headers should be defined') - ok(typeof headers === 'object', 'headers should be an object') - ok('upgrade' in headers, 'upgrade header should be present') - ok('connection' in headers, 'connection header should be present') - ok('sec-websocket-accept' in headers, 'sec-websocket-accept header should be present') + t.assert.ok(headers, 'headers should be defined') + t.assert.ok(typeof headers === 'object', 'headers should be an object') + t.assert.ok('upgrade' in headers, 'upgrade header should be present') + t.assert.ok('connection' in headers, 'connection header should be present') + t.assert.ok('sec-websocket-accept' in headers, 'sec-websocket-accept header should be present') // Optionally, check values - equal(headers.upgrade.toLowerCase(), 'websocket', 'upgrade header should be websocket') - equal(headers.connection.toLowerCase(), 'upgrade', 'connection header should be upgrade') - ok(typeof headers['sec-websocket-accept'] === 'string', 'sec-websocket-accept header should be a string') + t.assert.strictEqual(headers.upgrade.toLowerCase(), 'websocket', 'upgrade header should be websocket') + t.assert.strictEqual(headers.connection.toLowerCase(), 'upgrade', 'connection header should be upgrade') + t.assert.ok(typeof headers['sec-websocket-accept'] === 'string', 'sec-websocket-accept header should be a string') } dc.channel('undici:websocket:open').subscribe(openListener) @@ -44,8 +44,8 @@ test('diagnostics channel - undici:websocket:open includes handshake response', }) // Create WebSocket connection - // eslint-disable-next-line no-unused-vars + const _ws = new WebSocket(`ws://localhost:${port}`) - await completed + await once(_ws, 'open') }) diff --git a/test/websocket/diagnostics-channel-open-close.js b/test/websocket/diagnostics-channel-open-close.js index 8c25732df40..16048edae5d 100644 --- a/test/websocket/diagnostics-channel-open-close.js +++ b/test/websocket/diagnostics-channel-open-close.js @@ -4,10 +4,10 @@ const { test } = require('node:test') const dc = require('node:diagnostics_channel') const { WebSocketServer } = require('ws') const { WebSocket } = require('../..') -const { tspl } = require('@matteo.collina/tspl') +const { once } = require('node:events') test('diagnostics channel - undici:websocket:[open/close]', async (t) => { - const { equal, completed } = tspl(t, { plan: 6 }) + t.plan(6) const server = new WebSocketServer({ port: 0 }) const { port } = server.address() @@ -18,15 +18,15 @@ test('diagnostics channel - undici:websocket:[open/close]', async (t) => { }) const openListener = ({ extensions, protocol, websocket }) => { - equal(extensions, '') - equal(protocol, 'chat') - equal(websocket, ws) + t.assert.strictEqual(extensions, '') + t.assert.strictEqual(protocol, 'chat') + t.assert.strictEqual(websocket, ws) } const closeListener = ({ websocket, code, reason }) => { - equal(code, 1000) - equal(reason, 'goodbye') - equal(websocket, ws) + t.assert.strictEqual(code, 1000) + t.assert.strictEqual(reason, 'goodbye') + t.assert.strictEqual(websocket, ws) } dc.channel('undici:websocket:open').subscribe(openListener) @@ -38,5 +38,5 @@ test('diagnostics channel - undici:websocket:[open/close]', async (t) => { dc.channel('undici:websocket:close').unsubscribe(closeListener) }) - await completed + await once(ws, 'close') }) diff --git a/test/websocket/diagnostics-channel-ping-pong.js b/test/websocket/diagnostics-channel-ping-pong.js index 454622d9680..64841ea3045 100644 --- a/test/websocket/diagnostics-channel-ping-pong.js +++ b/test/websocket/diagnostics-channel-ping-pong.js @@ -4,10 +4,10 @@ const { test } = require('node:test') const dc = require('node:diagnostics_channel') const { WebSocketServer } = require('ws') const { WebSocket } = require('../..') -const { tspl } = require('@matteo.collina/tspl') +const { once } = require('node:events') test('diagnostics channel - undici:websocket:[ping/pong]', async (t) => { - const { deepStrictEqual, equal, completed } = tspl(t, { plan: 4 }) + t.plan(4) const server = new WebSocketServer({ port: 0 }) const { port } = server.address() @@ -16,16 +16,17 @@ test('diagnostics channel - undici:websocket:[ping/pong]', async (t) => { server.on('connection', (ws) => { ws.ping('Ping') ws.pong('Pong') + ws.close() }) const pingListener = ({ websocket, payload }) => { - equal(websocket, ws) - deepStrictEqual(payload, Buffer.from('Ping')) + t.assert.strictEqual(websocket, ws) + t.assert.deepStrictEqual(payload, Buffer.from('Ping')) } const pongListener = ({ websocket, payload }) => { - equal(websocket, ws) - deepStrictEqual(payload, Buffer.from('Pong')) + t.assert.strictEqual(websocket, ws) + t.assert.deepStrictEqual(payload, Buffer.from('Pong')) } dc.channel('undici:websocket:ping').subscribe(pingListener) @@ -33,10 +34,9 @@ test('diagnostics channel - undici:websocket:[ping/pong]', async (t) => { t.after(() => { server.close() - ws.close() dc.channel('undici:websocket:ping').unsubscribe(pingListener) dc.channel('undici:websocket:pong').unsubscribe(pongListener) }) - await completed + await once(ws, 'close') }) diff --git a/test/websocket/events.js b/test/websocket/events.js index 8186baac679..eef8c8adb30 100644 --- a/test/websocket/events.js +++ b/test/websocket/events.js @@ -1,46 +1,45 @@ 'use strict' const { test, describe, after } = require('node:test') -const assert = require('node:assert') const { WebSocketServer } = require('ws') const { MessageEvent, CloseEvent, ErrorEvent } = require('../../lib/web/websocket/events') const { WebSocket } = require('../..') -test('MessageEvent', () => { - assert.throws(() => new MessageEvent(), TypeError, 'no arguments') - assert.throws(() => new MessageEvent('').initMessageEvent(), TypeError) +test('MessageEvent', (t) => { + t.assert.throws(() => new MessageEvent(), TypeError, 'no arguments') + t.assert.throws(() => new MessageEvent('').initMessageEvent(), TypeError) const noInitEvent = new MessageEvent('message') - assert.equal(noInitEvent.origin, '') - assert.equal(noInitEvent.data, null) - assert.equal(noInitEvent.lastEventId, '') - assert.equal(noInitEvent.source, null) - assert.ok(Array.isArray(noInitEvent.ports)) - assert.ok(Object.isFrozen(noInitEvent.ports)) - assert.ok(new MessageEvent('').initMessageEvent('message') instanceof MessageEvent) + t.assert.strictEqual(noInitEvent.origin, '') + t.assert.strictEqual(noInitEvent.data, null) + t.assert.strictEqual(noInitEvent.lastEventId, '') + t.assert.strictEqual(noInitEvent.source, null) + t.assert.ok(Array.isArray(noInitEvent.ports)) + t.assert.ok(Object.isFrozen(noInitEvent.ports)) + t.assert.ok(new MessageEvent('').initMessageEvent('message') instanceof MessageEvent) }) -test('CloseEvent', () => { - assert.throws(() => new CloseEvent(), TypeError) +test('CloseEvent', (t) => { + t.assert.throws(() => new CloseEvent(), TypeError) const noInitEvent = new CloseEvent('close') - assert.equal(noInitEvent.wasClean, false) - assert.equal(noInitEvent.code, 0) - assert.equal(noInitEvent.reason, '') + t.assert.strictEqual(noInitEvent.wasClean, false) + t.assert.strictEqual(noInitEvent.code, 0) + t.assert.strictEqual(noInitEvent.reason, '') }) -test('ErrorEvent', () => { - assert.throws(() => new ErrorEvent(), TypeError) +test('ErrorEvent', (t) => { + t.assert.throws(() => new ErrorEvent(), TypeError) const noInitEvent = new ErrorEvent('error') - assert.equal(noInitEvent.message, '') - assert.equal(noInitEvent.filename, '') - assert.equal(noInitEvent.lineno, 0) - assert.equal(noInitEvent.colno, 0) - assert.equal(noInitEvent.error, undefined) + t.assert.strictEqual(noInitEvent.message, '') + t.assert.strictEqual(noInitEvent.filename, '') + t.assert.strictEqual(noInitEvent.lineno, 0) + t.assert.strictEqual(noInitEvent.colno, 0) + t.assert.strictEqual(noInitEvent.error, undefined) }) describe('Event handlers', () => { @@ -55,90 +54,90 @@ describe('Event handlers', () => { function listen () {} describe('onopen', () => { - test('should be null initially', () => { - assert.strictEqual(ws.onopen, null) + test('should be null initially', (t) => { + t.assert.strictEqual(ws.onopen, null) }) - test('should not allow non-function assignments', () => { + test('should not allow non-function assignments', (t) => { ws.onopen = 3 - assert.strictEqual(ws.onopen, null) + t.assert.strictEqual(ws.onopen, null) }) - test('should allow function assignments', () => { + test('should allow function assignments', (t) => { ws.onopen = listen - assert.strictEqual(ws.onopen, listen) + t.assert.strictEqual(ws.onopen, listen) }) }) describe('onerror', () => { - test('should be null initially', () => { - assert.strictEqual(ws.onerror, null) + test('should be null initially', (t) => { + t.assert.strictEqual(ws.onerror, null) }) - test('should not allow non-function assignments', () => { + test('should not allow non-function assignments', (t) => { ws.onerror = 3 - assert.strictEqual(ws.onerror, null) + t.assert.strictEqual(ws.onerror, null) }) - test('should allow function assignments', () => { + test('should allow function assignments', (t) => { ws.onerror = listen - assert.strictEqual(ws.onerror, listen) + t.assert.strictEqual(ws.onerror, listen) }) }) describe('onclose', () => { - test('should be null initially', () => { - assert.strictEqual(ws.onclose, null) + test('should be null initially', (t) => { + t.assert.strictEqual(ws.onclose, null) }) - test('should not allow non-function assignments', () => { + test('should not allow non-function assignments', (t) => { ws.onclose = 3 - assert.strictEqual(ws.onclose, null) + t.assert.strictEqual(ws.onclose, null) }) - test('should allow function assignments', () => { + test('should allow function assignments', (t) => { ws.onclose = listen - assert.strictEqual(ws.onclose, listen) + t.assert.strictEqual(ws.onclose, listen) }) }) describe('onmessage', () => { - test('should be null initially', () => { - assert.strictEqual(ws.onmessage, null) + test('should be null initially', (t) => { + t.assert.strictEqual(ws.onmessage, null) }) - test('should not allow non-function assignments', () => { + test('should not allow non-function assignments', (t) => { ws.onmessage = 3 - assert.strictEqual(ws.onmessage, null) + t.assert.strictEqual(ws.onmessage, null) }) - test('should allow function assignments', () => { + test('should allow function assignments', (t) => { ws.onmessage = listen - assert.strictEqual(ws.onmessage, listen) + t.assert.strictEqual(ws.onmessage, listen) }) }) }) describe('CloseEvent WPTs ported', () => { - test('initCloseEvent', () => { + test('initCloseEvent', (t) => { // Taken from websockets/interfaces/CloseEvent/historical.html - assert.ok(!('initCloseEvent' in CloseEvent.prototype)) - assert.ok(!('initCloseEvent' in new CloseEvent('close'))) + t.assert.ok(!('initCloseEvent' in CloseEvent.prototype)) + t.assert.ok(!('initCloseEvent' in new CloseEvent('close'))) }) - test('CloseEvent constructor', () => { + test('CloseEvent constructor', (t) => { // Taken from websockets/interfaces/CloseEvent/constructor.html { const event = new CloseEvent('foo') - assert.ok(event instanceof CloseEvent, 'should be a CloseEvent') - assert.equal(event.type, 'foo') - assert.ok(!event.bubbles, 'bubbles') - assert.ok(!event.cancelable, 'cancelable') - assert.ok(!event.wasClean, 'wasClean') - assert.equal(event.code, 0) - assert.equal(event.reason, '') + t.assert.ok(event instanceof CloseEvent, 'should be a CloseEvent') + t.assert.strictEqual(event.type, 'foo') + t.assert.ok(!event.bubbles, 'bubbles') + t.assert.ok(!event.cancelable, 'cancelable') + t.assert.ok(!event.wasClean, 'wasClean') + t.assert.strictEqual(event.code, 0) + t.assert.strictEqual(event.reason, '') } { @@ -149,47 +148,47 @@ describe('CloseEvent WPTs ported', () => { code: 7, reason: 'x' }) - assert.ok(event instanceof CloseEvent, 'should be a CloseEvent') - assert.equal(event.type, 'foo') - assert.ok(event.bubbles, 'bubbles') - assert.ok(event.cancelable, 'cancelable') - assert.ok(event.wasClean, 'wasClean') - assert.equal(event.code, 7) - assert.equal(event.reason, 'x') + t.assert.ok(event instanceof CloseEvent, 'should be a CloseEvent') + t.assert.strictEqual(event.type, 'foo') + t.assert.ok(event.bubbles, 'bubbles') + t.assert.ok(event.cancelable, 'cancelable') + t.assert.ok(event.wasClean, 'wasClean') + t.assert.strictEqual(event.code, 7) + t.assert.strictEqual(event.reason, 'x') } }) }) describe('ErrorEvent WPTs ported', () => { - test('Synthetic ErrorEvent', () => { + test('Synthetic ErrorEvent', (t) => { // Taken from html/webappapis/scripting/events/event-handler-processing-algorithm-error/document-synthetic-errorevent.html { const e = new ErrorEvent('error') - assert.equal(e.message, '') - assert.equal(e.filename, '') - assert.equal(e.lineno, 0) - assert.equal(e.colno, 0) - assert.equal(e.error, undefined) + t.assert.strictEqual(e.message, '') + t.assert.strictEqual(e.filename, '') + t.assert.strictEqual(e.lineno, 0) + t.assert.strictEqual(e.colno, 0) + t.assert.strictEqual(e.error, undefined) } { const e = new ErrorEvent('error', { error: null }) - assert.equal(e.error, null) + t.assert.strictEqual(e.error, null) } { const e = new ErrorEvent('error', { error: undefined }) - assert.equal(e.error, undefined) + t.assert.strictEqual(e.error, undefined) } { const e = new ErrorEvent('error', { error: 'foo' }) - assert.equal(e.error, 'foo') + t.assert.strictEqual(e.error, 'foo') } }) - test('webidl', () => { + test('webidl', (t) => { // Taken from webidl/ecmascript-binding/no-regexp-special-casing.any.js const regExp = new RegExp() @@ -197,13 +196,13 @@ describe('ErrorEvent WPTs ported', () => { const errorEvent = new ErrorEvent('type', regExp) - assert.equal(errorEvent.message, 'some message') + t.assert.strictEqual(errorEvent.message, 'some message') }) - test('initErrorEvent', () => { + test('initErrorEvent', (t) => { // Taken from workers/Worker_dispatchEvent_ErrorEvent.htm const e = new ErrorEvent('error') - assert.ok(!('initErrorEvent' in e), 'should not be supported') + t.assert.ok(!('initErrorEvent' in e), 'should not be supported') }) }) diff --git a/test/websocket/fragments.js b/test/websocket/fragments.js index a4a168fe7cb..f895edc9b4a 100644 --- a/test/websocket/fragments.js +++ b/test/websocket/fragments.js @@ -1,12 +1,11 @@ 'use strict' -const assert = require('node:assert') const { test, after } = require('node:test') const { WebSocketServer } = require('ws') const { WebSocket } = require('../..') const diagnosticsChannel = require('node:diagnostics_channel') -test('Fragmented frame with a ping frame in the middle of it', () => { +test('Fragmented frame with a ping frame in the middle of it', (t) => { const server = new WebSocketServer({ port: 0 }) server.on('connection', (ws) => { @@ -28,12 +27,12 @@ test('Fragmented frame with a ping frame in the middle of it', () => { const ws = new WebSocket(`ws://localhost:${server.address().port}`) diagnosticsChannel.channel('undici:websocket:ping').subscribe( - ({ payload }) => assert.deepStrictEqual(payload, Buffer.from('Hello')) + ({ payload }) => t.assert.deepStrictEqual(payload, Buffer.from('Hello')) ) return new Promise((resolve) => { ws.addEventListener('message', ({ data }) => { - assert.strictEqual(data, 'Hello') + t.assert.strictEqual(data, 'Hello') ws.close() resolve() diff --git a/test/websocket/frame.js b/test/websocket/frame.js index 38022f88bc1..b75d79aff4b 100644 --- a/test/websocket/frame.js +++ b/test/websocket/frame.js @@ -1,12 +1,11 @@ 'use strict' const { test } = require('node:test') -const assert = require('node:assert') const { WebsocketFrameSend } = require('../../lib/web/websocket/frame') const { opcodes } = require('../../lib/web/websocket/constants') // Always be above all tests. -test('Don not use pooled buffer in mask pool', () => { +test('Don not use pooled buffer in mask pool', (t) => { const allocUnsafe = Buffer.allocUnsafe let counter = 0 try { @@ -16,13 +15,13 @@ test('Don not use pooled buffer in mask pool', () => { } // create mask pool new WebsocketFrameSend(Buffer.alloc(0)).createFrame(opcodes.BINARY) - assert.strictEqual(counter, 1) + t.assert.strictEqual(counter, 1) } finally { Buffer.allocUnsafe = allocUnsafe } }) -test('Writing 16-bit frame length value at correct offset when buffer has a non-zero byteOffset', () => { +test('Writing 16-bit frame length value at correct offset when buffer has a non-zero byteOffset', (t) => { /* When writing 16-bit frame lengths, a `DataView` was being used without setting a `byteOffset` into the buffer: i.e. `new DataView(buffer.buffer)` instead of `new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength)`. @@ -34,7 +33,7 @@ test('Writing 16-bit frame length value at correct offset when buffer has a non- const payload = Buffer.allocUnsafe(payloadLength).fill(0) const frame = new WebsocketFrameSend(payload).createFrame(opcodes.BINARY) - assert.equal(frame[2], payloadLength >>> 8) - assert.equal(frame[3], payloadLength & 0xff) - assert.equal(smallBuffer.length, 1) // ensure smallBuffer can't be garbage-collected too soon + t.assert.strictEqual(frame[2], payloadLength >>> 8) + t.assert.strictEqual(frame[3], payloadLength & 0xff) + t.assert.strictEqual(smallBuffer.length, 1) // ensure smallBuffer can't be garbage-collected too soon }) diff --git a/test/websocket/issue-2679.js b/test/websocket/issue-2679.js index 60005654a3f..295f68493ef 100644 --- a/test/websocket/issue-2679.js +++ b/test/websocket/issue-2679.js @@ -1,16 +1,14 @@ 'use strict' const { test, after } = require('node:test') -const assert = require('node:assert') const { once } = require('node:events') const { WebSocketServer } = require('ws') const { WebSocket } = require('../..') -test('Close without receiving code does not send an invalid payload', async () => { +test('Close without receiving code does not send an invalid payload', async (t) => { const server = new WebSocketServer({ port: 0 }) after(() => { server.close() - return once(server, 'close') }) await once(server, 'listening') @@ -19,7 +17,7 @@ test('Close without receiving code does not send an invalid payload', async () = sock.close() }) - server.on('error', (err) => assert.ifError(err)) + server.on('error', (err) => t.assert.ifError(err)) const client = new WebSocket(`ws://127.0.0.1:${server.address().port}`) await once(client, 'open') diff --git a/test/websocket/issue-2844.js b/test/websocket/issue-2844.js index d103a1722ff..c8839d44fa6 100644 --- a/test/websocket/issue-2844.js +++ b/test/websocket/issue-2844.js @@ -4,52 +4,52 @@ const { test } = require('node:test') const { once } = require('node:events') const { WebSocketServer } = require('ws') const { WebSocket } = require('../..') -const { tspl } = require('@matteo.collina/tspl') -test('The server must reply with at least one subprotocol the client sends', async (t) => { - const { completed, deepStrictEqual, fail } = tspl(t, { plan: 2 }) +test('The server must reply with at least one subprotocol the client sends', (t, done) => { + t.plan(2) const wss = new WebSocketServer({ handleProtocols: (protocols) => { - deepStrictEqual(protocols, new Set(['msgpack', 'json'])) + t.assert.deepStrictEqual(protocols, new Set(['msgpack', 'json'])) return protocols.values().next().value }, port: 0 }) + t.after(() => { + wss.close() + }) wss.on('connection', (ws) => { - ws.on('error', fail) + ws.on('error', t.assert.fail) ws.send('something') }) - await once(wss, 'listening') - - const ws = new WebSocket(`ws://localhost:${wss.address().port}`, { - protocols: ['msgpack', 'json'] - }) + once(wss, 'listening').then(() => { + const ws = new WebSocket(`ws://localhost:${wss.address().port}`, { + protocols: ['msgpack', 'json'] + }) - ws.onerror = fail - ws.onopen = () => deepStrictEqual(ws.protocol, 'msgpack') + ws.onerror = t.assert.fail + ws.onopen = () => { + t.assert.deepStrictEqual(ws.protocol, 'msgpack') + done() + } - t.after(() => { - wss.close() - ws.close() + t.after(() => { + ws.close() + }) }) - - await completed }) test('The connection fails when the client sends subprotocols that the server does not responc with', async (t) => { - const { completed, fail, ok } = tspl(t, { plan: 1 }) - const wss = new WebSocketServer({ handleProtocols: () => false, port: 0 }) wss.on('connection', (ws) => { - ws.on('error', fail) + ws.on('error', t.assert.fail) ws.send('something') }) @@ -59,15 +59,13 @@ test('The connection fails when the client sends subprotocols that the server do protocols: ['json'] }) - ws.onerror = ok.bind(null, true) + ws.onerror = t.assert.ok.bind(null, true) // The server will try to send 'something', this ensures that the connection // fails during the handshake and doesn't receive any messages. - ws.onmessage = fail + ws.onmessage = t.assert.fail t.after(() => { wss.close() ws.close() }) - - await completed }) diff --git a/test/websocket/issue-2859.js b/test/websocket/issue-2859.js index bd20012fc6b..13392b3c405 100644 --- a/test/websocket/issue-2859.js +++ b/test/websocket/issue-2859.js @@ -4,10 +4,9 @@ const { test } = require('node:test') const { WebSocketServer } = require('ws') const { WebSocket } = require('../..') const diagnosticsChannel = require('node:diagnostics_channel') -const { tspl } = require('@matteo.collina/tspl') -test('Fragmented frame with a ping frame in the first of it', async (t) => { - const { completed, deepStrictEqual, strictEqual } = tspl(t, { plan: 2 }) +test('Fragmented frame with a ping frame in the first of it', (t, done) => { + t.plan(2) const server = new WebSocketServer({ port: 0 }) @@ -27,12 +26,11 @@ test('Fragmented frame with a ping frame in the first of it', async (t) => { const ws = new WebSocket(`ws://127.0.0.1:${server.address().port}`) diagnosticsChannel.channel('undici:websocket:ping').subscribe( - ({ payload }) => deepStrictEqual(payload, Buffer.from('Hello')) + ({ payload }) => t.assert.deepStrictEqual(payload, Buffer.from('Hello')) ) ws.addEventListener('message', ({ data }) => { - strictEqual(data, 'Hello') + t.assert.strictEqual(data, 'Hello') + done() }) - - await completed }) diff --git a/test/websocket/issue-3202.js b/test/websocket/issue-3202.js index 3630a79f4d1..27effe58ac3 100644 --- a/test/websocket/issue-3202.js +++ b/test/websocket/issue-3202.js @@ -3,10 +3,9 @@ const { test } = require('node:test') const { WebSocketServer } = require('ws') const { WebSocket } = require('../..') -const { tspl } = require('@matteo.collina/tspl') -test('Receiving frame with payload length 0 works', async (t) => { - const { ok, completed } = tspl(t, { plan: 1 }) +test('Receiving frame with payload length 0 works', (t, done) => { + t.plan(1) const server = new WebSocketServer({ port: 0 }) @@ -28,8 +27,7 @@ test('Receiving frame with payload length 0 works', async (t) => { }) ws.addEventListener('message', () => { - ok(true) + t.assert.ok(true) + done() }) - - await completed }) diff --git a/test/websocket/issue-3506.js b/test/websocket/issue-3506.js index 565f673fb8e..8c8dc843394 100644 --- a/test/websocket/issue-3506.js +++ b/test/websocket/issue-3506.js @@ -2,17 +2,15 @@ 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 }) +test('readyState is set on fail', (t, done) => { + t.plan(1) const ws = new WebSocket('ws://localhost:1') t.after(() => ws.close()) ws.addEventListener('error', () => { - deepStrictEqual(ws.readyState, WebSocket.CLOSED) + t.assert.deepStrictEqual(ws.readyState, WebSocket.CLOSED) + done() }) - - await completed }) diff --git a/test/websocket/issue-3546.js b/test/websocket/issue-3546.js index 59a7bd0f093..064011bc973 100644 --- a/test/websocket/issue-3546.js +++ b/test/websocket/issue-3546.js @@ -2,23 +2,23 @@ const { test } = require('node:test') const { WebSocket } = require('../..') -const { tspl } = require('@matteo.collina/tspl') +const { once } = require('node:events') test('first error than close event is fired on failed connection', async (t) => { - const { completed, strictEqual } = tspl(t, { plan: 4 }) + t.plan(4) const ws = new WebSocket('ws://localhost:1') let orderOfEvents = 0 ws.addEventListener('error', () => { - strictEqual(orderOfEvents++, 0) - strictEqual(ws.readyState, WebSocket.CLOSED) + t.assert.strictEqual(orderOfEvents++, 0) + t.assert.strictEqual(ws.readyState, WebSocket.CLOSED) }) ws.addEventListener('close', () => { - strictEqual(orderOfEvents++, 1) - strictEqual(ws.readyState, WebSocket.CLOSED) + t.assert.strictEqual(orderOfEvents++, 1) + t.assert.strictEqual(ws.readyState, WebSocket.CLOSED) }) - await completed + await once(ws, 'close') }) diff --git a/test/websocket/issue-3697-2399493917.js b/test/websocket/issue-3697-2399493917.js index 73de345b09d..2f91c950e61 100644 --- a/test/websocket/issue-3697-2399493917.js +++ b/test/websocket/issue-3697-2399493917.js @@ -2,14 +2,16 @@ const { test } = require('node:test') const { WebSocket } = require('../..') -const { tspl } = require('@matteo.collina/tspl') +const { once } = require('node:events') // https://github.com/nodejs/undici/issues/3697#issuecomment-2399493917 test('closing before a connection is established changes readyState', async (t) => { - const { completed, strictEqual } = tspl(t, { plan: 1 }) + t.plan(1) const ws = new WebSocket('wss://localhost') - ws.onclose = () => strictEqual(ws.readyState, WebSocket.CLOSED) + ws.onclose = () => { + t.assert.strictEqual(ws.readyState, WebSocket.CLOSED) + } - await completed + await once(ws, 'close') }) diff --git a/test/websocket/issue-4273.js b/test/websocket/issue-4273.js index 925d62ed83a..d41e35665c3 100644 --- a/test/websocket/issue-4273.js +++ b/test/websocket/issue-4273.js @@ -2,15 +2,16 @@ const { test } = require('node:test') const { WebSocket } = require('../..') -const { tspl } = require('@matteo.collina/tspl') +const { once } = require('node:events') test('first error than close event is fired on failed connection', async (t) => { - const { completed, ok } = tspl(t, { plan: 1 }) + t.plan(1) + const ws = new WebSocket('ws://localhost:1') ws.addEventListener('error', (ev) => { - ok(ev.error instanceof TypeError) + t.assert.ok(ev.error instanceof TypeError) }) - await completed + await once(ws, 'close') }) diff --git a/test/websocket/issue-4487.js b/test/websocket/issue-4487.js index 9dcec66bd30..fe6d6fc1cff 100644 --- a/test/websocket/issue-4487.js +++ b/test/websocket/issue-4487.js @@ -1,7 +1,6 @@ 'use strict' const { test } = require('node:test') -const assert = require('node:assert') const { once } = require('node:events') const { WebSocketServer } = require('ws') @@ -23,5 +22,5 @@ test('should be emit error event on aborted connection', async (t) => { ws.onerror = () => errorEmitted = true await once(ws, 'close') - assert(errorEmitted) + t.assert.ok(errorEmitted) }) diff --git a/test/websocket/messageevent.js b/test/websocket/messageevent.js index 36cc5971e6d..6660911a55d 100644 --- a/test/websocket/messageevent.js +++ b/test/websocket/messageevent.js @@ -1,10 +1,9 @@ 'use strict' const { test } = require('node:test') -const assert = require('node:assert') const { MessageEvent } = require('../..') -test('test/parallel/test-messageevent-brandcheck.js', () => { +test('test/parallel/test-messageevent-brandcheck.js', (t) => { [ 'data', 'origin', @@ -12,14 +11,14 @@ test('test/parallel/test-messageevent-brandcheck.js', () => { 'source', 'ports' ].forEach((i) => { - assert.throws(() => Reflect.get(MessageEvent.prototype, i, {}), { + t.assert.throws(() => Reflect.get(MessageEvent.prototype, i, {}), { constructor: TypeError, message: 'Illegal invocation' }) }) }) -test('test/parallel/test-worker-message-port.js', () => { +test('test/parallel/test-worker-message-port.js', (t) => { const dummyPort = new MessageChannel().port1 for (const [args, expected] of [ @@ -92,45 +91,45 @@ test('test/parallel/test-worker-message-port.js', () => { ]) { const ev = new MessageEvent(...args) const { type, data, origin, lastEventId, source, ports } = ev - assert.deepStrictEqual(expected, { + t.assert.deepStrictEqual(expected, { type, data, origin, lastEventId, source, ports }) } - assert.throws(() => new MessageEvent('message', { source: 1 }), { + t.assert.throws(() => new MessageEvent('message', { source: 1 }), { constructor: TypeError, message: 'MessageEvent constructor: Expected eventInitDict.source ("1") to be an instance of MessagePort.' }) - assert.throws(() => new MessageEvent('message', { source: {} }), { + t.assert.throws(() => new MessageEvent('message', { source: {} }), { constructor: TypeError, message: 'MessageEvent constructor: Expected eventInitDict.source ("{}") to be an instance of MessagePort.' }) - assert.throws(() => new MessageEvent('message', { ports: 0 }), { + t.assert.throws(() => new MessageEvent('message', { ports: 0 }), { constructor: TypeError, message: 'MessageEvent constructor: eventInitDict.ports (0) is not iterable.' }) - assert.throws(() => new MessageEvent('message', { ports: [null] }), { + t.assert.throws(() => new MessageEvent('message', { ports: [null] }), { constructor: TypeError, message: 'MessageEvent constructor: Expected eventInitDict.ports[0] ("null") to be an instance of MessagePort.' }) - assert.throws(() => + t.assert.throws(() => new MessageEvent('message', { ports: [{}] }) , { constructor: TypeError, message: 'MessageEvent constructor: Expected eventInitDict.ports[0] ("{}") to be an instance of MessagePort.' }) - assert(new MessageEvent('message') instanceof Event) + t.assert.ok(new MessageEvent('message') instanceof Event) // https://github.com/nodejs/node/issues/51767 const event = new MessageEvent('type', { cancelable: true }) event.preventDefault() - assert(event.cancelable) - assert(event.defaultPrevented) + t.assert.ok(event.cancelable) + t.assert.ok(event.defaultPrevented) }) -test('bug in node core', () => { +test('bug in node core', (t) => { // In node core, this will throw an error. new MessageEvent('', null) // eslint-disable-line no-new }) diff --git a/test/websocket/opening-handshake.js b/test/websocket/opening-handshake.js index 53bdae48130..6ef3a9df022 100644 --- a/test/websocket/opening-handshake.js +++ b/test/websocket/opening-handshake.js @@ -1,19 +1,18 @@ 'use strict' const { test } = require('node:test') -const assert = require('node:assert') const { createServer } = require('node:http') const { WebSocketServer } = require('ws') const { WebSocket } = require('../..') const { runtimeFeatures } = require('../../lib/util/runtime-features') -test('WebSocket connecting to server that isn\'t a Websocket server', () => { +test('WebSocket connecting to server that isn\'t a Websocket server', (t) => { return new Promise((resolve, reject) => { const server = createServer({ joinDuplicateHeaders: true }, (req, res) => { - assert.equal(req.headers.connection, 'upgrade') - assert.equal(req.headers.upgrade, 'websocket') - assert.ok(req.headers['sec-websocket-key']) - assert.equal(req.headers['sec-websocket-version'], '13') + t.assert.strictEqual(req.headers.connection, 'upgrade') + t.assert.strictEqual(req.headers.upgrade, 'websocket') + t.assert.ok(req.headers['sec-websocket-key']) + t.assert.strictEqual(req.headers['sec-websocket-version'], '13') res.end() server.unref() @@ -24,7 +23,7 @@ test('WebSocket connecting to server that isn\'t a Websocket server', () => { ws.onmessage = ws.onopen = reject ws.addEventListener('error', ({ error }) => { - assert.ok(error) + t.assert.ok(error) server.close() resolve() }) @@ -32,7 +31,7 @@ test('WebSocket connecting to server that isn\'t a Websocket server', () => { }) }) -test('Open event is emitted', () => { +test('Open event is emitted', (t) => { return new Promise((resolve, reject) => { const server = new WebSocketServer({ port: 0 }) @@ -43,19 +42,19 @@ test('Open event is emitted', () => { const ws = new WebSocket(`ws://localhost:${server.address().port}`) ws.onmessage = ws.onerror = reject - ws.addEventListener('open', () => { + ws.addEventListener('open', (t) => { server.close() resolve() }) }) }) -test('Multiple protocols are joined by a comma', () => { +test('Multiple protocols are joined by a comma', (t) => { return new Promise((resolve, reject) => { const server = new WebSocketServer({ port: 0 }) server.on('connection', (ws, req) => { - assert.equal(req.headers['sec-websocket-protocol'], 'chat, echo') + t.assert.strictEqual(req.headers['sec-websocket-protocol'], 'chat, echo') ws.close(1000) server.close() @@ -67,7 +66,7 @@ test('Multiple protocols are joined by a comma', () => { }) }) -test('Server doesn\'t send Sec-WebSocket-Protocol header when protocols are used', () => { +test('Server doesn\'t send Sec-WebSocket-Protocol header when protocols are used', (t) => { return new Promise((resolve, reject) => { const server = createServer({ joinDuplicateHeaders: true }, (req, res) => { res.statusCode = 101 @@ -79,7 +78,7 @@ test('Server doesn\'t send Sec-WebSocket-Protocol header when protocols are used ws.onopen = reject ws.addEventListener('error', ({ error }) => { - assert.ok(error) + t.assert.ok(error) server.close() resolve() }) @@ -87,7 +86,7 @@ test('Server doesn\'t send Sec-WebSocket-Protocol header when protocols are used }) }) -test('Server sends invalid Upgrade header', () => { +test('Server sends invalid Upgrade header', (t) => { return new Promise((resolve, reject) => { const server = createServer({ joinDuplicateHeaders: true }, (req, res) => { res.setHeader('Upgrade', 'NotWebSocket') @@ -100,7 +99,7 @@ test('Server sends invalid Upgrade header', () => { ws.onopen = reject ws.addEventListener('error', ({ error }) => { - assert.ok(error) + t.assert.ok(error) server.close() resolve() }) @@ -108,7 +107,7 @@ test('Server sends invalid Upgrade header', () => { }) }) -test('Server sends invalid Connection header', () => { +test('Server sends invalid Connection header', (t) => { return new Promise((resolve, reject) => { const server = createServer({ joinDuplicateHeaders: true }, (req, res) => { res.setHeader('Upgrade', 'websocket') @@ -122,7 +121,7 @@ test('Server sends invalid Connection header', () => { ws.onopen = reject ws.addEventListener('error', ({ error }) => { - assert.ok(error) + t.assert.ok(error) server.close() resolve() }) @@ -130,7 +129,7 @@ test('Server sends invalid Connection header', () => { }) }) -test('Server sends invalid Sec-WebSocket-Accept header', () => { +test('Server sends invalid Sec-WebSocket-Accept header', (t) => { return new Promise((resolve, reject) => { const server = createServer({ joinDuplicateHeaders: true }, (req, res) => { res.setHeader('Upgrade', 'websocket') @@ -145,7 +144,7 @@ test('Server sends invalid Sec-WebSocket-Accept header', () => { ws.onopen = reject ws.addEventListener('error', ({ error }) => { - assert.ok(error) + t.assert.ok(error) server.close() resolve() }) @@ -153,13 +152,13 @@ test('Server sends invalid Sec-WebSocket-Accept header', () => { }) }) -test('Server sends invalid Sec-WebSocket-Extensions header', { skip: runtimeFeatures.has('crypto') === false }, () => { +test('Server sends invalid Sec-WebSocket-Extensions header', { skip: runtimeFeatures.has('crypto') === false }, (t) => { return new Promise((resolve, reject) => { const uid = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11' const server = createServer({ joinDuplicateHeaders: true }, (req, res) => { const key = req.headers['sec-websocket-key'] - assert.ok(key) + t.assert.ok(key) const accept = require('node:crypto').hash('sha1', key + uid, 'base64') @@ -176,7 +175,7 @@ test('Server sends invalid Sec-WebSocket-Extensions header', { skip: runtimeFeat ws.onopen = reject ws.addEventListener('error', ({ error }) => { - assert.ok(error) + t.assert.ok(error) server.close() resolve() }) @@ -184,13 +183,13 @@ test('Server sends invalid Sec-WebSocket-Extensions header', { skip: runtimeFeat }) }) -test('Server sends invalid Sec-WebSocket-Extensions header', { skip: runtimeFeatures.has('crypto') === false }, () => { +test('Server sends invalid Sec-WebSocket-Extensions header', { skip: runtimeFeatures.has('crypto') === false }, (t) => { const uid = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11' return new Promise((resolve, reject) => { const server = createServer({ joinDuplicateHeaders: true }, (req, res) => { const key = req.headers['sec-websocket-key'] - assert.ok(key) + t.assert.ok(key) const accept = require('node:crypto').hash('sha1', key + uid, 'base64') @@ -207,7 +206,7 @@ test('Server sends invalid Sec-WebSocket-Extensions header', { skip: runtimeFeat ws.onopen = reject ws.addEventListener('error', ({ error }) => { - assert.ok(error) + t.assert.ok(error) server.close() resolve() }) diff --git a/test/websocket/ping-pong.js b/test/websocket/ping-pong.js index 0a30f239a6d..64259aa1a92 100644 --- a/test/websocket/ping-pong.js +++ b/test/websocket/ping-pong.js @@ -1,12 +1,11 @@ 'use strict' const { test } = require('node:test') -const assert = require('node:assert') const { WebSocketServer } = require('ws') const diagnosticsChannel = require('node:diagnostics_channel') const { WebSocket } = require('../..') -test('Receives ping and parses body', () => { +test('Receives ping and parses body', (t) => { return new Promise((resolve, reject) => { const server = new WebSocketServer({ port: 0 }) @@ -18,7 +17,7 @@ test('Receives ping and parses body', () => { ws.onerror = ws.onmessage = reject diagnosticsChannel.channel('undici:websocket:ping').subscribe(({ payload }) => { - assert.deepStrictEqual(payload, Buffer.from('Hello, world')) + t.assert.deepStrictEqual(payload, Buffer.from('Hello, world')) ws.close() server.close() resolve() @@ -26,7 +25,7 @@ test('Receives ping and parses body', () => { }) }) -test('Receives pong and parses body', () => { +test('Receives pong and parses body', (t) => { return new Promise((resolve, reject) => { const server = new WebSocketServer({ port: 0 }) @@ -38,7 +37,7 @@ test('Receives pong and parses body', () => { ws.onerror = ws.onmessage = reject diagnosticsChannel.channel('undici:websocket:pong').subscribe(({ payload }) => { - assert.deepStrictEqual(payload, Buffer.from('Pong')) + t.assert.deepStrictEqual(payload, Buffer.from('Pong')) server.close() ws.close() resolve() diff --git a/test/websocket/ping-util.js b/test/websocket/ping-util.js index 176d602aaec..1a79d18de72 100644 --- a/test/websocket/ping-util.js +++ b/test/websocket/ping-util.js @@ -3,17 +3,18 @@ const { test } = require('node:test') const { WebSocketServer } = require('ws') const { WebSocket, ping } = require('../..') -const { tspl } = require('@matteo.collina/tspl') +const { once } = require('node:events') test('ping', async (t) => { - const { deepStrictEqual, completed } = tspl(t, { plan: 1 }) + t.plan(1) const pingBody = Buffer.from('ping body') const wss = new WebSocketServer({ port: 0 }) wss.on('connection', (ws) => { ws.on('ping', (b) => { - deepStrictEqual(b, pingBody) + t.assert.deepStrictEqual(b, pingBody) + ws.close() }) }) @@ -25,41 +26,40 @@ test('ping', async (t) => { wss.close() }) - await completed + await once(ws, 'close') }) -test('attempting to send invalid ping body', async (t) => { - const { completed, throws, fail } = tspl(t, { plan: 2 }) +test('attempting to send invalid ping body', (t) => { + t.plan(2) const wss = new WebSocketServer({ port: 0 }) wss.on('connection', (ws) => { ws.on('ping', () => { - fail('Received unexpected ping') + t.assert.fail('Received unexpected ping') }) }) const ws = new WebSocket(`ws://localhost:${wss.address().port}`) - throws(() => ping(ws, Buffer.from('a'.repeat(126)))) - throws(() => ping(ws, 'a'.repeat(125))) + t.assert.throws(() => ping(ws, Buffer.from('a'.repeat(126)))) + t.assert.throws(() => ping(ws, 'a'.repeat(125))) t.after(() => { ws.close() wss.close() }) - - await completed }) test('ping with no payload', async (t) => { - const { completed, deepStrictEqual } = tspl(t, { plan: 1 }) + t.plan(1) const wss = new WebSocketServer({ port: 0 }) wss.on('connection', (ws) => { ws.on('ping', (b) => { - deepStrictEqual(b, Buffer.alloc(0)) + t.assert.deepStrictEqual(b, Buffer.alloc(0)) + ws.close() }) }) @@ -71,5 +71,5 @@ test('ping with no payload', async (t) => { wss.close() }) - await completed + await once(ws, 'close') }) diff --git a/test/websocket/receive.js b/test/websocket/receive.js index ad14b88d904..7e3b8402a81 100644 --- a/test/websocket/receive.js +++ b/test/websocket/receive.js @@ -1,11 +1,10 @@ 'use strict' const { test } = require('node:test') -const assert = require('node:assert') const { WebSocketServer } = require('ws') const { WebSocket } = require('../..') -test('Receiving a frame with a payload length > 2^31-1 bytes', () => { +test('Receiving a frame with a payload length > 2^31-1 bytes', (t) => { const server = new WebSocketServer({ port: 0 }) server.on('connection', (ws) => { @@ -20,7 +19,7 @@ test('Receiving a frame with a payload length > 2^31-1 bytes', () => { ws.onmessage = reject ws.addEventListener('error', (event) => { - assert.ok(event.error instanceof Error) // error event is emitted + t.assert.ok(event.error instanceof Error) // error event is emitted ws.close() server.close() resolve() @@ -28,7 +27,7 @@ test('Receiving a frame with a payload length > 2^31-1 bytes', () => { }) }) -test('Receiving an ArrayBuffer', () => { +test('Receiving an ArrayBuffer', (t) => { const server = new WebSocketServer({ port: 0 }) server.on('connection', (ws) => { @@ -43,7 +42,7 @@ test('Receiving an ArrayBuffer', () => { ws.addEventListener('open', () => { ws.binaryType = 'what' - assert.equal(ws.binaryType, 'blob') + t.assert.strictEqual(ws.binaryType, 'blob') ws.binaryType = 'arraybuffer' // <-- ws.send('Hello') @@ -51,8 +50,8 @@ test('Receiving an ArrayBuffer', () => { return new Promise((resolve) => { ws.addEventListener('message', ({ data }) => { - assert.ok(data instanceof ArrayBuffer) - assert.deepStrictEqual(Buffer.from(data), Buffer.from('Hello')) + t.assert.ok(data instanceof ArrayBuffer) + t.assert.deepStrictEqual(Buffer.from(data), Buffer.from('Hello')) server.close() resolve() }) diff --git a/test/websocket/send-mutable.js b/test/websocket/send-mutable.js index fa1cc86aecc..f80af1967e0 100644 --- a/test/websocket/send-mutable.js +++ b/test/websocket/send-mutable.js @@ -3,17 +3,18 @@ const { test } = require('node:test') const { WebSocketServer } = require('ws') const { WebSocket } = require('../..') -const { tspl } = require('@matteo.collina/tspl') +const { once } = require('node:events') test('check cloned', async (t) => { - const assert = tspl(t, { plan: 2 }) + t.plan(2) const server = new WebSocketServer({ port: 0 }) const buffer = new Uint8Array([0x61]) server.on('connection', (ws) => { ws.on('message', (data) => { - assert.deepStrictEqual(data, Buffer.from([0x61])) + t.assert.deepStrictEqual(data, Buffer.from([0x61])) + ws.close() }) }) @@ -30,5 +31,5 @@ test('check cloned', async (t) => { ws.close() }) - await assert.completed + await once(ws, 'close') }) diff --git a/test/websocket/send.js b/test/websocket/send.js index 15189b4d968..c8ba8da9563 100644 --- a/test/websocket/send.js +++ b/test/websocket/send.js @@ -1,7 +1,6 @@ 'use strict' const { test, describe } = require('node:test') -const assert = require('node:assert') const { WebSocketServer } = require('ws') const { WebSocket } = require('../..') @@ -9,7 +8,7 @@ const { WebSocket } = require('../..') // different ways a payload length may be specified in a WebSocket frame // (https://datatracker.ietf.org/doc/html/rfc6455#section-5.2) -test('Sending >= 2^16 bytes', () => { +test('Sending >= 2^16 bytes', (t) => { const server = new WebSocketServer({ port: 0 }) server.on('connection', (ws) => { @@ -28,9 +27,9 @@ test('Sending >= 2^16 bytes', () => { return new Promise((resolve) => { ws.addEventListener('message', async ({ data }) => { - assert.ok(data instanceof Blob) - assert.equal(data.size, payload.length) - assert.deepStrictEqual(Buffer.from(await data.arrayBuffer()), payload) + t.assert.ok(data instanceof Blob) + t.assert.strictEqual(data.size, payload.length) + t.assert.deepStrictEqual(Buffer.from(await data.arrayBuffer()), payload) ws.close() server.close() @@ -40,7 +39,7 @@ test('Sending >= 2^16 bytes', () => { }) }) -test('Sending >= 126, < 2^16 bytes', () => { +test('Sending >= 126, < 2^16 bytes', (t) => { const server = new WebSocketServer({ port: 0 }) server.on('connection', (ws) => { @@ -59,9 +58,9 @@ test('Sending >= 126, < 2^16 bytes', () => { return new Promise((resolve) => { ws.addEventListener('message', async ({ data }) => { - assert.ok(data instanceof Blob) - assert.equal(data.size, payload.length) - assert.deepStrictEqual(Buffer.from(await data.arrayBuffer()), payload) + t.assert.ok(data instanceof Blob) + t.assert.strictEqual(data.size, payload.length) + t.assert.deepStrictEqual(Buffer.from(await data.arrayBuffer()), payload) ws.close() server.close() @@ -70,7 +69,7 @@ test('Sending >= 126, < 2^16 bytes', () => { }) }) -test('Sending < 126 bytes', () => { +test('Sending < 126 bytes', (t) => { const server = new WebSocketServer({ port: 0 }) server.on('connection', (ws) => { @@ -89,9 +88,9 @@ test('Sending < 126 bytes', () => { return new Promise((resolve) => { ws.addEventListener('message', async ({ data }) => { - assert.ok(data instanceof Blob) - assert.equal(data.size, payload.length) - assert.deepStrictEqual(Buffer.from(await data.arrayBuffer()), payload) + t.assert.ok(data instanceof Blob) + t.assert.strictEqual(data.size, payload.length) + t.assert.deepStrictEqual(Buffer.from(await data.arrayBuffer()), payload) ws.close() server.close() @@ -100,7 +99,7 @@ test('Sending < 126 bytes', () => { }) }) -test('Sending data after close', () => { +test('Sending data after close', (t) => { const server = new WebSocketServer({ port: 0 }) const ws = new WebSocket(`ws://localhost:${server.address().port}`) @@ -122,12 +121,12 @@ test('Sending data after close', () => { }) }) -test('Sending data before connected', () => { +test('Sending data before connected', (t) => { const server = new WebSocketServer({ port: 0 }) const ws = new WebSocket(`ws://localhost:${server.address().port}`) - assert.throws( + t.assert.throws( () => ws.send('Not sent'), { name: 'InvalidStateError', @@ -135,12 +134,12 @@ test('Sending data before connected', () => { } ) - assert.equal(ws.readyState, WebSocket.CONNECTING) + t.assert.strictEqual(ws.readyState, WebSocket.CONNECTING) server.close() }) describe('Sending data to a server', () => { - test('Send with string', () => { + test('Send with string', (t) => { const server = new WebSocketServer({ port: 0 }) const ws = new WebSocket(`ws://localhost:${server.address().port}`) @@ -152,8 +151,8 @@ describe('Sending data to a server', () => { return new Promise((resolve) => { server.on('connection', (ws) => { ws.on('message', (data, isBinary) => { - assert.ok(!isBinary, 'Received text frame') - assert.deepStrictEqual(data, Buffer.from('message')) + t.assert.ok(!isBinary, 'Received text frame') + t.assert.deepStrictEqual(data, Buffer.from('message')) ws.close(1000) server.close() resolve() @@ -162,7 +161,7 @@ describe('Sending data to a server', () => { }) }) - test('Send with ArrayBuffer', () => { + test('Send with ArrayBuffer', (t) => { const message = new TextEncoder().encode('message') const ab = new ArrayBuffer(7) new Uint8Array(ab).set(message) @@ -178,8 +177,8 @@ describe('Sending data to a server', () => { return new Promise((resolve) => { server.on('connection', (ws) => { ws.on('message', (data, isBinary) => { - assert.ok(isBinary) - assert.deepStrictEqual(new Uint8Array(data), message) + t.assert.ok(isBinary) + t.assert.deepStrictEqual(new Uint8Array(data), message) ws.close(1000) server.close() resolve() @@ -188,7 +187,7 @@ describe('Sending data to a server', () => { }) }) - test('Send with Blob', () => { + test('Send with Blob', (t) => { const blob = new Blob(['hello']) const server = new WebSocketServer({ port: 0 }) @@ -201,8 +200,8 @@ describe('Sending data to a server', () => { return new Promise((resolve) => { server.on('connection', (ws) => { ws.on('message', (data, isBinary) => { - assert.ok(isBinary) - assert.deepStrictEqual(data, Buffer.from('hello')) + t.assert.ok(isBinary) + t.assert.deepStrictEqual(data, Buffer.from('hello')) ws.close(1000) server.close() resolve() @@ -211,7 +210,7 @@ describe('Sending data to a server', () => { }) }) - test('Cannot send with SharedArrayBuffer', () => { + test('Cannot send with SharedArrayBuffer', (t) => { const sab = new SharedArrayBuffer(0) const server = new WebSocketServer({ port: 0 }) @@ -224,8 +223,8 @@ describe('Sending data to a server', () => { return new Promise((resolve) => { server.on('connection', (ws) => { ws.on('message', (data, isBinary) => { - assert.ok(!isBinary) - assert.deepStrictEqual(data, Buffer.from('[object SharedArrayBuffer]')) + t.assert.ok(!isBinary) + t.assert.deepStrictEqual(data, Buffer.from('[object SharedArrayBuffer]')) ws.close(1000) server.close() resolve() diff --git a/test/websocket/util.js b/test/websocket/util.js index 8dd0062c5cf..b6b05c5ba62 100644 --- a/test/websocket/util.js +++ b/test/websocket/util.js @@ -1,31 +1,30 @@ 'use strict' -const { tspl } = require('@matteo.collina/tspl') const { describe, test } = require('node:test') const { isValidSubprotocol } = require('../../lib/web/websocket/util') describe('isValidSubprotocol', () => { test('empty string returns false', t => { - t = tspl(t, { plan: 1 }) - t.strictEqual(isValidSubprotocol(''), false) + t.plan(1) + t.assert.strictEqual(isValidSubprotocol(''), false) }) test('simple valid value returns false', t => { - t = tspl(t, { plan: 1 }) - t.strictEqual(isValidSubprotocol('chat'), true) + t.plan(1) + t.assert.strictEqual(isValidSubprotocol('chat'), true) }) test('empty string returns false', t => { - t = tspl(t, { plan: 1 }) - t.strictEqual(isValidSubprotocol(''), false) + t.plan(1) + t.assert.strictEqual(isValidSubprotocol(''), false) }) test('value with "(),/:;<=>?@[\\]{} returns false', t => { const chars = '"(),/:;<=>?@[\\]{}' - t = tspl(t, { plan: 17 }) + t.plan(17) for (let i = 0; i < chars.length; ++i) { - t.strictEqual(isValidSubprotocol('valid' + chars[i]), false) + t.assert.strictEqual(isValidSubprotocol('valid' + chars[i]), false) } }) }) diff --git a/test/websocket/websocketinit.js b/test/websocket/websocketinit.js index 4daa16bfc48..3b7445fc7f8 100644 --- a/test/websocket/websocketinit.js +++ b/test/websocket/websocketinit.js @@ -1,7 +1,6 @@ 'use strict' const { test, describe } = require('node:test') -const assert = require('node:assert') const { WebSocketServer } = require('ws') const { WebSocket, Dispatcher, Agent } = require('../..') @@ -17,7 +16,7 @@ describe('WebSocketInit', () => { } } - test('WebSocketInit as 2nd param', () => { + test('WebSocketInit as 2nd param', (t) => { const server = new WebSocketServer({ port: 0 }) server.on('connection', (ws) => { @@ -32,7 +31,7 @@ describe('WebSocketInit', () => { ws.onerror = reject ws.addEventListener('message', async (event) => { - assert.equal(await event.data.text(), 'hello, world') + t.assert.strictEqual(await event.data.text(), 'hello, world') server.close() ws.close() resolve()