mirror of
https://github.com/nodejs/node.git
synced 2025-05-09 19:38:23 +00:00

Change default timeout to be tracked on the session instead of the socket, as nghttp2 manages the socket and we would need to maintain two sets of timeouts for similar purpose. Also fixes session setTimeout to work as it wasn't getting _unrefActive correctly (was called on the handle). Fixes: https://github.com/nodejs/node/issues/15158 PR-URL: https://github.com/nodejs/node/pull/15188 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
42 lines
960 B
JavaScript
42 lines
960 B
JavaScript
// Flags: --expose-http2
|
|
'use strict';
|
|
|
|
const common = require('../common');
|
|
if (!common.hasCrypto)
|
|
common.skip('missing crypto');
|
|
const h2 = require('http2');
|
|
|
|
const serverTimeout = common.platformTimeout(200);
|
|
const callTimeout = common.platformTimeout(10);
|
|
|
|
const server = h2.createServer();
|
|
server.timeout = serverTimeout;
|
|
|
|
server.on('request', (req, res) => res.end());
|
|
server.on('timeout', common.mustNotCall());
|
|
|
|
server.listen(0, common.mustCall(() => {
|
|
const port = server.address().port;
|
|
|
|
const url = `http://localhost:${port}`;
|
|
const client = h2.connect(url);
|
|
makeReq(40);
|
|
|
|
function makeReq(attempts) {
|
|
const request = client.request({
|
|
':path': '/foobar',
|
|
':method': 'GET',
|
|
':scheme': 'http',
|
|
':authority': `localhost:${port}`,
|
|
});
|
|
request.end();
|
|
|
|
if (attempts) {
|
|
setTimeout(() => makeReq(attempts - 1), callTimeout);
|
|
} else {
|
|
server.close();
|
|
client.destroy();
|
|
}
|
|
}
|
|
}));
|