diff options
Diffstat (limited to 'test/parallel/test-https-slow-headers.js')
-rw-r--r-- | test/parallel/test-https-slow-headers.js | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/test/parallel/test-https-slow-headers.js b/test/parallel/test-https-slow-headers.js new file mode 100644 index 0000000000..2a55850b5d --- /dev/null +++ b/test/parallel/test-https-slow-headers.js @@ -0,0 +1,63 @@ +'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(); + })); +})); |