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