'use strict';
var cluster = require('cluster');
var assert = require('assert');
var util = require('util');

if (cluster.isMaster) {
  var worker = cluster.fork();

  assert.ok(worker.isConnected(),
            'isConnected() should return true as soon as the worker has ' +
            'been created.');

  worker.on('disconnect', function() {
    assert.ok(!worker.isConnected(),
              'After a disconnect event has been emitted, ' +
              'isConncted should return false');
  });

  worker.on('message', function(msg) {
    if (msg === 'readyToDisconnect') {
      worker.disconnect();
    }
  });

} else {
  assert.ok(cluster.worker.isConnected(),
            'isConnected() should return true from within a worker at all ' +
            'times.');

  cluster.worker.process.on('disconnect', function() {
    assert.ok(!cluster.worker.isConnected(),
              'isConnected() should return false from within a worker ' +
              'after its underlying process has been disconnected from ' +
              'the master');
  });

  process.send('readyToDisconnect');
}
