node/test/parallel/test-tls-multi-key.js
Santiago Gimeno e65f1f7954 test: fix tls-multi-key race condition
In some conditions it can happen that the client-side socket is
destroyed before the server-side socket has gracefully closed, thus
causing a 'ECONNRESET' error in this socket. To solve this, also close
gracefully in the client side.

PR-URL: https://github.com/nodejs/node/pull/3966
Reviewed-By: Fedor Indutny <fedor.indutny@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
2016-01-18 08:01:57 -08:00

54 lines
1.3 KiB
JavaScript

'use strict';
var common = require('../common');
var assert = require('assert');
if (!common.hasCrypto) {
console.log('1..0 # Skipped: missing crypto');
return;
}
var tls = require('tls');
var fs = require('fs');
var options = {
key: [
fs.readFileSync(common.fixturesDir + '/keys/agent1-key.pem'),
fs.readFileSync(common.fixturesDir + '/keys/ec-key.pem')
],
cert: [
fs.readFileSync(common.fixturesDir + '/keys/agent1-cert.pem'),
fs.readFileSync(common.fixturesDir + '/keys/ec-cert.pem')
]
};
var ciphers = [];
var server = tls.createServer(options, function(conn) {
conn.end('ok');
}).listen(common.PORT, function() {
var ecdsa = tls.connect(common.PORT, {
ciphers: 'ECDHE-ECDSA-AES256-GCM-SHA384',
rejectUnauthorized: false
}, function() {
ciphers.push(ecdsa.getCipher());
var rsa = tls.connect(common.PORT, {
ciphers: 'ECDHE-RSA-AES256-GCM-SHA384',
rejectUnauthorized: false
}, function() {
ciphers.push(rsa.getCipher());
ecdsa.end();
rsa.end();
server.close();
});
});
});
process.on('exit', function() {
assert.deepEqual(ciphers, [{
name: 'ECDHE-ECDSA-AES256-GCM-SHA384',
version: 'TLSv1/SSLv3'
}, {
name: 'ECDHE-RSA-AES256-GCM-SHA384',
version: 'TLSv1/SSLv3'
}]);
});