From 84f8eb7094c9c7573fa07eb7132c40fdecfe11d2 Mon Sep 17 00:00:00 2001 From: Myles Borins Date: Wed, 11 Nov 2015 14:49:35 -0800 Subject: [PATCH] test: add test-zlib-flush-drain This test assures that if flush is called while the zlib object needs to be drained that it will defer the callback until after the drain. PR-URL: https://github.com/nodejs/node/pull/3534 Reviewed-By: Ben Noordhuis Reviewed-By: James M Snell --- test/parallel/test-zlib-flush-drain.js | 49 ++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 test/parallel/test-zlib-flush-drain.js 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'); +});