diff options
author | Anna Henningsen <anna@addaleax.net> | 2018-02-02 13:11:39 +0300 |
---|---|---|
committer | Anna Henningsen <anna@addaleax.net> | 2018-02-27 21:07:12 +0300 |
commit | 7853a7fd2a34921cf7a0227b4f6a857f9f8b417f (patch) | |
tree | 8623495b50e67b875cdb82024d092b221a2fbbcc | |
parent | e33b9fa7b59f34ebbce8f40ed77e8007b6fa1faf (diff) |
test: add test for stream unpipe with 'data' listeners
PR-URL: https://github.com/nodejs/node/pull/18516
Reviewed-By: Anatoli Papirovski <apapirovski@mac.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Minwoo Jung <minwoo@nodesource.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
-rw-r--r-- | test/parallel/test-stream-pipe-flow-after-unpipe.js | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/test/parallel/test-stream-pipe-flow-after-unpipe.js b/test/parallel/test-stream-pipe-flow-after-unpipe.js new file mode 100644 index 00000000000..048b7ea5e53 --- /dev/null +++ b/test/parallel/test-stream-pipe-flow-after-unpipe.js @@ -0,0 +1,29 @@ +'use strict'; +const common = require('../common'); +const { Readable, Writable } = require('stream'); + +// Tests that calling .unpipe() un-blocks a stream that is paused because +// it is waiting on the writable side to finish a write(). + +const rs = new Readable({ + highWaterMark: 1, + // That this gets called at least 20 times is the real test here. + read: common.mustCallAtLeast(() => rs.push('foo'), 20) +}); + +const ws = new Writable({ + highWaterMark: 1, + write: common.mustCall(() => { + // Ignore the callback, this write() simply never finishes. + setImmediate(() => rs.unpipe(ws)); + }) +}); + +let chunks = 0; +rs.on('data', common.mustCallAtLeast(() => { + chunks++; + if (chunks >= 20) + rs.pause(); // Finish this test. +})); + +rs.pipe(ws); |