From: Alexis Campailla Date: Wed, 9 Sep 2015 13:19:24 +0000 (+0200) Subject: test: add test-spawn-cmd-named-pipe X-Git-Tag: v4.1.1~19 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=fa08d1d8a157d84db2834c018294ca2fc6996b1f;p=platform%2Fupstream%2Fnodejs.git test: add test-spawn-cmd-named-pipe Adding a Windows test to verify that a node process spawned via cmd with named pipes can access its stdio streams. Ref: https://github.com/nodejs/node-v0.x-archive/issues/7345 PR-URL: https://github.com/nodejs/node/pull/2770 Reviewed-By: cjihrig - Colin Ihrig Reviewed-By: thefourtheye - Sakthipriyan Vairamani Reviewed-By: evanlucas - Evan Lucas --- diff --git a/test/parallel/test-spawn-cmd-named-pipe.js b/test/parallel/test-spawn-cmd-named-pipe.js new file mode 100644 index 0000000..c664f7f --- /dev/null +++ b/test/parallel/test-spawn-cmd-named-pipe.js @@ -0,0 +1,58 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); + +// This test is intended for Windows only +if (!common.isWindows) { + console.log('1..0 # Skipped: this test is Windows-specific.'); + return; +} + +if (!process.argv[2]) { + // parent + const net = require('net'); + const spawn = require('child_process').spawn; + const path = require('path'); + + const pipeNamePrefix = path.basename(__filename) + '.' + process.pid; + const stdinPipeName = '\\\\.\\pipe\\' + pipeNamePrefix + '.stdin'; + const stdoutPipeName = '\\\\.\\pipe\\' + pipeNamePrefix + '.stdout'; + + const stdinPipeServer = net.createServer(function(c) { + c.on('end', common.mustCall(function() { + })); + c.end('hello'); + }); + stdinPipeServer.listen(stdinPipeName); + + const output = []; + + const stdoutPipeServer = net.createServer(function(c) { + c.on('data', function(x) { + output.push(x); + }); + c.on('end', common.mustCall(function() { + assert.strictEqual(output.join(''), 'hello'); + })); + }); + stdoutPipeServer.listen(stdoutPipeName); + + const comspec = process.env['comspec']; + if (!comspec || comspec.length === 0) { + assert.fail('Failed to get COMSPEC'); + } + + const args = ['/c', process.execPath, __filename, 'child', + '<', stdinPipeName, '>', stdoutPipeName]; + + const child = spawn(comspec, args); + + child.on('exit', common.mustCall(function(exitCode) { + stdinPipeServer.close(); + stdoutPipeServer.close(); + assert.strictEqual(exitCode, 0); + })); +} else { + // child + process.stdin.pipe(process.stdout); +}