• 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');
8
9// Http2ServerResponse.writeHead should accept an optional status message
10
11const unsupportedWarned = common.mustCall(1);
12process.on('warning', ({ name, message }) => {
13  const expectedMessage =
14    'Status message is not supported by HTTP/2 (RFC7540 8.1.2.4)';
15  if (name === 'UnsupportedWarning' && message === expectedMessage)
16    unsupportedWarned();
17});
18
19const server = h2.createServer();
20server.listen(0, common.mustCall(function() {
21  const port = server.address().port;
22  server.once('request', common.mustCall(function(request, response) {
23    const statusCode = 200;
24    const statusMessage = 'OK';
25    const headers = { 'foo-bar': 'abc123' };
26    response.writeHead(statusCode, statusMessage, headers);
27
28    response.on('finish', common.mustCall(function() {
29      server.close();
30    }));
31    response.end();
32  }));
33
34  const url = `http://localhost:${port}`;
35  const client = h2.connect(url, common.mustCall(function() {
36    const headers = {
37      ':path': '/',
38      ':method': 'GET',
39      ':scheme': 'http',
40      ':authority': `localhost:${port}`
41    };
42    const request = client.request(headers);
43    request.on('response', common.mustCall(function(headers) {
44      assert.strictEqual(headers[':status'], 200);
45      assert.strictEqual(headers['foo-bar'], 'abc123');
46    }, 1));
47    request.on('end', common.mustCall(function() {
48      client.close();
49    }));
50    request.end();
51    request.resume();
52  }));
53}));
54