1 |
|
2 |
|
3 | var exec = require('child_process').exec,
|
4 | assert = require('assert')
|
5 |
|
6 | require('chai').should()
|
7 | require('tap').mochaGlobals()
|
8 |
|
9 | var onSignalExit = require('../')
|
10 |
|
11 | describe('all-signals-integration-test', function () {
|
12 |
|
13 |
|
14 |
|
15 |
|
16 | function weirdSignal (sig) {
|
17 | return sig === 'SIGIOT' ||
|
18 | sig === 'SIGIO' ||
|
19 | sig === 'SIGSYS' ||
|
20 | sig === 'SIGIOT' ||
|
21 | sig === 'SIGABRT' ||
|
22 | sig === 'SIGPOLL' ||
|
23 | sig === 'SIGUNUSED'
|
24 | }
|
25 |
|
26 |
|
27 | var signals = onSignalExit.signals()
|
28 | signals.concat('', 0, 1, 2, 3, 54).forEach(function (sig) {
|
29 | var node = process.execPath
|
30 | var js = require.resolve('./fixtures/exiter.js')
|
31 | it('exits properly: ' + sig, function (done) {
|
32 |
|
33 | if (process.env.TRAVIS && sig === 'SIGUSR1') return done()
|
34 |
|
35 | exec(node + ' ' + js + ' ' + sig, function (err, stdout, stderr) {
|
36 | if (sig) {
|
37 | assert(err)
|
38 | if (!isNaN(sig)) {
|
39 | assert.equal(err.code, sig)
|
40 | } else if (!weirdSignal(sig)) {
|
41 | if (!process.env.TRAVIS) err.signal.should.equal(sig)
|
42 | } else if (sig) {
|
43 | if (!process.env.TRAVIS) assert(err.signal)
|
44 | }
|
45 | } else {
|
46 | assert.ifError(err)
|
47 | }
|
48 |
|
49 | try {
|
50 | var data = JSON.parse(stdout)
|
51 | } catch (er) {
|
52 | console.error('invalid json: %j', stdout, stderr)
|
53 | throw er
|
54 | }
|
55 |
|
56 | if (weirdSignal(sig)) {
|
57 | data.wanted[1] = true
|
58 | data.found[1] = !!data.found[1]
|
59 | }
|
60 | assert.deepEqual(data.found, data.wanted)
|
61 | done()
|
62 | })
|
63 | })
|
64 | })
|
65 |
|
66 | signals.forEach(function (sig) {
|
67 | var node = process.execPath
|
68 | var js = require.resolve('./fixtures/parent.js')
|
69 | it('exits properly: (external sig) ' + sig, function (done) {
|
70 |
|
71 | if (process.env.TRAVIS && sig === 'SIGUSR1') return done()
|
72 |
|
73 | var cmd = node + ' ' + js + ' ' + sig
|
74 | exec(cmd, function (err, stdout, stderr) {
|
75 | assert.ifError(err)
|
76 | try {
|
77 | var data = JSON.parse(stdout)
|
78 | } catch (er) {
|
79 | console.error('invalid json: %j', stdout, stderr)
|
80 | throw er
|
81 | }
|
82 |
|
83 | if (weirdSignal(sig)) {
|
84 | data.wanted[1] = true
|
85 | data.found[1] = !!data.found[1]
|
86 | data.external[1] = !!data.external[1]
|
87 | }
|
88 | assert.deepEqual(data.found, data.wanted)
|
89 | assert.deepEqual(data.external, data.wanted)
|
90 | done()
|
91 | })
|
92 | })
|
93 | })
|
94 | })
|