node/test/parallel/test-child-process-http-socket-leak.js
Ali Ijaz Sheikh c30ef3cbd2 http, http2: remove default server timeout
Timing out and closing the socket after two minutes have elapsed is
surprising and problematic for users. This behavior was specific to
Node.js, and doesn't seem to be common in other language runtimes.

Fixes: https://github.com/nodejs/node/issues/27556

PR-URL: https://github.com/nodejs/node/pull/27558
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Rich Trott <rtrott@gmail.com>
2019-05-09 08:54:04 -07:00

58 lines
1.3 KiB
JavaScript

// Flags: --expose_internals
'use strict';
const common = require('../common');
const assert = require('assert');
const { fork } = require('child_process');
const http = require('http');
if (process.argv[2] === 'child') {
process.once('message', (req, socket) => {
const res = new http.ServerResponse(req);
res.assignSocket(socket);
res.end();
});
process.send('ready');
return;
}
const { kTimeout } = require('internal/timers');
let child;
let socket;
const server = http.createServer(common.mustCall((req, res) => {
const r = {
method: req.method,
headers: req.headers,
path: req.path,
httpVersionMajor: req.httpVersionMajor,
query: req.query,
};
socket = res.socket;
child.send(r, socket);
server.close();
}));
server.listen(0, common.mustCall(() => {
child = fork(__filename, [ 'child' ]);
child.once('message', (msg) => {
assert.strictEqual(msg, 'ready');
const req = http.request({
port: server.address().port,
}, common.mustCall((res) => {
res.on('data', () => {});
res.on('end', common.mustCall(() => {
assert.strictEqual(socket[kTimeout], null);
assert.strictEqual(socket.parser, null);
assert.strictEqual(socket._httpMessage, null);
}));
}));
req.end();
});
}));