diff --git a/lib/internal/streams/iter/broadcast.js b/lib/internal/streams/iter/broadcast.js index 3592453036d303..ec8c347e6e05ba 100644 --- a/lib/internal/streams/iter/broadcast.js +++ b/lib/internal/streams/iter/broadcast.js @@ -582,7 +582,7 @@ class BroadcastWriter { if (policy === 'strict') { if (this.#pendingWrites.length >= hwm) { - throw new ERR_INVALID_STATE.TypeError( + throw new ERR_INVALID_STATE.RangeError( 'Backpressure violation: too many pending writes. ' + 'Await each write() call to respect backpressure.'); } diff --git a/test/parallel/test-stream-iter-broadcast-backpressure.js b/test/parallel/test-stream-iter-broadcast-backpressure.js index d1e466c3ac44cf..7135a71b8e2806 100644 --- a/test/parallel/test-stream-iter-broadcast-backpressure.js +++ b/test/parallel/test-stream-iter-broadcast-backpressure.js @@ -105,6 +105,28 @@ async function testBlockBackpressureContent() { assert.strictEqual(done.done, true); } +async function testStrictBackpressureOverflow() { + const { writer } = broadcast({ + highWaterMark: 1, + backpressure: 'strict', + }); + + await writer.write('a'); + const pending = writer.write('b'); + + await assert.rejects(writer.write('c'), { + name: 'RangeError', + code: 'ERR_INVALID_STATE', + }); + + writer.fail(); + await assert.rejects(pending, { + name: 'TypeError', + code: 'ERR_INVALID_STATE', + message: 'Invalid state: Failed', + }); +} + // Writev async path async function testWritevAsync() { const { writer, broadcast: bc } = broadcast({ highWaterMark: 10 }); @@ -133,6 +155,7 @@ Promise.all([ testDropNewest(), testBlockBackpressure(), testBlockBackpressureContent(), + testStrictBackpressureOverflow(), testWritevAsync(), testEndSyncReturnValue(), ]).then(common.mustCall());