test-https-agent-session-eviction.test.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. // https://github.com/indutny/io.js/blob/b9b79fdbed704cb647700d799b94f15e88124763/test/parallel/test-https-agent-session-eviction.js
  2. 'use strict';
  3. const https = require('https');
  4. const assert = require('assert');
  5. const fs = require('fs');
  6. const constants = require('constants');
  7. const HttpsAgent = require('..').HttpsAgent;
  8. describe('test/test-https-agent-session-eviction.test.js', () => {
  9. let port;
  10. let server;
  11. const httpsAgent = new HttpsAgent({
  12. keepAlive: true,
  13. });
  14. const options = {
  15. key: fs.readFileSync(__dirname + '/fixtures/agenttest-key.pem'),
  16. cert: fs.readFileSync(__dirname + '/fixtures/agenttest-cert.pem'),
  17. secureOptions: constants.SSL_OP_NO_TICKET,
  18. };
  19. before(done => {
  20. // Create TLS1.2 server
  21. server = https.createServer(options, (req, res) => {
  22. res.end('ohai');
  23. });
  24. server.listen(0, () => {
  25. port = server.address().port;
  26. done();
  27. });
  28. });
  29. it('should evict cached sessions on error', done => {
  30. get();
  31. // Do request and let agent cache the session
  32. function get() {
  33. const req = https.request({
  34. port,
  35. rejectUnauthorized: false,
  36. agent: httpsAgent,
  37. }, res => {
  38. console.log('first request done, %j', res.headers);
  39. res.resume();
  40. res.on('end', () => {
  41. process.nextTick(() => {
  42. const name = Object.keys(httpsAgent.freeSockets);
  43. const socket = httpsAgent.freeSockets[name][0];
  44. socket.on('close', err => {
  45. assert.equal(err.message, 'mock close error');
  46. done();
  47. });
  48. socket.emit('close', new Error('mock close error'));
  49. });
  50. });
  51. });
  52. req.end();
  53. }
  54. });
  55. });