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 net = require('net');
11const path = require('path');
12
13// HTTP/2 servers can listen on a named pipe.
14
15const tmpdir = require('../common/tmpdir');
16tmpdir.refresh();
17const loc = fixtures.path('person-large.jpg');
18const fn = path.join(tmpdir.path, 'person-large.jpg');
19
20const server = http2.createServer();
21
22server.on('stream', common.mustCall((stream) => {
23  const dest = stream.pipe(fs.createWriteStream(fn));
24
25  stream.on('end', common.mustCall(() => {
26    stream.respond();
27    stream.end();
28  }));
29
30  dest.on('finish', common.mustCall(() => {
31    assert.strictEqual(fs.readFileSync(fn).length,
32                       fs.readFileSync(loc).length);
33  }));
34}));
35
36server.listen(common.PIPE, common.mustCall(() => {
37  const client = http2.connect('http://localhost', {
38    createConnection(url) {
39      return net.connect(server.address());
40    }
41  });
42
43  const req = client.request({ ':method': 'POST' });
44  req.on('response', common.mustCall());
45  req.resume();
46
47  req.on('close', common.mustCall(() => {
48    server.close();
49    client.close();
50  }));
51
52  const str = fs.createReadStream(loc);
53  str.on('end', common.mustCall());
54  str.pipe(req);
55}));
56