1'use strict'; 2 3const common = require('../common'); 4if (!common.hasCrypto) 5 common.skip('missing crypto'); 6const assert = require('assert'); 7const h2 = require('http2'); 8const net = require('net'); 9 10// Http2ServerRequest should expose convenience properties 11 12const server = h2.createServer(); 13server.listen(0, common.mustCall(function() { 14 const port = server.address().port; 15 server.once('request', common.mustCall(function(request, response) { 16 const expected = { 17 version: '2.0', 18 httpVersionMajor: 2, 19 httpVersionMinor: 0 20 }; 21 22 assert.strictEqual(request.httpVersion, expected.version); 23 assert.strictEqual(request.httpVersionMajor, expected.httpVersionMajor); 24 assert.strictEqual(request.httpVersionMinor, expected.httpVersionMinor); 25 26 assert.ok(request.socket instanceof net.Socket); 27 assert.ok(request.connection instanceof net.Socket); 28 assert.strictEqual(request.socket, request.connection); 29 30 response.on('finish', common.mustCall(function() { 31 process.nextTick(() => { 32 assert.ok(request.socket); 33 server.close(); 34 }); 35 })); 36 response.end(); 37 })); 38 39 const url = `http://localhost:${port}`; 40 const client = h2.connect(url, common.mustCall(function() { 41 const headers = { 42 ':path': '/foobar', 43 ':method': 'GET', 44 ':scheme': 'http', 45 ':authority': `localhost:${port}` 46 }; 47 const request = client.request(headers); 48 request.on('end', common.mustCall(function() { 49 client.close(); 50 })); 51 request.end(); 52 request.resume(); 53 })); 54})); 55