1'use strict';
2require('../common');
3const assert = require('assert');
4const zlib = require('zlib');
5const fixtures = require('../common/fixtures');
6
7const file = fixtures.readSync('person.jpg');
8const chunkSize = 12 * 1024;
9const opts = { level: 9, strategy: zlib.constants.Z_DEFAULT_STRATEGY };
10const deflater = zlib.createDeflate(opts);
11
12const chunk1 = file.slice(0, chunkSize);
13const chunk2 = file.slice(chunkSize);
14const blkhdr = Buffer.from([0x00, 0x5a, 0x82, 0xa5, 0x7d]);
15const blkftr = Buffer.from('010000ffff7dac3072', 'hex');
16const expected = Buffer.concat([blkhdr, chunk2, blkftr]);
17const bufs = [];
18
19function read() {
20  let buf;
21  while ((buf = deflater.read()) !== null) {
22    bufs.push(buf);
23  }
24}
25
26deflater.write(chunk1, function() {
27  deflater.params(0, zlib.constants.Z_DEFAULT_STRATEGY, function() {
28    while (deflater.read());
29
30    deflater.on('readable', read);
31
32    deflater.end(chunk2);
33  });
34  while (deflater.read());
35});
36
37process.once('exit', function() {
38  const actual = Buffer.concat(bufs);
39  assert.deepStrictEqual(actual, expected);
40});
41