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