| 'use strict'; |
| |
| const common = require('../common'); |
| const assert = require('assert'); |
| const stream = require('stream'); |
| |
| let pushes = 0; |
| const total = 65500 + 40 * 1024; |
| const rs = new stream.Readable({ |
| read: common.mustCall(function() { |
| if (pushes++ === 10) { |
| this.push(null); |
| return; |
| } |
| |
| const length = this._readableState.length; |
| |
| // We are at most doing two full runs of _reads |
| // before stopping, because Readable is greedy |
| // to keep its buffer full |
| assert(length <= total); |
| |
| this.push(Buffer.alloc(65500)); |
| for (let i = 0; i < 40; i++) { |
| this.push(Buffer.alloc(1024)); |
| } |
| |
| // We will be over highWaterMark at this point |
| // but a new call to _read is scheduled anyway. |
| }, 11) |
| }); |
| |
| const ws = stream.Writable({ |
| write: common.mustCall(function(data, enc, cb) { |
| setImmediate(cb); |
| }, 41 * 10) |
| }); |
| |
| rs.pipe(ws); |