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 a header. 11let sendDelayedRequestHeaders; 12const server = createServer(common.mustNotCall()); 13server.on('connection', common.mustCall(() => { 14 assert.strictEqual(typeof sendDelayedRequestHeaders, 'function'); 15 sendDelayedRequestHeaders(); 16})); 17 18// 120 seconds is the default 19assert.strictEqual(server.requestTimeout, 0); 20const requestTimeout = common.platformTimeout(1000); 21server.requestTimeout = requestTimeout; 22assert.strictEqual(server.requestTimeout, requestTimeout); 23 24server.listen(0, common.mustCall(() => { 25 const client = connect(server.address().port); 26 let response = ''; 27 28 client.on('data', common.mustCall((chunk) => { 29 response += chunk.toString('utf-8'); 30 })); 31 32 const errOrEnd = common.mustCall(function(err) { 33 console.log(err); 34 assert.strictEqual( 35 response, 36 'HTTP/1.1 408 Request Timeout\r\nConnection: close\r\n\r\n' 37 ); 38 server.close(); 39 }); 40 41 client.on('end', errOrEnd); 42 client.on('error', errOrEnd); 43 44 client.resume(); 45 client.write('GET / HTTP/1.1\r\n'); 46 client.write('Connection: close\r\n'); 47 client.write('X-CRASH: '); 48 49 sendDelayedRequestHeaders = common.mustCall(() => { 50 setTimeout(() => { 51 client.write('1234567890\r\n\r\n'); 52 }, common.platformTimeout(2000)).unref(); 53 }); 54})); 55