diff --git a/test/parallel/test-zlib-flush-drain.js b/test/parallel/test-zlib-flush-drain.js new file mode 100644 index 00000000000000..93966cd85d269a --- /dev/null +++ b/test/parallel/test-zlib-flush-drain.js @@ -0,0 +1,49 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const zlib = require('zlib'); +const path = require('path'); + +const bigData = new Buffer(10240).fill('x'); + +const opts = { + level: 0, + highWaterMark: 16 +}; + +const deflater = zlib.createDeflate(opts); + +// shim deflater.flush so we can count times executed +var flushCount = 0; +var drainCount = 0; + +const flush = deflater.flush; +deflater.flush = function(kind, callback) { + flushCount++; + flush.call(this, kind, callback); +}; + +deflater.write(bigData); + +const ws = deflater._writableState; +const beforeFlush = ws.needDrain; +var afterFlush = ws.needDrain; + +deflater.flush(function(err) { + afterFlush = ws.needDrain; +}); + +deflater.on('drain', function() { + drainCount++;; +}); + +process.once('exit', function() { + assert.equal(beforeFlush, true, + 'before calling flush the writable stream should need to drain'); + assert.equal(afterFlush, false, + 'after calling flush the writable stream should not need to drain'); + assert.equal(drainCount, 1, + 'the deflater should have emitted a single drain event'); + assert.equal(flushCount, 2, + 'flush should be called twice'); +});