|
1 | 1 | 'use strict';
|
| 2 | + |
| 3 | +// Test should fail in Node.js 5.4.1 and pass in later versions. |
| 4 | + |
2 | 5 | const common = require('../common');
|
3 | 6 | const assert = require('assert');
|
4 | 7 | const cluster = require('cluster');
|
5 |
| -const os = require('os'); |
6 | 8 |
|
7 | 9 | if (cluster.isMaster) {
|
8 |
| - function forkWorker(action) { |
9 |
| - const worker = cluster.fork({ action }); |
10 |
| - worker.on('disconnect', common.mustCall(() => { |
11 |
| - assert.strictEqual(worker.suicide, true); |
12 |
| - })); |
| 10 | + cluster.on('exit', (worker, code) => { |
| 11 | + assert.strictEqual(code, 0, 'worker exited with error'); |
| 12 | + }); |
| 13 | + |
| 14 | + return cluster.fork(); |
| 15 | +} |
13 | 16 |
|
14 |
| - worker.on('exit', common.mustCall(() => { |
15 |
| - assert.strictEqual(worker.suicide, true); |
16 |
| - })); |
17 |
| - } |
| 17 | +var eventFired = false; |
18 | 18 |
|
19 |
| - const cpus = os.cpus().length; |
20 |
| - const tries = cpus > 8 ? 64 : cpus * 8; |
| 19 | +cluster.worker.disconnect(); |
21 | 20 |
|
22 |
| - cluster.on('exit', common.mustCall((worker, code) => { |
23 |
| - assert.strictEqual(code, 0, 'worker exited with error'); |
24 |
| - }, tries * 2)); |
25 |
| - |
26 |
| - for (let i = 0; i < tries; ++i) { |
27 |
| - forkWorker('disconnect'); |
28 |
| - forkWorker('kill'); |
29 |
| - } |
30 |
| -} else { |
31 |
| - cluster.worker[process.env.action](); |
32 |
| -} |
| 21 | +process.nextTick(common.mustCall(() => { |
| 22 | + assert.strictEqual(eventFired, false, 'disconnect event should wait for ack'); |
| 23 | +})); |
| 24 | + |
| 25 | +cluster.worker.on('disconnect', common.mustCall(() => { |
| 26 | + eventFired = true; |
| 27 | +})); |
0 commit comments