mirror of https://github.com/lukechilds/node.git
Browse Source
Added bytesRead property to Zlib engines Fixes: https://github.com/nodejs/node/issues/8874 PR-URL: https://github.com/nodejs/node/pull/13088 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Sam Roberts <vieuxtech@gmail.com>v6
Alexander O'Mara
8 years ago
committed by
Anna Henningsen
3 changed files with 108 additions and 0 deletions
@ -0,0 +1,93 @@ |
|||||
|
'use strict'; |
||||
|
const common = require('../common'); |
||||
|
const assert = require('assert'); |
||||
|
const zlib = require('zlib'); |
||||
|
|
||||
|
const expectStr = 'abcdefghijklmnopqrstuvwxyz'.repeat(2); |
||||
|
const expectBuf = Buffer.from(expectStr); |
||||
|
|
||||
|
function createWriter(target, buffer) { |
||||
|
const writer = { size: 0 }; |
||||
|
const write = () => { |
||||
|
target.write(Buffer.from([buffer[writer.size++]]), () => { |
||||
|
if (writer.size < buffer.length) { |
||||
|
target.flush(write); |
||||
|
} else { |
||||
|
target.end(); |
||||
|
} |
||||
|
}); |
||||
|
}; |
||||
|
write(); |
||||
|
return writer; |
||||
|
} |
||||
|
|
||||
|
for (const method of [ |
||||
|
['createGzip', 'createGunzip', false], |
||||
|
['createGzip', 'createUnzip', false], |
||||
|
['createDeflate', 'createInflate', true], |
||||
|
['createDeflateRaw', 'createInflateRaw', true] |
||||
|
]) { |
||||
|
let compWriter; |
||||
|
let compData = new Buffer(0); |
||||
|
|
||||
|
const comp = zlib[method[0]](); |
||||
|
comp.on('data', function(d) { |
||||
|
compData = Buffer.concat([compData, d]); |
||||
|
assert.strictEqual(this.bytesRead, compWriter.size, |
||||
|
`Should get write size on ${method[0]} data.`); |
||||
|
}); |
||||
|
comp.on('end', common.mustCall(function() { |
||||
|
assert.strictEqual(this.bytesRead, compWriter.size, |
||||
|
`Should get write size on ${method[0]} end.`); |
||||
|
assert.strictEqual(this.bytesRead, expectStr.length, |
||||
|
`Should get data size on ${method[0]} end.`); |
||||
|
|
||||
|
{ |
||||
|
let decompWriter; |
||||
|
let decompData = new Buffer(0); |
||||
|
|
||||
|
const decomp = zlib[method[1]](); |
||||
|
decomp.on('data', function(d) { |
||||
|
decompData = Buffer.concat([decompData, d]); |
||||
|
assert.strictEqual(this.bytesRead, decompWriter.size, |
||||
|
`Should get write size on ${method[0]}/` + |
||||
|
`${method[1]} data.`); |
||||
|
}); |
||||
|
decomp.on('end', common.mustCall(function() { |
||||
|
assert.strictEqual(this.bytesRead, compData.length, |
||||
|
`Should get compressed size on ${method[0]}/` + |
||||
|
`${method[1]} end.`); |
||||
|
assert.strictEqual(decompData.toString(), expectStr, |
||||
|
`Should get original string on ${method[0]}/` + |
||||
|
`${method[1]} end.`); |
||||
|
})); |
||||
|
decompWriter = createWriter(decomp, compData); |
||||
|
} |
||||
|
|
||||
|
// Some methods should allow extra data after the compressed data
|
||||
|
if (method[2]) { |
||||
|
const compDataExtra = Buffer.concat([compData, new Buffer('extra')]); |
||||
|
|
||||
|
let decompWriter; |
||||
|
let decompData = new Buffer(0); |
||||
|
|
||||
|
const decomp = zlib[method[1]](); |
||||
|
decomp.on('data', function(d) { |
||||
|
decompData = Buffer.concat([decompData, d]); |
||||
|
assert.strictEqual(this.bytesRead, decompWriter.size, |
||||
|
`Should get write size on ${method[0]}/` + |
||||
|
`${method[1]} data.`); |
||||
|
}); |
||||
|
decomp.on('end', common.mustCall(function() { |
||||
|
assert.strictEqual(this.bytesRead, compData.length, |
||||
|
`Should get compressed size on ${method[0]}/` + |
||||
|
`${method[1]} end.`); |
||||
|
assert.strictEqual(decompData.toString(), expectStr, |
||||
|
`Should get original string on ${method[0]}/` + |
||||
|
`${method[1]} end.`); |
||||
|
})); |
||||
|
decompWriter = createWriter(decomp, compDataExtra); |
||||
|
} |
||||
|
})); |
||||
|
compWriter = createWriter(comp, expectBuf); |
||||
|
} |
Loading…
Reference in new issue