From 41a063f0675c923a0d1a41f087b4adf62eb8fdf2 Mon Sep 17 00:00:00 2001 From: Bradley Meck Date: Mon, 27 Jul 2015 11:29:52 -0500 Subject: [PATCH] test: test preloaded modules using stdin or repl This test fails on Solaris, see the PR for discussion. PR-URL: https://github.com/nodejs/node/pull/2253 Reviewed-By: Jeremiah Senkpiel --- test/parallel/test-preload.js | 75 +++++++++++++++++++++++++++-------- 1 file changed, 59 insertions(+), 16 deletions(-) diff --git a/test/parallel/test-preload.js b/test/parallel/test-preload.js index e7d89d124c798c..2686b3c003ff3f 100644 --- a/test/parallel/test-preload.js +++ b/test/parallel/test-preload.js @@ -1,12 +1,19 @@ 'use strict'; + const common = require('../common'); const assert = require('assert'); const path = require('path'); -const child_process = require('child_process'); +const childProcess = require('child_process'); + +// Refs: https://github.com/nodejs/node/pull/2253 +if (common.isSunOS) { + console.log('1..0 # Skipped: unreliable on SunOS'); + return; +} -var nodeBinary = process.argv[0]; +const nodeBinary = process.argv[0]; -var preloadOption = function(preloads) { +const preloadOption = function(preloads) { var option = ''; preloads.forEach(function(preload, index) { option += '-r ' + preload + ' '; @@ -14,18 +21,18 @@ var preloadOption = function(preloads) { return option; }; -var fixture = function(name) { +const fixture = function(name) { return path.join(__dirname, '../fixtures/' + name); }; -var fixtureA = fixture('printA.js'); -var fixtureB = fixture('printB.js'); -var fixtureC = fixture('printC.js'); +const fixtureA = fixture('printA.js'); +const fixtureB = fixture('printB.js'); +const fixtureC = fixture('printC.js'); const fixtureD = fixture('define-global.js'); -var fixtureThrows = fixture('throws_error4.js'); +const fixtureThrows = fixture('throws_error4.js'); // test preloading a single module works -child_process.exec(nodeBinary + ' ' +childProcess.exec(nodeBinary + ' ' + preloadOption([fixtureA]) + ' ' + fixtureB, function(err, stdout, stderr) { @@ -34,7 +41,7 @@ child_process.exec(nodeBinary + ' ' }); // test preloading multiple modules works -child_process.exec(nodeBinary + ' ' +childProcess.exec(nodeBinary + ' ' + preloadOption([fixtureA, fixtureB]) + ' ' + fixtureC, function(err, stdout, stderr) { @@ -43,7 +50,7 @@ child_process.exec(nodeBinary + ' ' }); // test that preloading a throwing module aborts -child_process.exec(nodeBinary + ' ' +childProcess.exec(nodeBinary + ' ' + preloadOption([fixtureA, fixtureThrows]) + ' ' + fixtureB, function(err, stdout, stderr) { @@ -55,7 +62,7 @@ child_process.exec(nodeBinary + ' ' }); // test that preload can be used with --eval -child_process.exec(nodeBinary + ' ' +childProcess.exec(nodeBinary + ' ' + preloadOption([fixtureA]) + '-e "console.log(\'hello\');"', function(err, stdout, stderr) { @@ -63,9 +70,45 @@ child_process.exec(nodeBinary + ' ' assert.equal(stdout, 'A\nhello\n'); }); +// test that preload can be used with stdin +const stdinProc = childProcess.spawn( + nodeBinary, + ['--require', fixtureA], + {stdio: 'pipe'} +); +stdinProc.stdin.end('console.log(\'hello\');'); +var stdinStdout = ''; +stdinProc.stdout.on('data', function(d) { + stdinStdout += d; +}); +stdinProc.on('exit', function(code) { + assert.equal(code, 0); + assert.equal(stdinStdout, 'A\nhello\n'); +}); + +// test that preload can be used with repl +const replProc = childProcess.spawn( + nodeBinary, + ['-i', '--require', fixtureA], + {stdio: 'pipe'} +); +replProc.stdin.end('.exit\n'); +var replStdout = ''; +replProc.stdout.on('data', function(d) { + replStdout += d; +}); +replProc.on('exit', function(code) { + assert.equal(code, 0); + const output = [ + 'A', + '> ' + ].join('\n'); + assert.equal(replStdout, output); +}); + // test that preload placement at other points in the cmdline // also test that duplicated preload only gets loaded once -child_process.exec(nodeBinary + ' ' +childProcess.exec(nodeBinary + ' ' + preloadOption([fixtureA]) + '-e "console.log(\'hello\');" ' + preloadOption([fixtureA, fixtureB]), @@ -75,7 +118,7 @@ child_process.exec(nodeBinary + ' ' }); // test that preload works with -i -const interactive = child_process.exec(nodeBinary + ' ' +const interactive = childProcess.exec(nodeBinary + ' ' + preloadOption([fixtureD]) + '-i', common.mustCall(function(err, stdout, stderr) { @@ -86,7 +129,7 @@ const interactive = child_process.exec(nodeBinary + ' ' interactive.stdin.write('a\n'); interactive.stdin.write('process.exit()\n'); -child_process.exec(nodeBinary + ' ' +childProcess.exec(nodeBinary + ' ' + '--require ' + fixture('cluster-preload.js') + ' ' + fixture('cluster-preload-test.js'), function(err, stdout, stderr) { @@ -96,7 +139,7 @@ child_process.exec(nodeBinary + ' ' // https://github.com/nodejs/node/issues/1691 process.chdir(path.join(__dirname, '../fixtures/')); -child_process.exec(nodeBinary + ' ' +childProcess.exec(nodeBinary + ' ' + '--expose_debug_as=v8debug ' + '--require ' + fixture('cluster-preload.js') + ' ' + 'cluster-preload-test.js',