Skip to content

Commit

Permalink
test: fix flaky test-net-error-twice
Browse files Browse the repository at this point in the history
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: nodejs#4057
PR-URL: nodejs#4342
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: João Reis <reis@janeasystems.com>
  • Loading branch information
mscdex authored and Fishrock123 committed Dec 22, 2015
1 parent 6406dbb commit 569e5eb
Showing 1 changed file with 18 additions and 7 deletions.
25 changes: 18 additions & 7 deletions test/parallel/test-net-error-twice.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,24 @@
'use strict';
var common = require('../common');
var assert = require('assert');
var net = require('net');
const common = require('../common');
const assert = require('assert');
const net = require('net');

var buf = new Buffer(10 * 1024 * 1024);
const buf = new Buffer(10 * 1024 * 1024);

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) {
conn.write(buf);
conn.on('error', function(err) {
errs.push(err);
if (errs.length > 1 && errs[0] === errs[1])
Expand All @@ -19,11 +27,14 @@ var srv = net.createServer(function onConnection(conn) {
conn.on('close', function() {
srv.unref();
});
serverSocket = conn;
ready();
}).listen(common.PORT, function() {
var client = net.connect({ port: common.PORT });

client.on('connect', function() {
client.destroy();
clientSocket = client;
ready();
});
});

Expand Down

0 comments on commit 569e5eb

Please sign in to comment.