Browse Source

test: fix flaky test-net-error-twice

On Windows there can exist some race condition where the
notification of the client's `socket.destroy()` isn't received
before the server writes to the socket. This race condition was
more evident/reproducible on a single core system.

This commit fixes the flakiness by waiting until the server's
connection event handler has been called to destroy the client
socket and perform the server socket write.

Fixes: https://github.com/nodejs/node/issues/4057
PR-URL: https://github.com/nodejs/node/pull/4342
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: João Reis <reis@janeasystems.com>
v4.x
Brian White 9 years ago
committed by Myles Borins
parent
commit
980852165f
  1. 25
      test/parallel/test-net-error-twice.js

25
test/parallel/test-net-error-twice.js

@ -1,16 +1,24 @@
'use strict'; 'use strict';
var common = require('../common'); const common = require('../common');
var assert = require('assert'); const assert = require('assert');
var net = require('net'); const net = require('net');
var buf = new Buffer(10 * 1024 * 1024); const buf = new Buffer(10 * 1024 * 1024);
buf.fill(0x62); buf.fill(0x62);
var errs = []; const errs = [];
var clientSocket;
var serverSocket;
function ready() {
if (clientSocket && serverSocket) {
clientSocket.destroy();
serverSocket.write(buf);
}
}
var srv = net.createServer(function onConnection(conn) { var srv = net.createServer(function onConnection(conn) {
conn.write(buf);
conn.on('error', function(err) { conn.on('error', function(err) {
errs.push(err); errs.push(err);
if (errs.length > 1 && errs[0] === errs[1]) if (errs.length > 1 && errs[0] === errs[1])
@ -19,11 +27,14 @@ var srv = net.createServer(function onConnection(conn) {
conn.on('close', function() { conn.on('close', function() {
srv.unref(); srv.unref();
}); });
serverSocket = conn;
ready();
}).listen(common.PORT, function() { }).listen(common.PORT, function() {
var client = net.connect({ port: common.PORT }); var client = net.connect({ port: common.PORT });
client.on('connect', function() { client.on('connect', function() {
client.destroy(); clientSocket = client;
ready();
}); });
}); });

Loading…
Cancel
Save