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 <fishrock123@rocketmail.com>
This commit is contained in:
parent
118162ee67
commit
41a063f067
@ -1,12 +1,19 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
const common = require('../common');
|
const common = require('../common');
|
||||||
const assert = require('assert');
|
const assert = require('assert');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const child_process = require('child_process');
|
const childProcess = require('child_process');
|
||||||
|
|
||||||
var nodeBinary = process.argv[0];
|
// Refs: https://github.com/nodejs/node/pull/2253
|
||||||
|
if (common.isSunOS) {
|
||||||
|
console.log('1..0 # Skipped: unreliable on SunOS');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
var preloadOption = function(preloads) {
|
const nodeBinary = process.argv[0];
|
||||||
|
|
||||||
|
const preloadOption = function(preloads) {
|
||||||
var option = '';
|
var option = '';
|
||||||
preloads.forEach(function(preload, index) {
|
preloads.forEach(function(preload, index) {
|
||||||
option += '-r ' + preload + ' ';
|
option += '-r ' + preload + ' ';
|
||||||
@ -14,18 +21,18 @@ var preloadOption = function(preloads) {
|
|||||||
return option;
|
return option;
|
||||||
};
|
};
|
||||||
|
|
||||||
var fixture = function(name) {
|
const fixture = function(name) {
|
||||||
return path.join(__dirname, '../fixtures/' + name);
|
return path.join(__dirname, '../fixtures/' + name);
|
||||||
};
|
};
|
||||||
|
|
||||||
var fixtureA = fixture('printA.js');
|
const fixtureA = fixture('printA.js');
|
||||||
var fixtureB = fixture('printB.js');
|
const fixtureB = fixture('printB.js');
|
||||||
var fixtureC = fixture('printC.js');
|
const fixtureC = fixture('printC.js');
|
||||||
const fixtureD = fixture('define-global.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
|
// test preloading a single module works
|
||||||
child_process.exec(nodeBinary + ' '
|
childProcess.exec(nodeBinary + ' '
|
||||||
+ preloadOption([fixtureA]) + ' '
|
+ preloadOption([fixtureA]) + ' '
|
||||||
+ fixtureB,
|
+ fixtureB,
|
||||||
function(err, stdout, stderr) {
|
function(err, stdout, stderr) {
|
||||||
@ -34,7 +41,7 @@ child_process.exec(nodeBinary + ' '
|
|||||||
});
|
});
|
||||||
|
|
||||||
// test preloading multiple modules works
|
// test preloading multiple modules works
|
||||||
child_process.exec(nodeBinary + ' '
|
childProcess.exec(nodeBinary + ' '
|
||||||
+ preloadOption([fixtureA, fixtureB]) + ' '
|
+ preloadOption([fixtureA, fixtureB]) + ' '
|
||||||
+ fixtureC,
|
+ fixtureC,
|
||||||
function(err, stdout, stderr) {
|
function(err, stdout, stderr) {
|
||||||
@ -43,7 +50,7 @@ child_process.exec(nodeBinary + ' '
|
|||||||
});
|
});
|
||||||
|
|
||||||
// test that preloading a throwing module aborts
|
// test that preloading a throwing module aborts
|
||||||
child_process.exec(nodeBinary + ' '
|
childProcess.exec(nodeBinary + ' '
|
||||||
+ preloadOption([fixtureA, fixtureThrows]) + ' '
|
+ preloadOption([fixtureA, fixtureThrows]) + ' '
|
||||||
+ fixtureB,
|
+ fixtureB,
|
||||||
function(err, stdout, stderr) {
|
function(err, stdout, stderr) {
|
||||||
@ -55,7 +62,7 @@ child_process.exec(nodeBinary + ' '
|
|||||||
});
|
});
|
||||||
|
|
||||||
// test that preload can be used with --eval
|
// test that preload can be used with --eval
|
||||||
child_process.exec(nodeBinary + ' '
|
childProcess.exec(nodeBinary + ' '
|
||||||
+ preloadOption([fixtureA])
|
+ preloadOption([fixtureA])
|
||||||
+ '-e "console.log(\'hello\');"',
|
+ '-e "console.log(\'hello\');"',
|
||||||
function(err, stdout, stderr) {
|
function(err, stdout, stderr) {
|
||||||
@ -63,9 +70,45 @@ child_process.exec(nodeBinary + ' '
|
|||||||
assert.equal(stdout, 'A\nhello\n');
|
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
|
// test that preload placement at other points in the cmdline
|
||||||
// also test that duplicated preload only gets loaded once
|
// also test that duplicated preload only gets loaded once
|
||||||
child_process.exec(nodeBinary + ' '
|
childProcess.exec(nodeBinary + ' '
|
||||||
+ preloadOption([fixtureA])
|
+ preloadOption([fixtureA])
|
||||||
+ '-e "console.log(\'hello\');" '
|
+ '-e "console.log(\'hello\');" '
|
||||||
+ preloadOption([fixtureA, fixtureB]),
|
+ preloadOption([fixtureA, fixtureB]),
|
||||||
@ -75,7 +118,7 @@ child_process.exec(nodeBinary + ' '
|
|||||||
});
|
});
|
||||||
|
|
||||||
// test that preload works with -i
|
// test that preload works with -i
|
||||||
const interactive = child_process.exec(nodeBinary + ' '
|
const interactive = childProcess.exec(nodeBinary + ' '
|
||||||
+ preloadOption([fixtureD])
|
+ preloadOption([fixtureD])
|
||||||
+ '-i',
|
+ '-i',
|
||||||
common.mustCall(function(err, stdout, stderr) {
|
common.mustCall(function(err, stdout, stderr) {
|
||||||
@ -86,7 +129,7 @@ const interactive = child_process.exec(nodeBinary + ' '
|
|||||||
interactive.stdin.write('a\n');
|
interactive.stdin.write('a\n');
|
||||||
interactive.stdin.write('process.exit()\n');
|
interactive.stdin.write('process.exit()\n');
|
||||||
|
|
||||||
child_process.exec(nodeBinary + ' '
|
childProcess.exec(nodeBinary + ' '
|
||||||
+ '--require ' + fixture('cluster-preload.js') + ' '
|
+ '--require ' + fixture('cluster-preload.js') + ' '
|
||||||
+ fixture('cluster-preload-test.js'),
|
+ fixture('cluster-preload-test.js'),
|
||||||
function(err, stdout, stderr) {
|
function(err, stdout, stderr) {
|
||||||
@ -96,7 +139,7 @@ child_process.exec(nodeBinary + ' '
|
|||||||
|
|
||||||
// https://github.com/nodejs/node/issues/1691
|
// https://github.com/nodejs/node/issues/1691
|
||||||
process.chdir(path.join(__dirname, '../fixtures/'));
|
process.chdir(path.join(__dirname, '../fixtures/'));
|
||||||
child_process.exec(nodeBinary + ' '
|
childProcess.exec(nodeBinary + ' '
|
||||||
+ '--expose_debug_as=v8debug '
|
+ '--expose_debug_as=v8debug '
|
||||||
+ '--require ' + fixture('cluster-preload.js') + ' '
|
+ '--require ' + fixture('cluster-preload.js') + ' '
|
||||||
+ 'cluster-preload-test.js',
|
+ 'cluster-preload-test.js',
|
||||||
|
Loading…
x
Reference in New Issue
Block a user