~yolanda.robla/ubuntu/trusty/nodejs/add_distribution

« back to all changes in this revision

Viewing changes to test/simple/test-cluster-kill-workers.js

  • Committer: Package Import Robot
  • Author(s): Jérémy Lal
  • Date: 2013-08-14 00:16:46 UTC
  • mfrom: (7.1.40 sid)
  • Revision ID: package-import@ubuntu.com-20130814001646-bzlysfh8sd6mukbo
Tags: 0.10.15~dfsg1-4
* Update 2005 patch, adding a handful of tests that can fail on
  slow platforms.
* Add 1004 patch to fix test failures when writing NaN to buffer
  on mipsel.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
// Copyright Joyent, Inc. and other Node contributors.
2
 
//
3
 
// Permission is hereby granted, free of charge, to any person obtaining a
4
 
// copy of this software and associated documentation files (the
5
 
// "Software"), to deal in the Software without restriction, including
6
 
// without limitation the rights to use, copy, modify, merge, publish,
7
 
// distribute, sublicense, and/or sell copies of the Software, and to permit
8
 
// persons to whom the Software is furnished to do so, subject to the
9
 
// following conditions:
10
 
//
11
 
// The above copyright notice and this permission notice shall be included
12
 
// in all copies or substantial portions of the Software.
13
 
//
14
 
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15
 
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
 
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
17
 
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18
 
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
19
 
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20
 
// USE OR OTHER DEALINGS IN THE SOFTWARE.
21
 
 
22
 
// This test checks that if we kill a cluster master immediately after fork,
23
 
// before the worker has time to register itself, that the master will still
24
 
// clean up the worker.
25
 
// https://github.com/joyent/node/issues/2047
26
 
 
27
 
var common = require('../common');
28
 
var assert = require('assert');
29
 
var cluster = require('cluster');
30
 
var fork = require('child_process').fork;
31
 
 
32
 
var isTestRunner = process.argv[2] != 'child';
33
 
 
34
 
if (isTestRunner) {
35
 
  console.log('starting master...');
36
 
  var master = fork(__filename, ['child']);
37
 
 
38
 
  console.log('master pid =', master.pid);
39
 
 
40
 
  var workerPID;
41
 
 
42
 
  master.on('message', function(m) {
43
 
    console.log('got message from master:', m);
44
 
    if (m.workerPID) {
45
 
      console.log('worker pid =', m.workerPID);
46
 
      workerPID = m.workerPID;
47
 
    }
48
 
  });
49
 
 
50
 
  var gotExit = false;
51
 
  var gotKillException = false;
52
 
 
53
 
  master.on('exit', function(code) {
54
 
    gotExit = true;
55
 
    assert(code != 0);
56
 
    assert(workerPID > 0);
57
 
    try {
58
 
      process.kill(workerPID, 0);
59
 
    } catch (e) {
60
 
      // workerPID is no longer running
61
 
      console.log(e);
62
 
      assert(e.code == 'ESRCH');
63
 
      gotKillException = true;
64
 
    }
65
 
  });
66
 
 
67
 
  process.on('exit', function() {
68
 
    assert(gotExit);
69
 
    assert(gotKillException);
70
 
  });
71
 
} else {
72
 
  // Cluster stuff.
73
 
  if (cluster.isMaster) {
74
 
    var worker = cluster.fork();
75
 
    process.send({ workerPID: worker.pid });
76
 
    // should kill the worker too
77
 
    throw new Error('kill master');
78
 
  } else {
79
 
    setTimeout(function() {
80
 
      assert(false, 'worker should have been killed');
81
 
    }, 2500);
82
 
  }
83
 
}
84