Skip to content

Commit

Permalink
test: simplify test-gc-{http-client,net}-*
Browse files Browse the repository at this point in the history
Instead of sending/creating a fixed number of requests/connections,
detect when GC has started and stop sending requests/creating
connections at that point.

Refs: 47ecf2060343
Refs: 7ce8403ef1a6
  • Loading branch information
lpinca committed Apr 28, 2022
1 parent fc485a9 commit 8d240e1
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 50 deletions.
36 changes: 22 additions & 14 deletions test/parallel/test-gc-http-client-connaborted.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,27 +5,27 @@

const common = require('../common');
const onGC = require('../common/ongc');

const http = require('http');
const todo = 500;
const os = require('os');

const cpus = os.cpus().length;
let createClients = true;
let done = 0;
let count = 0;
let countGC = 0;

console.log(`We should do ${todo} requests`);

function serverHandler(req, res) {
res.connection.destroy();
}

const server = http.createServer(serverHandler);
server.listen(0, common.mustCall(() => {
for (let i = 0; i < 10; i++)
getall();
for (let i = 0; i < cpus; i++)
getAll();
}));

function getall() {
if (count >= todo)
function getAll() {
if (!createClients)
return;

const req = http.get({
Expand All @@ -37,7 +37,7 @@ function getall() {
count++;
onGC(req, { ongc });

setImmediate(getall);
setImmediate(getAll);
}

function cb(res) {
Expand All @@ -48,11 +48,19 @@ function ongc() {
countGC++;
}

setInterval(status, 100).unref();
setImmediate(status);

function status() {
global.gc();
console.log('Done: %d/%d', done, todo);
console.log('Collected: %d/%d', countGC, count);
if (countGC === todo) server.close();
if (done > 0) {
createClients = false;
global.gc();
console.log(`done/collected/total: ${done}/${countGC}/${count}`);
if (countGC === count) {
server.close();
} else {
setImmediate(status);
}
} else {
setImmediate(status);
}
}
47 changes: 27 additions & 20 deletions test/parallel/test-gc-http-client-timeout.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,28 +5,29 @@

const common = require('../common');
const onGC = require('../common/ongc');
const http = require('http');
const os = require('os');

function serverHandler(req, res) {
req.resume();
res.flushHeaders();

setTimeout(function() {
req.resume();
res.writeHead(200);
res.end('hello\n');
}, 100);
}

const http = require('http');
const todo = 300;
const cpus = os.cpus().length;
let createClients = true;
let done = 0;
let count = 0;
let countGC = 0;

console.log(`We should do ${todo} requests`);

const server = http.createServer(serverHandler);
server.listen(0, common.mustCall(getall));
server.listen(0, common.mustCall(getAll));

function getall() {
if (count >= todo)
function getAll() {
if (!createClients)
return;

const req = http.get({
Expand All @@ -35,18 +36,16 @@ function getall() {
port: server.address().port
}, cb);

req.setTimeout(10, function() {
console.log('timeout (expected)');
});
req.setTimeout(10, common.mustCall());

count++;
onGC(req, { ongc });

setImmediate(getall);
setImmediate(getAll);
}

for (let i = 0; i < 10; i++)
getall();
for (let i = 0; i < cpus; i++)
getAll();

function cb(res) {
res.resume();
Expand All @@ -57,11 +56,19 @@ function ongc() {
countGC++;
}

setInterval(status, 100).unref();
setImmediate(status);

function status() {
global.gc();
console.log('Done: %d/%d', done, todo);
console.log('Collected: %d/%d', countGC, count);
if (countGC === todo) server.close();
if (done > 0) {
createClients = false;
global.gc();
console.log(`done/collected/total: ${done}/${countGC}/${count}`);
if (countGC === count) {
server.close();
} else {
setImmediate(status);
}
} else {
setImmediate(status);
}
}
40 changes: 24 additions & 16 deletions test/parallel/test-gc-net-timeout.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@

require('../common');
const onGC = require('../common/ongc');
const assert = require('assert');
const net = require('net');
const os = require('os');

function serverHandler(sock) {
sock.setTimeout(120000);
Expand All @@ -23,20 +26,17 @@ function serverHandler(sock) {
}, 100);
}

const net = require('net');
const assert = require('assert');
const todo = 500;
const cpus = os.cpus().length;
let createClients = true;
let done = 0;
let count = 0;
let countGC = 0;

console.log(`We should do ${todo} requests`);

const server = net.createServer(serverHandler);
server.listen(0, getall);
server.listen(0, getAll);

function getall() {
if (count >= todo)
function getAll() {
if (!createClients)
return;

const req = net.connect(server.address().port);
Expand All @@ -49,21 +49,29 @@ function getall() {
count++;
onGC(req, { ongc });

setImmediate(getall);
setImmediate(getAll);
}

for (let i = 0; i < 10; i++)
getall();
for (let i = 0; i < cpus; i++)
getAll();

function ongc() {
countGC++;
}

setInterval(status, 100).unref();
setImmediate(status);

function status() {
global.gc();
console.log('Done: %d/%d', done, todo);
console.log('Collected: %d/%d', countGC, count);
if (countGC === todo) server.close();
if (done > 0) {
createClients = false;
global.gc();
console.log(`done/collected/total: ${done}/${countGC}/${count}`);
if (countGC === count) {
server.close();
} else {
setImmediate(status);
}
} else {
setImmediate(status);
}
}

0 comments on commit 8d240e1

Please sign in to comment.