From fc08e7116919cb0511a86a032539ec127b8134c1 Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Fri, 2 Feb 2018 11:11:39 +0100 Subject: [PATCH] test: add test for stream unpipe with 'data' listeners PR-URL: https://github.com/nodejs/node/pull/18516 Reviewed-By: Anatoli Papirovski Reviewed-By: Matteo Collina Reviewed-By: James M Snell Reviewed-By: Minwoo Jung Reviewed-By: Ruben Bridgewater --- .../test-stream-pipe-flow-after-unpipe.js | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 test/parallel/test-stream-pipe-flow-after-unpipe.js 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 00000000000000..048b7ea5e53163 --- /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);