Browse Source

test: remove 1 second delay from test

In test-cluster-worker-wait-server-close, remove unneeded 1-second delay
and refactor to eliminate flakiness on FreeBSD.

PR-URL: https://github.com/nodejs/node/pull/4616
Reviewed-By: Johan Bergström <bugs@bergstroem.nu>
Reviewed-By: James M Snell <jasnell@gmail.com>
process-exit-stdio-flushing
Rich Trott 9 years ago
parent
commit
e98bcfa2cb
  1. 42
      test/parallel/test-cluster-worker-wait-server-close.js

42
test/parallel/test-cluster-worker-wait-server-close.js

@ -5,44 +5,44 @@ var assert = require('assert');
var cluster = require('cluster'); var cluster = require('cluster');
var net = require('net'); var net = require('net');
var serverClosed = false;
if (cluster.isWorker) { if (cluster.isWorker) {
net.createServer(function(socket) { var server = net.createServer(function(socket) {
// Wait for any data, then close connection // Wait for any data, then close connection
socket.write('.'); socket.write('.');
socket.on('data', function discard() { socket.on('data', function discard() {});
});
}).listen(common.PORT, common.localhostIPv4); }).listen(common.PORT, common.localhostIPv4);
} else if (cluster.isMaster) {
var connectionDone; server.once('close', function() {
var ok; serverClosed = true;
});
// Although not typical, the worker process can exit before the disconnect
// event fires. Use this to keep the process open until the event has fired.
var keepOpen = setInterval(function() {}, 9999);
// Check worker events and properties
process.once('disconnect', function() {
// disconnect should occur after socket close
assert(serverClosed);
clearInterval(keepOpen);
});
} else if (cluster.isMaster) {
// start worker // start worker
var worker = cluster.fork(); var worker = cluster.fork();
var socket;
// Disconnect worker when it is ready // Disconnect worker when it is ready
worker.once('listening', function() { worker.once('listening', function() {
net.createConnection(common.PORT, common.localhostIPv4, function() { net.createConnection(common.PORT, common.localhostIPv4, function() {
var socket = this; socket = this;
this.on('data', function() { this.on('data', function() {
console.log('got data from client'); console.log('got data from client');
// socket definitely connected to worker if we got data // socket definitely connected to worker if we got data
worker.disconnect(); worker.disconnect();
setTimeout(function() { socket.end();
socket.end();
connectionDone = true;
}, 1000);
}); });
}); });
}); });
// Check worker events and properties
worker.once('disconnect', function() {
assert.ok(connectionDone, 'disconnect should occur after socket close');
ok = true;
});
process.once('exit', function() {
assert.ok(ok);
});
} }

Loading…
Cancel
Save