mirror of https://github.com/lukechilds/node.git
Browse Source
Fixes: https://github.com/nodejs/node/issues/14523 PR-URL: https://github.com/nodejs/node/pull/14527 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>v6
Anna Henningsen
8 years ago
3 changed files with 99 additions and 7 deletions
@ -0,0 +1,27 @@ |
|||
'use strict'; |
|||
|
|||
// Regression test for https://github.com/nodejs/node/issues/14523.
|
|||
// Checks that flushes interact properly with writableState.needDrain,
|
|||
// even if no flush callback was passed.
|
|||
|
|||
const common = require('../common'); |
|||
const assert = require('assert'); |
|||
const zlib = require('zlib'); |
|||
|
|||
const zipper = zlib.createGzip({ highWaterMark: 16384 }); |
|||
const unzipper = zlib.createGunzip(); |
|||
zipper.pipe(unzipper); |
|||
|
|||
zipper.write('A'.repeat(17000)); |
|||
zipper.flush(); |
|||
|
|||
let received = 0; |
|||
unzipper.on('data', common.mustCall((d) => { |
|||
received += d.length; |
|||
}, 2)); |
|||
|
|||
// Properly `.end()`ing the streams would interfere with checking that
|
|||
// `.flush()` works.
|
|||
process.on('exit', () => { |
|||
assert.strictEqual(received, 17000); |
|||
}); |
@ -0,0 +1,41 @@ |
|||
'use strict'; |
|||
|
|||
const common = require('../common'); |
|||
const assert = require('assert'); |
|||
const zlib = require('zlib'); |
|||
|
|||
const { |
|||
Z_PARTIAL_FLUSH, Z_SYNC_FLUSH, Z_FULL_FLUSH, Z_FINISH |
|||
} = zlib.constants; |
|||
|
|||
common.crashOnUnhandledRejection(); |
|||
|
|||
async function getOutput(...sequenceOfFlushes) { |
|||
const zipper = zlib.createGzip({ highWaterMark: 16384 }); |
|||
|
|||
zipper.write('A'.repeat(17000)); |
|||
for (const flush of sequenceOfFlushes) { |
|||
zipper.flush(flush); |
|||
} |
|||
|
|||
const data = []; |
|||
|
|||
return new Promise((resolve) => { |
|||
zipper.on('data', common.mustCall((d) => { |
|||
data.push(d); |
|||
if (data.length === 2) resolve(Buffer.concat(data)); |
|||
}, 2)); |
|||
}); |
|||
} |
|||
|
|||
(async function() { |
|||
assert.deepStrictEqual(await getOutput(Z_SYNC_FLUSH), |
|||
await getOutput(Z_SYNC_FLUSH, Z_PARTIAL_FLUSH)); |
|||
assert.deepStrictEqual(await getOutput(Z_SYNC_FLUSH), |
|||
await getOutput(Z_PARTIAL_FLUSH, Z_SYNC_FLUSH)); |
|||
|
|||
assert.deepStrictEqual(await getOutput(Z_FINISH), |
|||
await getOutput(Z_FULL_FLUSH, Z_FINISH)); |
|||
assert.deepStrictEqual(await getOutput(Z_FINISH), |
|||
await getOutput(Z_SYNC_FLUSH, Z_FINISH)); |
|||
})(); |
Loading…
Reference in new issue