1'use strict'; 2const common = require('../common'); 3const assert = require('assert'); 4 5if (!common.hasCrypto) 6 common.skip('missing crypto'); 7 8const http2 = require('http2'); 9const net = require('net'); 10 11const { 12 HTTP2_HEADER_PATH, 13} = http2.constants; 14 15// Create a normal session, as a control case 16function normalSession(cb) { 17 http2.connect('https://google.com', (clientSession) => { 18 let error = null; 19 const req = clientSession.request({ [HTTP2_HEADER_PATH]: '/' }); 20 req.on('error', (err) => { 21 error = err; 22 }); 23 req.on('response', (_headers) => { 24 req.on('data', (_chunk) => { }); 25 req.on('end', () => { 26 clientSession.close(); 27 return cb(error); 28 }); 29 }); 30 }); 31} 32normalSession(common.mustCall(function(err) { 33 assert.ifError(err); 34})); 35 36// Create a session using a socket that has not yet finished connecting 37function socketNotFinished(done) { 38 const socket2 = net.connect(443, 'google.com'); 39 http2.connect('https://google.com', { socket2 }, (clientSession) => { 40 let error = null; 41 const req = clientSession.request({ [HTTP2_HEADER_PATH]: '/' }); 42 req.on('error', (err) => { 43 error = err; 44 }); 45 req.on('response', (_headers) => { 46 req.on('data', (_chunk) => { }); 47 req.on('end', () => { 48 clientSession.close(); 49 socket2.destroy(); 50 return done(error); 51 }); 52 }); 53 }); 54} 55socketNotFinished(common.mustCall(function(err) { 56 assert.ifError(err); 57})); 58 59// Create a session using a socket that has finished connecting 60function socketFinished(done) { 61 const socket = net.connect(443, 'google.com', () => { 62 http2.connect('https://google.com', { socket }, (clientSession) => { 63 let error = null; 64 const req = clientSession.request({ [HTTP2_HEADER_PATH]: '/' }); 65 req.on('error', (err) => { 66 error = err; 67 }); 68 req.on('response', (_headers) => { 69 req.on('data', (_chunk) => { }); 70 req.on('end', () => { 71 clientSession.close(); 72 return done(error); 73 }); 74 }); 75 }); 76 }); 77} 78socketFinished(common.mustCall(function(err) { 79 assert.ifError(err); 80})); 81