mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 21:19:50 +01:00
5b8b924995
"Timeouted" to "Timed out" PR-URL: https://github.com/nodejs/node/pull/41983 Reviewed-By: Richard Lau <rlau@redhat.com> Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: Mestery <mestery@protonmail.com> Reviewed-By: Tobias Nießen <tniessen@tnie.de>
135 lines
3.5 KiB
JavaScript
135 lines
3.5 KiB
JavaScript
'use strict';
|
|
|
|
const common = require('../common');
|
|
const assert = require('assert');
|
|
const http = require('http');
|
|
|
|
{
|
|
// Ensure reuse of successful sockets.
|
|
|
|
const agent = new http.Agent({ keepAlive: true });
|
|
|
|
const server = http.createServer((req, res) => {
|
|
res.end();
|
|
});
|
|
|
|
server.listen(0, common.mustCall(() => {
|
|
let socket;
|
|
http.get({ port: server.address().port, agent })
|
|
.on('response', common.mustCall((res) => {
|
|
socket = res.socket;
|
|
assert(socket);
|
|
res.resume();
|
|
socket.on('free', common.mustCall(() => {
|
|
http.get({ port: server.address().port, agent })
|
|
.on('response', common.mustCall((res) => {
|
|
assert.strictEqual(socket, res.socket);
|
|
assert(socket);
|
|
agent.destroy();
|
|
server.close();
|
|
}));
|
|
}));
|
|
}));
|
|
}));
|
|
}
|
|
|
|
{
|
|
// Ensure that timed-out sockets are not reused.
|
|
|
|
const agent = new http.Agent({ keepAlive: true, timeout: 50 });
|
|
|
|
const server = http.createServer((req, res) => {
|
|
res.end();
|
|
});
|
|
|
|
server.listen(0, common.mustCall(() => {
|
|
http.get({ port: server.address().port, agent })
|
|
.on('response', common.mustCall((res) => {
|
|
const socket = res.socket;
|
|
assert(socket);
|
|
res.resume();
|
|
socket.on('free', common.mustCall(() => {
|
|
socket.on('timeout', common.mustCall(() => {
|
|
http.get({ port: server.address().port, agent })
|
|
.on('response', common.mustCall((res) => {
|
|
assert.notStrictEqual(socket, res.socket);
|
|
assert.strictEqual(socket.destroyed, true);
|
|
agent.destroy();
|
|
server.close();
|
|
}));
|
|
}));
|
|
}));
|
|
}));
|
|
}));
|
|
}
|
|
|
|
{
|
|
// Ensure that destroyed sockets are not reused.
|
|
|
|
const agent = new http.Agent({ keepAlive: true });
|
|
|
|
const server = http.createServer((req, res) => {
|
|
res.end();
|
|
});
|
|
|
|
server.listen(0, common.mustCall(() => {
|
|
let socket;
|
|
http.get({ port: server.address().port, agent })
|
|
.on('response', common.mustCall((res) => {
|
|
socket = res.socket;
|
|
assert(socket);
|
|
res.resume();
|
|
socket.on('free', common.mustCall(() => {
|
|
socket.destroy();
|
|
http.get({ port: server.address().port, agent })
|
|
.on('response', common.mustCall((res) => {
|
|
assert.notStrictEqual(socket, res.socket);
|
|
assert(socket);
|
|
agent.destroy();
|
|
server.close();
|
|
}));
|
|
}));
|
|
}));
|
|
}));
|
|
}
|
|
|
|
{
|
|
// Ensure custom keepSocketAlive timeout is respected
|
|
|
|
const CUSTOM_TIMEOUT = 60;
|
|
const AGENT_TIMEOUT = 50;
|
|
|
|
class CustomAgent extends http.Agent {
|
|
keepSocketAlive(socket) {
|
|
if (!super.keepSocketAlive(socket)) {
|
|
return false;
|
|
}
|
|
|
|
socket.setTimeout(CUSTOM_TIMEOUT);
|
|
return true;
|
|
}
|
|
}
|
|
|
|
const agent = new CustomAgent({ keepAlive: true, timeout: AGENT_TIMEOUT });
|
|
|
|
const server = http.createServer((req, res) => {
|
|
res.end();
|
|
});
|
|
|
|
server.listen(0, common.mustCall(() => {
|
|
http.get({ port: server.address().port, agent })
|
|
.on('response', common.mustCall((res) => {
|
|
const socket = res.socket;
|
|
assert(socket);
|
|
res.resume();
|
|
socket.on('free', common.mustCall(() => {
|
|
socket.on('timeout', common.mustCall(() => {
|
|
assert.strictEqual(socket.timeout, CUSTOM_TIMEOUT);
|
|
agent.destroy();
|
|
server.close();
|
|
}));
|
|
}));
|
|
}));
|
|
}));
|
|
}
|