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