• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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