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