Files
node/test/common/benchmark.js
T
Rich Trott b72de3d508 test: check that benchmark tests are minimal
Check that benchmark tests are not running longer than necessary by
confirming that they only produce one set of configs to report on per
benchmark file.

PR-URL: https://github.com/nodejs/node/pull/21046
Reviewed-By: Anatoli Papirovski <apapirovski@mac.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
2018-06-19 10:37:39 -07:00

48 lines
1.4 KiB
JavaScript

/* eslint-disable node-core/required-modules */
'use strict';
const assert = require('assert');
const fork = require('child_process').fork;
const path = require('path');
const runjs = path.join(__dirname, '..', '..', 'benchmark', 'run.js');
function runBenchmark(name, args, env) {
const argv = [];
for (let i = 0; i < args.length; i++) {
argv.push('--set');
argv.push(args[i]);
}
argv.push(name);
const mergedEnv = Object.assign({}, process.env, env);
const child = fork(runjs, argv, { env: mergedEnv, stdio: 'pipe' });
child.stdout.setEncoding('utf8');
let stdout = '';
child.stdout.on('data', (line) => {
stdout += line;
});
child.on('exit', (code, signal) => {
assert.strictEqual(code, 0);
assert.strictEqual(signal, null);
// This bit makes sure that each benchmark file is being sent settings such
// that the benchmark file runs just one set of options. This helps keep the
// benchmark tests from taking a long time to run. Therefore, each benchmark
// file should result in three lines of output: a blank line, a line with
// the name of the benchmark file, and a line with the only results that we
// get from testing the benchmark file.
assert.ok(
/^(?:\n.+?\n.+?\n)+$/.test(stdout),
`benchmark file not running exactly one configuration in test: ${stdout}`
);
});
}
module.exports = runBenchmark;