diff --git a/lib/https.js b/lib/https.js index 90b6346bd95f20..6f97991f98c8e3 100644 --- a/lib/https.js +++ b/lib/https.js @@ -138,6 +138,10 @@ Agent.prototype._getSession = function _getSession(key) { }; Agent.prototype._cacheSession = function _cacheSession(key, session) { + // Cache is disabled + if (this.maxCachedSessions === 0) + return; + // Fast case - update existing entry if (this._sessionCache.map[key]) { this._sessionCache.map[key] = session; diff --git a/test/parallel/test-https-agent-disable-session-reuse.js b/test/parallel/test-https-agent-disable-session-reuse.js new file mode 100644 index 00000000000000..fc9fc7680f2aad --- /dev/null +++ b/test/parallel/test-https-agent-disable-session-reuse.js @@ -0,0 +1,59 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); + +if (!common.hasCrypto) { + console.log('1..0 # Skipped: missing crypto'); + return; +} + +const TOTAL_REQS = 2; + +const https = require('https'); +const crypto = require('crypto'); + +const fs = require('fs'); + +const options = { + key: fs.readFileSync(common.fixturesDir + '/keys/agent1-key.pem'), + cert: fs.readFileSync(common.fixturesDir + '/keys/agent1-cert.pem') +}; + +const clientSessions = []; +var serverRequests = 0; + +const agent = new https.Agent({ + maxCachedSessions: 0 +}); + +const server = https.createServer(options, function(req, res) { + serverRequests++; + res.end('ok'); +}).listen(common.PORT, function() { + var waiting = TOTAL_REQS; + function request() { + const options = { + agent: agent, + port: common.PORT, + rejectUnauthorized: false + }; + + https.request(options, function(res) { + clientSessions.push(res.socket.getSession()); + + res.resume(); + res.on('end', function() { + if (--waiting !== 0) + return request(); + server.close(); + }); + }).end(); + } + request(); +}); + +process.on('exit', function() { + assert.equal(serverRequests, TOTAL_REQS); + assert.notEqual(clientSessions[0].toString('hex'), + clientSessions[1].toString('hex')); +});