From 5b80ca9339683dd94cc9d7adae99640c4ec9f859 Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Sat, 14 Nov 2015 20:43:27 -0800 Subject: [PATCH] test: fix flaky SmartOS test SmartOS has an issue where it will trigger ECONNREFUSED when it should not. See https://smartos.org/bugview/OS-2767. This change adds logic to test-net-server-max-connections.js to work around the issue. Fixes: https://github.com/nodejs/node/issues/2663 PR-URL: https://github.com/nodejs/node/pull/3830 Reviewed-By: James M Snell --- .../test-net-server-max-connections.js | 63 ++++++++++--------- 1 file changed, 34 insertions(+), 29 deletions(-) diff --git a/test/parallel/test-net-server-max-connections.js b/test/parallel/test-net-server-max-connections.js index 8de27d13eb4f6b..2b418e1c3c7bf4 100644 --- a/test/parallel/test-net-server-max-connections.js +++ b/test/parallel/test-net-server-max-connections.js @@ -36,6 +36,35 @@ function makeConnection(index) { if (index + 1 < N) { makeConnection(index + 1); } + + c.on('close', function() { + console.error('closed %d', index); + closes++; + + if (closes < N / 2) { + assert.ok(server.maxConnections <= index, + index + + ' was one of the first closed connections ' + + 'but shouldnt have been'); + } + + if (closes === N / 2) { + var cb; + console.error('calling wait callback.'); + while (cb = waits.shift()) { + cb(); + } + server.close(); + } + + if (index < server.maxConnections) { + assert.equal(true, gotData, + index + ' didn\'t get data, but should have'); + } else { + assert.equal(false, gotData, + index + ' got data, but shouldn\'t have'); + } + }); }); c.on('end', function() { c.end(); }); @@ -46,36 +75,12 @@ function makeConnection(index) { }); c.on('error', function(e) { - console.error('error %d: %s', index, e); - }); - - c.on('close', function() { - console.error('closed %d', index); - closes++; - - if (closes < N / 2) { - assert.ok(server.maxConnections <= index, - index + - ' was one of the first closed connections ' + - 'but shouldnt have been'); - } - - if (closes === N / 2) { - var cb; - console.error('calling wait callback.'); - while (cb = waits.shift()) { - cb(); - } - server.close(); - } - - if (index < server.maxConnections) { - assert.equal(true, gotData, - index + ' didn\'t get data, but should have'); - } else { - assert.equal(false, gotData, - index + ' got data, but shouldn\'t have'); + // Retry if SmartOS and ECONNREFUSED. See + // https://github.com/nodejs/node/issues/2663. + if (common.isSunOS && (e.code === 'ECONNREFUSED')) { + c.connect(common.PORT); } + console.error('error %d: %s', index, e); }); }