1'use strict'; 2 3// Ref: https://github.com/nodejs/node/issues/32106 4 5const common = require('../common'); 6 7const assert = require('assert'); 8const cluster = require('cluster'); 9const os = require('os'); 10 11if (cluster.isMaster) { 12 const workers = []; 13 const numCPUs = os.cpus().length; 14 let waitOnline = numCPUs; 15 for (let i = 0; i < numCPUs; i++) { 16 const worker = cluster.fork(); 17 workers[i] = worker; 18 worker.once('online', common.mustCall(() => { 19 if (--waitOnline === 0) 20 for (const worker of workers) 21 if (worker.isConnected()) 22 worker.send(i % 2 ? 'disconnect' : 'destroy'); 23 })); 24 25 // These errors can occur due to the nature of the test, we might be trying 26 // to send messages when the worker is disconnecting. 27 worker.on('error', (err) => { 28 assert.strictEqual(err.syscall, 'write'); 29 assert.strictEqual(err.code, 'EPIPE'); 30 }); 31 32 worker.once('disconnect', common.mustCall(() => { 33 for (const worker of workers) 34 if (worker.isConnected()) 35 worker.send('disconnect'); 36 })); 37 38 worker.once('exit', common.mustCall((code, signal) => { 39 assert.strictEqual(code, 0); 40 assert.strictEqual(signal, null); 41 })); 42 } 43} else { 44 process.on('message', (msg) => { 45 if (cluster.worker.isConnected()) 46 cluster.worker[msg](); 47 }); 48} 49