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