• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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, 'http2-url-tests.js');
19
20const server = http2.createServer();
21
22server.on('stream', common.mustCall((stream) => {
23  const dest = stream.pipe(fs.createWriteStream(fn));
24
25  dest.on('finish', () => {
26    assert.strictEqual(fs.readFileSync(loc).length,
27                       fs.readFileSync(fn).length);
28  });
29  stream.respond();
30  stream.end();
31}));
32
33server.listen(common.PIPE, common.mustCall(() => {
34  const client = http2.connect('http://localhost', {
35    createConnection(url) {
36      return net.connect(server.address());
37    }
38  });
39
40  const req = client.request({ ':method': 'POST' });
41  req.on('response', common.mustCall());
42  req.resume();
43
44  req.on('close', common.mustCall(() => {
45    server.close();
46    client.close();
47  }));
48
49  const str = fs.createReadStream(loc);
50  str.on('end', common.mustCall());
51  str.pipe(req);
52}));
53