Skip to content
Closed
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
test: handle SmartOS bug in test-tls-session-cache
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
  • Loading branch information
Trott committed Jul 1, 2016
commit 2acb294ff94542bc41ac921d43836b9aceb0187c
67 changes: 40 additions & 27 deletions test/parallel/test-tls-session-cache.js
Original file line number Diff line number Diff line change
@@ -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,34 @@ 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')) {
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