stream, test: Increase the coverage of _readableState and _writableState properties
- Version: all
- Platform: all
- Subsystem: stream
_readableStream and _writableStream in streams are widely used in userland, but the coverage for the state machine is insufficient, as only few properties of those are checked by unit tests.
I propose we add some more tests for the internal properties and state. This is probably a meta-issue, in the sense that we might send multiple PRs to increase the coverage.
Edit: The tests should possibly use only the stream module, rather than fs or net.
$ grep _readableState * test-https-truncate.js: assert.equal(res._readableState.length, 0); test-stream-duplex.js:assert(stream._readableState.objectMode); test-stream-push-order.js: assert.deepStrictEqual(s._readableState.buffer.join(','), '1,2,3,4,5,6'); test-stream-readable-event.js: assert(!r._readableState.reading); test-stream-readable-event.js: assert(r._readableState.reading); test-stream-readable-event.js: assert(!r._readableState.reading); test-stream-readable-flow-recursion.js: assert.equal(stream._readableState.highWaterMark, 8192); test-stream-readable-flow-recursion.js: assert.equal(stream._readableState.length, 0); test-stream-transform-split-objectmode.js:assert(parser._readableState.objectMode); test-stream-transform-split-objectmode.js:assert(parser._readableState.highWaterMark === 16); test-stream-transform-split-objectmode.js:assert(!serializer._readableState.objectMode); test-stream-transform-split-objectmode.js:assert(serializer._readableState.highWaterMark === (16 * 1024)); test-stream2-large-read-stall.js:var rs = r._readableState; test-stream2-push.js: console.error('data', stream._readableState.length); test-stream2-read-sync-stack.js: if (!(r._readableState.length % 256)) test-stream2-read-sync-stack.js: console.error('readable', r._readableState.length); test-stream2-transform.js: t.equal(tx._readableState.length, 10); test-stream2-unpipe-leak.js:console.error(src._readableState); test-stream2-unpipe-leak.js: src._readableState.buffer.length = 0; test-stream2-unpipe-leak.js: console.error(src._readableState); test-stream2-unpipe-leak.js: assert(src._readableState.length >= src._readableState.highWaterMark); test-stream3-pause-then-read.js: assert(!r._readableState.flowing); $ grep _writableState * test-http-pipeline-regr-3508.js: if (size <= req.socket._writableState.highWaterMark) { test-net-reconnect.js: console.error('CLIENT connected', client._writableState); test-net-reconnect.js: console.error('CLIENT: calling end', client._writableState); test-stream-big-packet.js:var big = Buffer.alloc(s1._writableState.highWaterMark + 1, 'x'); test-stream-duplex.js:assert(stream._writableState.objectMode); test-stream-transform-split-objectmode.js:assert(!parser._writableState.objectMode); test-stream-transform-split-objectmode.js:assert(parser._writableState.highWaterMark === (16 * 1024)); test-stream-transform-split-objectmode.js:assert(serializer._writableState.objectMode); test-stream-transform-split-objectmode.js:assert(serializer._writableState.highWaterMark === 16); test-stream2-transform.js: t.same(tx._writableState.getBuffer().map(function(c) { test-stream2-writable.js: assert(tw._writableState.length >= 50); test-zlib-flush-drain.js:const ws = deflater._writableState;
cc @nodejs/streams