From 391ddf3a9a8852ac70fed55a17fad803e27a77ee Mon Sep 17 00:00:00 2001 From: Luigi Pinca Date: Tue, 26 Dec 2023 11:27:06 +0100 Subject: [PATCH] [test] Use `stream.getDefaultHighWaterMark()` when available Refs: https://github.com/nodejs/node/pull/50120 --- test/create-websocket-stream.test.js | 18 ++++++++++++++---- test/websocket.test.js | 21 +++++++++++++++------ 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/test/create-websocket-stream.test.js b/test/create-websocket-stream.test.js index 572f5c4f2..0a83a45ea 100644 --- a/test/create-websocket-stream.test.js +++ b/test/create-websocket-stream.test.js @@ -3,7 +3,7 @@ const assert = require('assert'); const EventEmitter = require('events'); const { createServer } = require('http'); -const { Duplex } = require('stream'); +const { Duplex, getDefaultHighWaterMark } = require('stream'); const { randomBytes } = require('crypto'); const createWebSocketStream = require('../lib/stream'); @@ -11,6 +11,10 @@ const Sender = require('../lib/sender'); const WebSocket = require('..'); const { EMPTY_BUFFER } = require('../lib/constants'); +const highWaterMark = getDefaultHighWaterMark + ? getDefaultHighWaterMark(false) + : 16 * 1024; + describe('createWebSocketStream', () => { it('is exposed as a property of the `WebSocket` class', () => { assert.strictEqual(WebSocket.createWebSocketStream, createWebSocketStream); @@ -445,12 +449,15 @@ describe('createWebSocketStream', () => { }; const list = [ - ...Sender.frame(randomBytes(16 * 1024), { rsv1: false, ...opts }), + ...Sender.frame(randomBytes(highWaterMark), { + rsv1: false, + ...opts + }), ...Sender.frame(Buffer.alloc(1), { rsv1: true, ...opts }) ]; // This hack is used because there is no guarantee that more than - // 16 KiB will be sent as a single TCP packet. + // `highWaterMark` bytes will be sent as a single TCP packet. ws._socket.push(Buffer.concat(list)); }); @@ -494,7 +501,10 @@ describe('createWebSocketStream', () => { }; const list = [ - ...Sender.frame(randomBytes(16 * 1024), { rsv1: false, ...opts }), + ...Sender.frame(randomBytes(highWaterMark), { + rsv1: false, + ...opts + }), ...Sender.frame(Buffer.alloc(1), { rsv1: true, ...opts }) ]; diff --git a/test/websocket.test.js b/test/websocket.test.js index 28dcb8808..e1b3bd239 100644 --- a/test/websocket.test.js +++ b/test/websocket.test.js @@ -11,6 +11,7 @@ const net = require('net'); const tls = require('tls'); const os = require('os'); const fs = require('fs'); +const { getDefaultHighWaterMark } = require('stream'); const { URL } = require('url'); const Sender = require('../lib/sender'); @@ -23,6 +24,10 @@ const { } = require('../lib/event-target'); const { EMPTY_BUFFER, GUID, kListener, NOOP } = require('../lib/constants'); +const highWaterMark = getDefaultHighWaterMark + ? getDefaultHighWaterMark(false) + : 16 * 1024; + class CustomAgent extends http.Agent { addRequest() {} } @@ -4092,7 +4097,7 @@ describe('WebSocket', () => { ws.terminate(); }; - const payload1 = Buffer.alloc(15 * 1024); + const payload1 = Buffer.alloc(highWaterMark - 1024); const payload2 = Buffer.alloc(1); const opts = { @@ -4107,13 +4112,17 @@ describe('WebSocket', () => { ...Sender.frame(payload2, { rsv1: true, ...opts }) ]; - for (let i = 0; i < 399; i++) { + for (let i = 0; i < 340; i++) { list.push(list[list.length - 2], list[list.length - 1]); } + const data = Buffer.concat(list); + + assert.ok(data.length > highWaterMark); + // This hack is used because there is no guarantee that more than - // 16 KiB will be sent as a single TCP packet. - push.call(ws._socket, Buffer.concat(list)); + // `highWaterMark` bytes will be sent as a single TCP packet. + push.call(ws._socket, data); wss.clients .values() @@ -4128,8 +4137,8 @@ describe('WebSocket', () => { ws.on('close', (code) => { assert.strictEqual(code, 1006); - assert.strictEqual(messageLengths.length, 402); - assert.strictEqual(messageLengths[0], 15360); + assert.strictEqual(messageLengths.length, 343); + assert.strictEqual(messageLengths[0], highWaterMark - 1024); assert.strictEqual(messageLengths[messageLengths.length - 1], 1); wss.close(done); });