11'use strict';
2- var common = require('../common');
2+ const common = require('../common');
33
44if (!common.opensslCli) {
55 common.skip('node compiled without OpenSSL CLI.');
@@ -18,17 +18,17 @@ doTest({ tickets: false }, function() {
1818});
1919
2020function doTest(testOptions, callback) {
21- var assert = require('assert');
22- var tls = require('tls');
23- var fs = require('fs');
24- var join = require('path').join;
25- var spawn = require('child_process').spawn;
21+ const assert = require('assert');
22+ const tls = require('tls');
23+ const fs = require('fs');
24+ const join = require('path').join;
25+ const spawn = require('child_process').spawn;
2626
27- var keyFile = join(common.fixturesDir, 'agent.key');
28- var certFile = join(common.fixturesDir, 'agent.crt');
29- var key = fs.readFileSync(keyFile);
30- var cert = fs.readFileSync(certFile);
31- var options = {
27+ const keyFile = join(common.fixturesDir, 'agent.key');
28+ const certFile = join(common.fixturesDir, 'agent.crt');
29+ const key = fs.readFileSync(keyFile);
30+ const cert = fs.readFileSync(certFile);
31+ const options = {
3232 key: key,
3333 cert: cert,
3434 ca: [cert],
@@ -38,7 +38,7 @@ function doTest(testOptions, callback) {
3838 var resumeCount = 0;
3939 var session;
4040
41- var server = tls.createServer(options, function(cleartext) {
41+ const server = tls.createServer(options, function(cleartext) {
4242 cleartext.on('error', function(er) {
4343 // We're ok with getting ECONNRESET in this test, but it's
4444 // timing-dependent, and thus unreliable. Any other errors
@@ -72,7 +72,7 @@ function doTest(testOptions, callback) {
7272 });
7373
7474 server.listen(0, function() {
75- var args = [
75+ const args = [
7676 's_client',
7777 '-tls1',
7878 '-connect', `localhost:${this.address().port}`,
@@ -86,21 +86,35 @@ function doTest(testOptions, callback) {
8686 if (common.isWindows)
8787 args.push('-no_rand_screen');
8888
89- var client = spawn(common.opensslCli, args, {
90- stdio: [ 0, 1, 'pipe' ]
91- });
92- var err = '';
93- client.stderr.setEncoding('utf8');
94- client.stderr.on('data', function(chunk) {
95- err += chunk;
96- });
97- client.on('exit', function(code) {
98- console.error('done');
99- assert.equal(code, 0);
100- server.close(function() {
101- setTimeout(callback, 100);
89+ function spawnClient() {
90+ const client = spawn(common.opensslCli, args, {
91+ stdio: [ 0, 1, 'pipe' ]
10292 });
103- });
93+ var err = '';
94+ client.stderr.setEncoding('utf8');
95+ client.stderr.on('data', function(chunk) {
96+ err += chunk;
97+ });
98+
99+ client.on('exit', common.mustCall(function(code, signal) {
100+ if (code !== 0) {
101+ // If SmartOS and connection refused, then retry. See
102+ // https://github.com/nodejs/node/issues/2663.
103+ if (common.isSunOS && err.includes('Connection refused')) {
104+ requestCount = 0;
105+ spawnClient();
106+ return;
107+ }
108+ common.fail(`code: ${code}, signal: ${signal}, output: ${err}`);
109+ }
110+ assert.equal(code, 0);
111+ server.close(common.mustCall(function() {
112+ setTimeout(callback, 100);
113+ }));
114+ }));
115+ }
116+
117+ spawnClient();
104118 });
105119
106120 process.on('exit', function() {
0 commit comments