From 216cb3f6e92b65876ad8e7f11c7cce2f8d87b3c4 Mon Sep 17 00:00:00 2001 From: Refael Ackermann Date: Sun, 4 Jun 2017 14:25:44 -0400 Subject: [PATCH] test,benchmark: stabilize child-process MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit also some cleanup PR-URL: https://github.com/nodejs/node/pull/13457 Refs: https://github.com/nodejs/node/issues/12817 Reviewed-By: Tobias Nießen --- .../child-process-exec-stdout.js | 39 ++++++++++--------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/benchmark/child_process/child-process-exec-stdout.js b/benchmark/child_process/child-process-exec-stdout.js index a30eb92f6ad39a..dcd352cfcf65e7 100644 --- a/benchmark/child_process/child-process-exec-stdout.js +++ b/benchmark/child_process/child-process-exec-stdout.js @@ -1,41 +1,42 @@ 'use strict'; const common = require('../common.js'); +const { exec, execSync } = require('child_process'); +const isWindows = process.platform === 'win32'; var messagesLength = [64, 256, 1024, 4096]; -// Windows does not support that long arguments -if (process.platform !== 'win32') - messagesLength.push(32768); -const bench = common.createBenchmark(main, { +// Windows does not support command lines longer than 8191 characters +if (!isWindows) messagesLength.push(32768); + +const bench = common.createBenchmark(childProcessExecStdout, { len: messagesLength, dur: [5] }); -const child_process = require('child_process'); -const exec = child_process.exec; -function main(conf) { +function childProcessExecStdout(conf) { bench.start(); - const dur = +conf.dur; + const maxDuration = conf.dur * 1000; const len = +conf.len; - const msg = `"${'.'.repeat(len)}"`; - // eslint-disable-next-line no-unescaped-regexp-dot - msg.match(/./); - const options = {'stdio': ['ignore', 'pipe', 'ignore']}; - const child = exec(`yes ${msg}`, options); + const cmd = `yes "${'.'.repeat(len)}"`; + const child = exec(cmd, { 'stdio': ['ignore', 'pipe', 'ignore'] }); var bytes = 0; - child.stdout.on('data', function(msg) { + child.stdout.on('data', (msg) => { bytes += msg.length; }); - setTimeout(function() { + setTimeout(() => { bench.end(bytes); - if (process.platform === 'win32') { - // Sometimes there's a yes.exe process left hanging around on Windows... - child_process.execSync(`taskkill /f /t /pid ${child.pid}`); + if (isWindows) { + // Sometimes there's a yes.exe process left hanging around on Windows. + try { + execSync(`taskkill /f /t /pid ${child.pid}`); + } catch (_) { + // this is a best effort kill. stderr is piped to parent for tracing. + } } else { child.kill(); } - }, dur * 1000); + }, maxDuration); }