From a20c70029075cab18e4ff4d27dfd95b7eda2b268 Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Sat, 26 Mar 2016 15:26:15 -0700 Subject: [PATCH] test: ensure _handle property existence `test-stdtout-close-unref.js` will fail if `process.stdin._handle` does not exist. On UNIX-like operating systems, you can see this failure this way: ./node test/parallel/test-stdout-close-unref.js < /dev/null This issue has been experienced by @bengl and @drewfish in a Docker container. I'm not sure why they are experiencing it in their environment, but since it is possible that the `_handle` property does not exist, let's use `child_process.spawn()` to make sure it exists. PR-URL: https://github.com/nodejs/node/pull/5916 Reviewed-By: Jeremiah Senkpiel --- test/parallel/test-stdout-close-unref.js | 38 ++++++++++++++++-------- 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/test/parallel/test-stdout-close-unref.js b/test/parallel/test-stdout-close-unref.js index 37ab4987eebcaa..67c6141c963088 100644 --- a/test/parallel/test-stdout-close-unref.js +++ b/test/parallel/test-stdout-close-unref.js @@ -1,16 +1,30 @@ 'use strict'; -require('../common'); -var assert = require('assert'); +const common = require('../common'); +const assert = require('assert'); +const spawn = require('child_process').spawn; -var errs = 0; +if (process.argv[2] === 'child') { + var errs = 0; -process.stdin.resume(); -process.stdin._handle.close(); -process.stdin._handle.unref(); // Should not segfault. -process.stdin.on('error', function(err) { - errs++; -}); + process.stdin.resume(); + process.stdin._handle.close(); + process.stdin._handle.unref(); // Should not segfault. + process.stdin.on('error', function(err) { + errs++; + }); -process.on('exit', function() { - assert.strictEqual(errs, 1); -}); + process.on('exit', function() { + assert.strictEqual(errs, 1); + }); + return; +} + +// Use spawn so that we can be sure that stdin has a _handle property. +// Refs: https://github.com/nodejs/node/pull/5916 +const proc = spawn(process.execPath, [__filename, 'child'], { stdio: 'pipe' }); + +proc.stderr.pipe(process.stderr); +proc.on('exit', common.mustCall(function(exitCode) { + if (exitCode !== 0) + process.exitCode = exitCode; +}));