Skip to content

Commit

Permalink
test: handle SmartOS bug in test-tls-session-cache
Browse files Browse the repository at this point in the history
Sometimes, a SmartOS bug results in ECONNREFUSED when trying to connect
to the TLS server that the test starts. Retry in that situation.

Fixes: #5111
Refs: https://smartos.org/bugview/OS-2767
PR-URL: #7505
Reviewed-By: Santiago Gimeno <santiago.gimeno@gmail.com>
  • Loading branch information
Trott authored and Fishrock123 committed Jul 5, 2016
1 parent 9b5be44 commit 6da49ac
Showing 1 changed file with 41 additions and 27 deletions.
68 changes: 41 additions & 27 deletions test/parallel/test-tls-session-cache.js
@@ -1,5 +1,5 @@
'use strict';
var common = require('../common');
const common = require('../common');

if (!common.opensslCli) {
common.skip('node compiled without OpenSSL CLI.');
Expand All @@ -18,17 +18,17 @@ doTest({ tickets: false }, function() {
});

function doTest(testOptions, callback) {
var assert = require('assert');
var tls = require('tls');
var fs = require('fs');
var join = require('path').join;
var spawn = require('child_process').spawn;
const assert = require('assert');
const tls = require('tls');
const fs = require('fs');
const join = require('path').join;
const spawn = require('child_process').spawn;

var keyFile = join(common.fixturesDir, 'agent.key');
var certFile = join(common.fixturesDir, 'agent.crt');
var key = fs.readFileSync(keyFile);
var cert = fs.readFileSync(certFile);
var options = {
const keyFile = join(common.fixturesDir, 'agent.key');
const certFile = join(common.fixturesDir, 'agent.crt');
const key = fs.readFileSync(keyFile);
const cert = fs.readFileSync(certFile);
const options = {
key: key,
cert: cert,
ca: [cert],
Expand All @@ -38,7 +38,7 @@ function doTest(testOptions, callback) {
var resumeCount = 0;
var session;

var server = tls.createServer(options, function(cleartext) {
const server = tls.createServer(options, function(cleartext) {
cleartext.on('error', function(er) {
// We're ok with getting ECONNRESET in this test, but it's
// timing-dependent, and thus unreliable. Any other errors
Expand Down Expand Up @@ -72,7 +72,7 @@ function doTest(testOptions, callback) {
});

server.listen(0, function() {
var args = [
const args = [
's_client',
'-tls1',
'-connect', `localhost:${this.address().port}`,
Expand All @@ -86,21 +86,35 @@ function doTest(testOptions, callback) {
if (common.isWindows)
args.push('-no_rand_screen');

var client = spawn(common.opensslCli, args, {
stdio: [ 0, 1, 'pipe' ]
});
var err = '';
client.stderr.setEncoding('utf8');
client.stderr.on('data', function(chunk) {
err += chunk;
});
client.on('exit', function(code) {
console.error('done');
assert.equal(code, 0);
server.close(function() {
setTimeout(callback, 100);
function spawnClient() {
const client = spawn(common.opensslCli, args, {
stdio: [ 0, 1, 'pipe' ]
});
});
var err = '';
client.stderr.setEncoding('utf8');
client.stderr.on('data', function(chunk) {
err += chunk;
});

client.on('exit', common.mustCall(function(code, signal) {
if (code !== 0) {
// If SmartOS and connection refused, then retry. See
// https://github.com/nodejs/node/issues/2663.
if (common.isSunOS && err.includes('Connection refused')) {
requestCount = 0;
spawnClient();
return;
}
common.fail(`code: ${code}, signal: ${signal}, output: ${err}`);
}
assert.equal(code, 0);
server.close(common.mustCall(function() {
setTimeout(callback, 100);
}));
}));
}

spawnClient();
});

process.on('exit', function() {
Expand Down

0 comments on commit 6da49ac

Please sign in to comment.