1'use strict';
2
3const common = require('../common');
4if (!common.hasCrypto)
5  common.skip('missing crypto');
6const fixtures = require('../common/fixtures');
7const assert = require('assert');
8const http2 = require('http2');
9const fs = require('fs');
10const path = require('path');
11
12// Piping should work as expected with createWriteStream
13
14const tmpdir = require('../common/tmpdir');
15tmpdir.refresh();
16const loc = fixtures.path('person-large.jpg');
17const fn = path.join(tmpdir.path, 'http2-url-tests.js');
18
19const server = http2.createServer();
20
21server.on('stream', common.mustCall((stream) => {
22  const dest = stream.pipe(fs.createWriteStream(fn));
23
24  dest.on('finish', () => {
25    assert.strictEqual(fs.readFileSync(loc).length,
26                       fs.readFileSync(fn).length);
27  });
28  stream.respond();
29  stream.end();
30}));
31
32server.listen(0, common.mustCall(() => {
33  const client = http2.connect(`http://localhost:${server.address().port}`);
34
35  const req = client.request({ ':method': 'POST' });
36
37  req.on('response', common.mustCall());
38  req.resume();
39
40  req.on('close', common.mustCall(() => {
41    server.close();
42    client.close();
43  }));
44
45  const str = fs.createReadStream(loc);
46  str.on('end', common.mustCall());
47  str.pipe(req);
48}));
49