diff --git a/test/parallel/test-tls-session-cache.js b/test/parallel/test-tls-session-cache.js index 1fd921aeef2b3c..60a85701796d72 100644 --- a/test/parallel/test-tls-session-cache.js +++ b/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.'); @@ -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], @@ -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 @@ -72,7 +72,7 @@ function doTest(testOptions, callback) { }); server.listen(0, function() { - var args = [ + const args = [ 's_client', '-tls1', '-connect', `localhost:${this.address().port}`, @@ -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() {