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