'use strict'; const common = require('../common'); const { readKey } = require('../common/fixtures'); if (!common.hasCrypto) common.skip('missing crypto'); const assert = require('assert'); const { createServer } = require('https'); const { connect } = require('tls'); const { finished } = require('stream'); // This test validates that the 'timeout' event fires // after server.headersTimeout. const headers = 'GET / HTTP/1.1\r\n' + 'Host: localhost\r\n' + 'Agent: node\r\n'; const server = createServer({ key: readKey('agent1-key.pem'), cert: readKey('agent1-cert.pem'), ca: readKey('ca1-cert.pem'), }, common.mustNotCall()); let sendCharEvery = 1000; // 40 seconds is the default assert.strictEqual(server.headersTimeout, 40 * 1000); // Pass a REAL env variable to shortening up the default // value which is 40s otherwise // this is useful for manual testing if (!process.env.REAL) { sendCharEvery = common.platformTimeout(10); server.headersTimeout = 2 * sendCharEvery; } server.once('timeout', common.mustCall((socket) => { socket.destroy(); })); server.listen(0, common.mustCall(() => { const client = connect({ port: server.address().port, rejectUnauthorized: false }); client.write(headers); client.write('X-CRASH: '); const interval = setInterval(() => { client.write('a'); }, sendCharEvery); client.resume(); finished(client, common.mustCall((err) => { clearInterval(interval); server.close(); })); }));