| 'use strict'; |
| // test-cluster-worker-kill-signal.js |
| // verifies that when we're killing a worker using Worker.prototype.kill |
| // and the worker's process was killed with the given signal (SIGKILL) |
| |
| |
| const common = require('../common'); |
| const assert = require('assert'); |
| const cluster = require('cluster'); |
| |
| if (cluster.isWorker) { |
| // Make the worker run something |
| const http = require('http'); |
| const server = http.Server(() => { }); |
| |
| server.once('listening', common.mustCall(() => { })); |
| server.listen(0, '127.0.0.1'); |
| |
| } else if (cluster.isMaster) { |
| const KILL_SIGNAL = 'SIGKILL'; |
| |
| // Start worker |
| const worker = cluster.fork(); |
| |
| // When the worker is up and running, kill it |
| worker.once('listening', common.mustCall(() => { |
| worker.kill(KILL_SIGNAL); |
| })); |
| |
| // Check worker events and properties |
| worker.on('disconnect', common.mustCall(() => { |
| assert.strictEqual(worker.exitedAfterDisconnect, false); |
| assert.strictEqual(worker.state, 'disconnected'); |
| }, 1)); |
| |
| // Check that the worker died |
| worker.once('exit', common.mustCall((exitCode, signalCode) => { |
| const isWorkerProcessStillAlive = common.isAlive(worker.process.pid); |
| const numOfRunningWorkers = Object.keys(cluster.workers).length; |
| |
| assert.strictEqual(exitCode, null); |
| assert.strictEqual(signalCode, KILL_SIGNAL); |
| assert.strictEqual(isWorkerProcessStillAlive, false); |
| assert.strictEqual(numOfRunningWorkers, 0); |
| }, 1)); |
| |
| // Check if the cluster was killed as well |
| cluster.on('exit', common.mustCall(() => {}, 1)); |
| } |