1// Flags: --expose-internals 2 3'use strict'; 4 5const common = require('../common'); 6if (!common.hasCrypto) 7 common.skip('missing crypto'); 8const http2 = require('http2'); 9const { kSocket } = require('internal/http2/util'); 10 11const server = http2.createServer(); 12server.on('stream', common.mustNotCall()); 13 14let test = 0; 15 16server.on('session', common.mustCall((session) => { 17 switch (++test) { 18 case 1: 19 server.on('error', common.mustNotCall()); 20 session.on('error', common.expectsError({ 21 name: 'Error', 22 message: 'test' 23 })); 24 session[kSocket].emit('error', new Error('test')); 25 break; 26 case 2: 27 // If the server does not have a socketError listener, 28 // error will be silent on the server but will close 29 // the session 30 session[kSocket].emit('error', new Error('test')); 31 break; 32 } 33}, 2)); 34 35server.listen(0, common.mustCall(() => { 36 const url = `http://localhost:${server.address().port}`; 37 http2.connect(url) 38 .on('error', common.expectsError({ 39 code: 'ERR_HTTP2_SESSION_ERROR', 40 message: 'Session closed with error code 2', 41 })) 42 .on('close', () => { 43 server.removeAllListeners('error'); 44 http2.connect(url) 45 .on('error', common.expectsError({ 46 code: 'ERR_HTTP2_SESSION_ERROR', 47 message: 'Session closed with error code 2', 48 })) 49 .on('close', () => server.close()); 50 }); 51})); 52