Skip to content

Commit

Permalink
test: remove magic numbers in test-gc-http-client-onerror
Browse files Browse the repository at this point in the history
Remove magic numbers (500, 10, 100) from the test. Instead, detect when
GC has started and stop sending requests at that point.

On my laptop, this results in 16 or 20 requests per run instead of 500.

Fixes: nodejs#23089

PR-URL: nodejs#24943
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
  • Loading branch information
Trott authored and refack committed Jan 10, 2019
1 parent d2654df commit 423c533
Showing 1 changed file with 30 additions and 23 deletions.
53 changes: 30 additions & 23 deletions test/parallel/test-gc-http-client-onerror.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,45 +6,44 @@
const common = require('../common');
const onGC = require('../common/ongc');

const cpus = require('os').cpus().length;

function serverHandler(req, res) {
req.resume();
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello World\n');
}

const http = require('http');
const todo = 500;
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(() => {
for (let i = 0; i < 10; i++)
getall();
for (let i = 0; i < cpus; i++)
getAll();
}));

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

const req = http.get({
hostname: 'localhost',
pathname: '/',
port: server.address().port
}, cb).on('error', onerror);
function getAll() {
if (createClients) {
const req = http.get({
hostname: 'localhost',
pathname: '/',
port: server.address().port
}, cb).on('error', onerror);

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

setImmediate(getall);
setImmediate(getAll);
}
}

function cb(res) {
res.resume();
done += 1;
done++;
}

function onerror(err) {
Expand All @@ -55,11 +54,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);
}
}

0 comments on commit 423c533

Please sign in to comment.