test: ensure _handle property existence
authorRich Trott <rtrott@gmail.com>
Sat, 26 Mar 2016 22:26:15 +0000 (15:26 -0700)
committerMyles Borins <mborins@us.ibm.com>
Mon, 11 Apr 2016 15:17:25 +0000 (11:17 -0400)
`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 <fishrock123@rocketmail.com>
test/parallel/test-stdout-close-unref.js

index 37ab498..67c6141 100644 (file)
@@ -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;
+}));