mirror of https://github.com/lukechilds/node.git
Browse Source
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 <info@bnoordhuis.nl> Reviewed-By: James M Snell <jasnell@gmail.com>v4.x
committed by
James M Snell
1 changed files with 49 additions and 0 deletions
@ -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'); |
|||
}); |
Loading…
Reference in new issue