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: https://github.com/nodejs/node/issues/5111 Refs: https://smartos.org/bugview/OS-2767 PR-URL: https://github.com/nodejs/node/pull/7505 Reviewed-By: Santiago Gimeno <santiago.gimeno@gmail.com>
This commit is contained in:
Родитель
7cbbec516d
Коммит
fb4c022fbe
|
@ -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() {
|
||||
|
|
Загрузка…
Ссылка в новой задаче