summaryrefslogtreecommitdiff
path: root/test/parallel/test-preload.js
blob: f94a7eae942493027c9de98bc484f3efcad7b525 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
'use strict';
require('../common');
const assert = require('assert');
const path = require('path');
const child_process = require('child_process');

var nodeBinary = process.argv[0];

var preloadOption = function(preloads) {
  var option = '';
  preloads.forEach(function(preload, index) {
    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));
  });

// https://github.com/nodejs/node/issues/1691
process.chdir(path.join(__dirname, '../fixtures/'));
child_process.exec(nodeBinary + ' '
  + '--expose_debug_as=v8debug '
  + '--require ' + fixture('cluster-preload.js') + ' '
  + 'cluster-preload-test.js',
  function(err, stdout, stderr) {
    if (err) throw err;
    assert.ok(/worker terminated with code 43/.test(stdout));
  });