Skip to content

Commit

Permalink
test: fix flaky SmartOS test
Browse files Browse the repository at this point in the history
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: nodejs#2663
PR-URL: nodejs#3830
Reviewed-By: James M Snell <jasnell@gmail.com>
  • Loading branch information
Trott committed Nov 16, 2015
1 parent 3f6b921 commit 5b80ca9
Showing 1 changed file with 34 additions and 29 deletions.
63 changes: 34 additions & 29 deletions test/parallel/test-net-server-max-connections.js
Original file line number Diff line number Diff line change
Expand Up @@ -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(); });
Expand All @@ -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);
});
}

Expand Down

0 comments on commit 5b80ca9

Please sign in to comment.