• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Flags: --expose-internals
2
3'use strict';
4const common = require('../common');
5const { kTimeout, TIMEOUT_MAX } = require('internal/timers');
6
7if (!common.hasCrypto)
8  common.skip('missing crypto');
9
10const assert = require('assert');
11const tls = require('tls');
12const net = require('net');
13const fixtures = require('../common/fixtures');
14
15const options = {
16  key: fixtures.readKey('agent1-key.pem'),
17  cert: fixtures.readKey('agent1-cert.pem')
18};
19
20const server = tls.createServer(options, common.mustCall((c) => {
21  setImmediate(() => {
22    c.write('hello', () => {
23      setImmediate(() => {
24        c.destroy();
25        server.close();
26      });
27    });
28  });
29}));
30
31let socket;
32let lastIdleStart;
33
34server.listen(0, () => {
35  socket = net.connect(server.address().port, function() {
36    const s = socket.setTimeout(TIMEOUT_MAX, function() {
37      throw new Error('timeout');
38    });
39    assert.ok(s instanceof net.Socket);
40
41    assert.notStrictEqual(socket[kTimeout]._idleTimeout, -1);
42    lastIdleStart = socket[kTimeout]._idleStart;
43
44    const tsocket = tls.connect({
45      socket: socket,
46      rejectUnauthorized: false
47    });
48    tsocket.resume();
49  });
50});
51
52process.on('exit', () => {
53  assert.strictEqual(socket[kTimeout]._idleTimeout, -1);
54  assert(lastIdleStart < socket[kTimeout]._idleStart);
55});
56