95 lines
2.7 KiB
JavaScript
95 lines
2.7 KiB
JavaScript
|
/* global describe, it */
|
||
|
|
||
|
var exec = require('child_process').exec,
|
||
|
assert = require('assert')
|
||
|
|
||
|
require('chai').should()
|
||
|
require('tap').mochaGlobals()
|
||
|
|
||
|
var onSignalExit = require('../')
|
||
|
|
||
|
describe('all-signals-integration-test', function () {
|
||
|
|
||
|
// These are signals that are aliases for other signals, so
|
||
|
// the result will sometimes be one of the others. For these,
|
||
|
// we just verify that we GOT a signal, not what it is.
|
||
|
function weirdSignal (sig) {
|
||
|
return sig === 'SIGIOT' ||
|
||
|
sig === 'SIGIO' ||
|
||
|
sig === 'SIGSYS' ||
|
||
|
sig === 'SIGIOT' ||
|
||
|
sig === 'SIGABRT' ||
|
||
|
sig === 'SIGPOLL' ||
|
||
|
sig === 'SIGUNUSED'
|
||
|
}
|
||
|
|
||
|
// Exhaustively test every signal, and a few numbers.
|
||
|
var signals = onSignalExit.signals()
|
||
|
signals.concat('', 0, 1, 2, 3, 54).forEach(function (sig) {
|
||
|
var node = process.execPath
|
||
|
var js = require.resolve('./fixtures/exiter.js')
|
||
|
it('exits properly: ' + sig, function (done) {
|
||
|
// travis has issues with SIGUSR1 on Node 0.x.10.
|
||
|
if (process.env.TRAVIS && sig === 'SIGUSR1') return done()
|
||
|
|
||
|
exec(node + ' ' + js + ' ' + sig, function (err, stdout, stderr) {
|
||
|
if (sig) {
|
||
|
assert(err)
|
||
|
if (!isNaN(sig)) {
|
||
|
assert.equal(err.code, sig)
|
||
|
} else if (!weirdSignal(sig)) {
|
||
|
if (!process.env.TRAVIS) err.signal.should.equal(sig)
|
||
|
} else if (sig) {
|
||
|
if (!process.env.TRAVIS) assert(err.signal)
|
||
|
}
|
||
|
} else {
|
||
|
assert.ifError(err)
|
||
|
}
|
||
|
|
||
|
try {
|
||
|
var data = JSON.parse(stdout)
|
||
|
} catch (er) {
|
||
|
console.error('invalid json: %j', stdout, stderr)
|
||
|
throw er
|
||
|
}
|
||
|
|
||
|
if (weirdSignal(sig)) {
|
||
|
data.wanted[1] = true
|
||
|
data.found[1] = !!data.found[1]
|
||
|
}
|
||
|
assert.deepEqual(data.found, data.wanted)
|
||
|
done()
|
||
|
})
|
||
|
})
|
||
|
})
|
||
|
|
||
|
signals.forEach(function (sig) {
|
||
|
var node = process.execPath
|
||
|
var js = require.resolve('./fixtures/parent.js')
|
||
|
it('exits properly: (external sig) ' + sig, function (done) {
|
||
|
// travis has issues with SIGUSR1 on Node 0.x.10.
|
||
|
if (process.env.TRAVIS && sig === 'SIGUSR1') return done()
|
||
|
|
||
|
var cmd = node + ' ' + js + ' ' + sig
|
||
|
exec(cmd, function (err, stdout, stderr) {
|
||
|
assert.ifError(err)
|
||
|
try {
|
||
|
var data = JSON.parse(stdout)
|
||
|
} catch (er) {
|
||
|
console.error('invalid json: %j', stdout, stderr)
|
||
|
throw er
|
||
|
}
|
||
|
|
||
|
if (weirdSignal(sig)) {
|
||
|
data.wanted[1] = true
|
||
|
data.found[1] = !!data.found[1]
|
||
|
data.external[1] = !!data.external[1]
|
||
|
}
|
||
|
assert.deepEqual(data.found, data.wanted)
|
||
|
assert.deepEqual(data.external, data.wanted)
|
||
|
done()
|
||
|
})
|
||
|
})
|
||
|
})
|
||
|
})
|