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: #23089

PR-URL: #24943
Reviewed-By: Colin Ihrig <[email protected]>
  • Loading branch information
Trott committed Dec 17, 2018
1 parent 4b96a2a commit 47ecf20
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 47ecf20

Please sign in to comment.