var common = require('../common'), assert = require('assert'), path = require('path'), child_process = require('child_process'); var nodeBinary = process.argv[0]; var preloadOption = function(preloads) { var option = ''; preloads.forEach(function(preload, index) { // TODO: randomly pick -r or --require option += '-r ' + preload + ' '; }); return option; } var fixture = function(name) { return path.join(__dirname, '../fixtures/' + name); } var fixtureA = fixture('printA.js'); var fixtureB = fixture('printB.js'); var fixtureC = fixture('printC.js') var fixtureThrows = fixture('throws_error4.js'); // test preloading a single module works child_process.exec(nodeBinary + ' ' + preloadOption([fixtureA]) + ' ' + fixtureB, function(err, stdout, stderr) { if (err) throw err; assert.equal(stdout, 'A\nB\n'); }); // test preloading multiple modules works child_process.exec(nodeBinary + ' ' + preloadOption([fixtureA, fixtureB]) + ' ' + fixtureC, function(err, stdout, stderr) { if (err) throw err; assert.equal(stdout, 'A\nB\nC\n'); }); // test that preloading a throwing module aborts child_process.exec(nodeBinary + ' ' + preloadOption([fixtureA, fixtureThrows]) + ' ' + fixtureB, function(err, stdout, stderr) { if (err) { assert.equal(stdout, 'A\n'); } else { throw new Error('Preload should have failed'); } }); // test that preload can be used with --eval child_process.exec(nodeBinary + ' ' + preloadOption([fixtureA]) + '-e "console.log(\'hello\');"', function(err, stdout, stderr) { if (err) throw err; assert.equal(stdout, 'A\nhello\n'); }); // test that preload placement at other points in the cmdline // also test that duplicated preload only gets loaded once child_process.exec(nodeBinary + ' ' + preloadOption([fixtureA]) + '-e "console.log(\'hello\');" ' + preloadOption([fixtureA, fixtureB]), function(err, stdout, stderr) { if (err) throw err; assert.equal(stdout, 'A\nB\nhello\n'); }); child_process.exec(nodeBinary + ' ' + '--require ' + fixture('cluster-preload.js') + ' ' + fixture('cluster-preload-test.js'), function(err, stdout, stderr) { if (err) throw err; assert.ok(/worker terminated with code 43/.test(stdout)); });