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