• 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');
7
8// This test validates that the server returns 408
9// after server.requestTimeout if the client
10// pauses sending in the middle of the body.
11let sendDelayedRequestBody;
12const server = createServer(common.mustCall((req, res) => {
13  let body = '';
14  req.setEncoding('utf-8');
15
16  req.on('data', (chunk) => {
17    body += chunk;
18  });
19
20  req.on('end', () => {
21    res.writeHead(200, { 'Content-Type': 'text/plain' });
22    res.write(body);
23    res.end();
24  });
25
26  assert.strictEqual(typeof sendDelayedRequestBody, 'function');
27  sendDelayedRequestBody();
28}));
29
30// 0 seconds is the default
31assert.strictEqual(server.requestTimeout, 0);
32const requestTimeout = common.platformTimeout(1000);
33server.requestTimeout = requestTimeout;
34assert.strictEqual(server.requestTimeout, requestTimeout);
35
36server.listen(0, common.mustCall(() => {
37  const client = connect(server.address().port);
38  let response = '';
39
40  client.on('data', common.mustCall((chunk) => {
41    response += chunk.toString('utf-8');
42  }));
43
44  const errOrEnd = common.mustCall(function(err) {
45    console.log(err);
46    assert.strictEqual(
47      response,
48      'HTTP/1.1 408 Request Timeout\r\nConnection: close\r\n\r\n'
49    );
50    server.close();
51  });
52
53  client.on('error', errOrEnd);
54  client.on('end', errOrEnd);
55
56  client.resume();
57  client.write('POST / HTTP/1.1\r\n');
58  client.write('Content-Length: 20\r\n');
59  client.write('Connection: close\r\n');
60  client.write('\r\n');
61  client.write('1234567890');
62
63  sendDelayedRequestBody = common.mustCall(() => {
64    setTimeout(() => {
65      client.write('1234567890\r\n\r\n');
66    }, common.platformTimeout(2000)).unref();
67  });
68}));
69