• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1'use strict';
2
3const common = require('../common');
4if (!common.hasCrypto)
5  common.skip('missing crypto');
6const assert = require('assert');
7const h2 = require('http2');
8const net = require('net');
9
10// Http2ServerRequest should expose convenience properties
11
12const server = h2.createServer();
13server.listen(0, common.mustCall(function() {
14  const port = server.address().port;
15  server.once('request', common.mustCall(function(request, response) {
16    const expected = {
17      version: '2.0',
18      httpVersionMajor: 2,
19      httpVersionMinor: 0
20    };
21
22    assert.strictEqual(request.httpVersion, expected.version);
23    assert.strictEqual(request.httpVersionMajor, expected.httpVersionMajor);
24    assert.strictEqual(request.httpVersionMinor, expected.httpVersionMinor);
25
26    assert.ok(request.socket instanceof net.Socket);
27    assert.ok(request.connection instanceof net.Socket);
28    assert.strictEqual(request.socket, request.connection);
29
30    response.on('finish', common.mustCall(function() {
31      process.nextTick(() => {
32        assert.ok(request.socket);
33        server.close();
34      });
35    }));
36    response.end();
37  }));
38
39  const url = `http://localhost:${port}`;
40  const client = h2.connect(url, common.mustCall(function() {
41    const headers = {
42      ':path': '/foobar',
43      ':method': 'GET',
44      ':scheme': 'http',
45      ':authority': `localhost:${port}`
46    };
47    const request = client.request(headers);
48    request.on('end', common.mustCall(function() {
49      client.close();
50    }));
51    request.end();
52    request.resume();
53  }));
54}));
55