• 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.statusMessage should warn
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    response.on('finish', common.mustCall(function() {
24      response.statusMessage = 'test';
25      response.statusMessage = 'test'; // only warn once
26      assert.strictEqual(response.statusMessage, ''); // no change
27      server.close();
28    }));
29    response.end();
30  }));
31
32  const url = `http://localhost:${port}`;
33  const client = h2.connect(url, common.mustCall(function() {
34    const headers = {
35      ':path': '/',
36      ':method': 'GET',
37      ':scheme': 'http',
38      ':authority': `localhost:${port}`
39    };
40    const request = client.request(headers);
41    request.on('response', common.mustCall(function(headers) {
42      assert.strictEqual(headers[':status'], 200);
43    }, 1));
44    request.on('end', common.mustCall(function() {
45      client.close();
46    }));
47    request.end();
48    request.resume();
49  }));
50}));
51