test: fix `net-socket-timeout-unref` flakiness
authorSantiago Gimeno <santiago.gimeno@gmail.com>
Sat, 16 Jan 2016 00:54:44 +0000 (01:54 +0100)
committerMyles Borins <mborins@us.ibm.com>
Wed, 2 Mar 2016 22:01:11 +0000 (14:01 -0800)
From time to time this test is failing in OS X because at least one of
the connections takes quite a long time (around 5 seconds) causing some
of the timers may fire before the test exited. To solve this, wait for
all the connections to be established before setting the timeouts and
unrefing the sockets.

PR-URL: https://github.com/nodejs/node/pull/4772
Reviewed-By: Rich Trott <rtrott@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
test/parallel/test-net-socket-timeout-unref.js

index c7e651a..b7ed0ec 100644 (file)
@@ -11,15 +11,26 @@ server.listen(common.PORT);
 server.unref();
 
 var timedout = false;
+var connections = 0;
+var sockets = [];
+var delays = [8, 5, 3, 6, 2, 4];
 
-[8, 5, 3, 6, 2, 4].forEach(function(T) {
+delays.forEach(function(T) {
   var socket = net.createConnection(common.PORT, 'localhost');
-  socket.setTimeout(T * 1000, function() {
-    console.log(process._getActiveHandles());
-    timedout = true;
-    socket.destroy();
+  socket.on('connect', function() {
+    if (++connections === delays.length) {
+      sockets.forEach(function(s) {
+        s[0].setTimeout(s[1] * 1000, function() {
+          timedout = true;
+          s[0].destroy();
+        });
+
+        s[0].unref();
+      });
+    }
   });
-  socket.unref();
+
+  sockets.push([socket, T]);
 });
 
 process.on('exit', function() {