From d9425733931d86b41cbe0cb7f7f9940af4cbe8a5 Mon Sep 17 00:00:00 2001 From: Benjamin Coe Date: Fri, 4 May 2018 13:45:57 -0700 Subject: [PATCH] test: add regression test for #11257 Refs: https://github.com/nodejs/node/issues/11257 PR-URL: https://github.com/nodejs/node/pull/20391 Reviewed-By: Anatoli Papirovski Reviewed-By: James M Snell Reviewed-By: Michael Dawson Reviewed-By: Tiancheng "Timothy" Gu --- test/parallel/test-stdio-pipe-stderr.js | 37 +++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 test/parallel/test-stdio-pipe-stderr.js diff --git a/test/parallel/test-stdio-pipe-stderr.js b/test/parallel/test-stdio-pipe-stderr.js new file mode 100644 index 00000000000000..06e93429d03f6d --- /dev/null +++ b/test/parallel/test-stdio-pipe-stderr.js @@ -0,0 +1,37 @@ +'use strict'; +require('../common'); +const tmpdir = require('../common/tmpdir'); +const assert = require('assert'); +const fs = require('fs'); +const join = require('path').join; +const spawn = require('child_process').spawnSync; + +// Test that invoking node with require, and piping stderr to file, +// does not result in exception, +// see: https://github.com/nodejs/node/issues/11257 + +tmpdir.refresh(); +const fakeModulePath = join(tmpdir.path, 'batman.js'); +const stderrOutputPath = join(tmpdir.path, 'stderr-output.txt'); +// we need to redirect stderr to a file to produce #11257 +const stream = fs.createWriteStream(stderrOutputPath); + +// the error described in #11257 only happens when we require a +// non-built-in module. +fs.writeFileSync(fakeModulePath, '', 'utf8'); + +stream.on('open', () => { + spawn(process.execPath, { + input: `require("${fakeModulePath.replace(/\\/g, '/')}")`, + stdio: ['pipe', 'pipe', stream] + }); + const stderr = fs.readFileSync(stderrOutputPath, 'utf8').trim(); + assert.strictEqual( + stderr, + '', + `piping stderr to file should not result in exception: ${stderr}` + ); + stream.end(); + fs.unlinkSync(stderrOutputPath); + fs.unlinkSync(fakeModulePath); +});