From 54a266c8781a4f5a96be910ac800aa2fb2b850e1 Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Mon, 2 Dec 2019 05:21:37 -0800 Subject: [PATCH] test: increase debugging information in subprocess test Refs: https://github.com/nodejs/node/issues/25988#issuecomment-560394046 PR-URL: https://github.com/nodejs/node/pull/30761 Reviewed-By: Gireesh Punathil Reviewed-By: Colin Ihrig Reviewed-By: Anna Henningsen Reviewed-By: Luigi Pinca --- test/parallel/test-child-process-pipe-dataflow.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/test/parallel/test-child-process-pipe-dataflow.js b/test/parallel/test-child-process-pipe-dataflow.js index abaec73f3ea507..bc5e4e02fdf4e9 100644 --- a/test/parallel/test-child-process-pipe-dataflow.js +++ b/test/parallel/test-child-process-pipe-dataflow.js @@ -37,6 +37,14 @@ const MB = KB * KB; cat.stdout._handle.readStart = common.mustNotCall(); grep.stdout._handle.readStart = common.mustNotCall(); + // Keep an array of error codes and assert on them during process exit. This + // is because stdio can still be open when a child process exits, and we don't + // want to lose information about what caused the error. + const errors = []; + process.on('exit', () => { + assert.deepStrictEqual(errors, []); + }); + [cat, grep, wc].forEach((child, index) => { const errorHandler = (thing, type) => { // Don't want to assert here, as we might miss error code info. @@ -46,7 +54,9 @@ const MB = KB * KB; child.stderr.on('data', (d) => { errorHandler(d, 'data'); }); child.on('error', (err) => { errorHandler(err, 'error'); }); child.on('exit', common.mustCall((code) => { - assert.strictEqual(code, 0, `child ${index} exited with code ${code}`); + if (code !== 0) { + errors.push(`child ${index} exited with code ${code}`); + } })); });