summaryrefslogtreecommitdiff
path: root/test/parallel/test-cluster-worker-wait-server-close.js
diff options
context:
space:
mode:
authorSam Roberts <sam@strongloop.com>2015-06-11 14:43:09 -0700
committerSam Roberts <sam@strongloop.com>2015-06-12 12:56:40 -0700
commit03ce84dfa13a1cc075bb45772a8a566213148939 (patch)
tree03a54787631f921104e7923d53f8d34cda60fd73 /test/parallel/test-cluster-worker-wait-server-close.js
parent2a7fd0ad328d5197a9a166650e9eaa51367e3152 (diff)
downloadandroid-node-v8-03ce84dfa13a1cc075bb45772a8a566213148939.tar.gz
android-node-v8-03ce84dfa13a1cc075bb45772a8a566213148939.tar.bz2
android-node-v8-03ce84dfa13a1cc075bb45772a8a566213148939.zip
test: fix cluster-worker-wait-server-close races
Wait for data to arrive from worker before doing a disconnect. Without this, whether the disconnect arrives at the worker before the master accepts and forwards the connection descriptor to the worker is a race. Reviewed-By: Sam Roberts <vieuxtech@gmail.com> Reviewed-By: Johan Bergström <bugs@bergstroem.nu> Reviewed-By: Rod Vagg <rod@vagg.org> PR-URL: https://github.com/nodejs/io.js/pull/1953 Fixes: https://github.com/nodejs/io.js/issues/1933 Fixes: https://github.com/nodejs/io.js/pull/1400
Diffstat (limited to 'test/parallel/test-cluster-worker-wait-server-close.js')
-rw-r--r--test/parallel/test-cluster-worker-wait-server-close.js18
1 files changed, 12 insertions, 6 deletions
diff --git a/test/parallel/test-cluster-worker-wait-server-close.js b/test/parallel/test-cluster-worker-wait-server-close.js
index 0f1836c7ec..0488343cae 100644
--- a/test/parallel/test-cluster-worker-wait-server-close.js
+++ b/test/parallel/test-cluster-worker-wait-server-close.js
@@ -8,7 +8,9 @@ var net = require('net');
if (cluster.isWorker) {
net.createServer(function(socket) {
// Wait for any data, then close connection
- socket.on('data', socket.end.bind(socket));
+ socket.write('.');
+ socket.on('data', function discard() {
+ });
}).listen(common.PORT, common.localhostIPv4);
} else if (cluster.isMaster) {
@@ -22,11 +24,15 @@ if (cluster.isWorker) {
worker.once('listening', function() {
net.createConnection(common.PORT, common.localhostIPv4, function() {
var socket = this;
- worker.disconnect();
- setTimeout(function() {
- socket.write('.');
- connectionDone = true;
- }, 1000);
+ this.on('data', function() {
+ console.log('got data from client');
+ // socket definitely connected to worker if we got data
+ worker.disconnect();
+ setTimeout(function() {
+ socket.end();
+ connectionDone = true;
+ }, 1000);
+ });
});
});