UNPKG

2.79 kBJavaScriptView Raw
1/* global describe, it */
2
3var exec = require('child_process').exec,
4 assert = require('assert')
5
6require('chai').should()
7require('tap').mochaGlobals()
8
9var onSignalExit = require('../')
10
11describe('all-signals-integration-test', function () {
12
13 // These are signals that are aliases for other signals, so
14 // the result will sometimes be one of the others. For these,
15 // we just verify that we GOT a signal, not what it is.
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 // Exhaustively test every signal, and a few numbers.
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 // travis has issues with SIGUSR1 on Node 0.x.10.
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 // travis has issues with SIGUSR1 on Node 0.x.10.
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})