mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 10:59:27 +00:00
5374e15d24
Don't destroy the socket when closing the session but let it end gracefully. Also, when destroying the session, on Windows, we would get ECONNRESET errors, make sure we take those into account in our tests. PR-URL: https://github.com/nodejs/node/pull/45115 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
65 lines
2.0 KiB
JavaScript
65 lines
2.0 KiB
JavaScript
// Flags: --expose-internals
|
|
|
|
'use strict';
|
|
|
|
const common = require('../common');
|
|
if (!common.hasCrypto)
|
|
common.skip('missing crypto');
|
|
const http2 = require('http2');
|
|
const assert = require('assert');
|
|
const { kSocket } = require('internal/http2/util');
|
|
const { ServerHttp2Session } = require('internal/http2/core');
|
|
|
|
const server = http2.createServer();
|
|
server.on('stream', common.mustNotCall());
|
|
|
|
let test = 0;
|
|
|
|
server.on('session', common.mustCall((session) => {
|
|
assert.strictEqual(session instanceof ServerHttp2Session, true);
|
|
switch (++test) {
|
|
case 1:
|
|
server.on('error', common.mustNotCall());
|
|
session.on('error', common.expectsError({
|
|
name: 'Error',
|
|
message: 'test'
|
|
}));
|
|
session[kSocket].emit('error', new Error('test'));
|
|
break;
|
|
case 2:
|
|
// If the server does not have a socketError listener,
|
|
// error will be silent on the server but will close
|
|
// the session
|
|
session[kSocket].emit('error', new Error('test'));
|
|
break;
|
|
}
|
|
}, 2));
|
|
|
|
server.on('sessionError', common.mustCall((err, session) => {
|
|
assert.strictEqual(err.name, 'Error');
|
|
assert.strictEqual(err.message, 'test');
|
|
assert.strictEqual(session instanceof ServerHttp2Session, true);
|
|
}, 2));
|
|
|
|
server.listen(0, common.mustCall(() => {
|
|
const url = `http://localhost:${server.address().port}`;
|
|
http2.connect(url)
|
|
.on('error', common.mustCall((err) => {
|
|
if (err.code !== 'ECONNRESET') {
|
|
assert.strictEqual(err.code, 'ERR_HTTP2_SESSION_ERROR');
|
|
assert.strictEqual(err.message, 'Session closed with error code 2');
|
|
}
|
|
}))
|
|
.on('close', () => {
|
|
server.removeAllListeners('error');
|
|
http2.connect(url)
|
|
.on('error', common.mustCall((err) => {
|
|
if (err.code !== 'ECONNRESET') {
|
|
assert.strictEqual(err.code, 'ERR_HTTP2_SESSION_ERROR');
|
|
assert.strictEqual(err.message, 'Session closed with error code 2');
|
|
}
|
|
}))
|
|
.on('close', () => server.close());
|
|
});
|
|
}));
|