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