| var fs = require('graceful-fs') |
| var path = require('path') |
| var spawn = require('child_process').spawn |
| |
| var mkdirp = require('mkdirp') |
| var osenv = require('osenv') |
| var rimraf = require('rimraf') |
| var test = require('tap').test |
| |
| var node = process.execPath |
| var npm = require.resolve('../../bin/npm-cli.js') |
| |
| var pkg = path.resolve(__dirname, 'lifecycle-signal') |
| |
| var json = { |
| name: 'lifecycle-signal', |
| version: '1.2.5', |
| scripts: { |
| preinstall: 'node -e "process.kill(process.pid,\'SIGSEGV\')"' |
| } |
| } |
| |
| test('setup', function (t) { |
| cleanup() |
| mkdirp.sync(pkg) |
| fs.writeFileSync( |
| path.join(pkg, 'package.json'), |
| JSON.stringify(json, null, 2) |
| ) |
| |
| process.chdir(pkg) |
| t.end() |
| }) |
| |
| test('lifecycle signal abort', function (t) { |
| // windows does not use lifecycle signals, abort |
| if (process.platform === 'win32' || process.env.TRAVIS) return t.end() |
| |
| var child = spawn(node, [npm, 'install'], { |
| cwd: pkg |
| }) |
| child.on('close', function (code, signal) { |
| t.equal(code, null) |
| t.equal(signal, 'SIGSEGV') |
| t.end() |
| }) |
| }) |
| |
| test('cleanup', function (t) { |
| cleanup() |
| t.end() |
| }) |
| |
| function cleanup () { |
| process.chdir(osenv.tmpdir()) |
| rimraf.sync(pkg) |
| } |