• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1'use strict';
2
3const common = require('../common');
4const assert = require('assert');
5const { createServer } = require('http');
6const { connect } = require('net');
7const { finished } = require('stream');
8
9// This test validates that the 'timeout' event fires
10// after server.headersTimeout.
11
12const headers =
13  'GET / HTTP/1.1\r\n' +
14  'Host: localhost\r\n' +
15  'Agent: node\r\n';
16
17const server = createServer(common.mustNotCall());
18let sendCharEvery = 1000;
19
20// 60 seconds is the default
21assert.strictEqual(server.headersTimeout, 60 * 1000);
22
23// Pass a REAL env variable to shortening up the default
24// value which is 40s otherwise this is useful for manual
25// testing
26if (!process.env.REAL) {
27  sendCharEvery = common.platformTimeout(10);
28  server.headersTimeout = 2 * sendCharEvery;
29}
30
31server.once('timeout', common.mustCall((socket) => {
32  socket.destroy();
33}));
34
35server.listen(0, common.mustCall(() => {
36  const client = connect(server.address().port);
37  client.write(headers);
38  client.write('X-CRASH: ');
39
40  const interval = setInterval(() => {
41    client.write('a');
42  }, sendCharEvery);
43
44  client.resume();
45
46  finished(client, common.mustCall((err) => {
47    clearInterval(interval);
48    server.close();
49  }));
50}));
51