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 requestTimeoout 9// is disabled after the connection is upgraded. 10let sendDelayedRequestHeaders; 11const requestTimeout = common.platformTimeout(2000); 12const server = createServer({ 13 headersTimeout: 0, 14 requestTimeout, 15 keepAliveTimeout: 0, 16 connectionsCheckingInterval: requestTimeout / 4 17}, common.mustNotCall()); 18server.on('connection', common.mustCall(() => { 19 assert.strictEqual(typeof sendDelayedRequestHeaders, 'function'); 20 sendDelayedRequestHeaders(); 21})); 22 23assert.strictEqual(server.requestTimeout, requestTimeout); 24 25server.on('upgrade', common.mustCall((req, socket, head) => { 26 socket.write('HTTP/1.1 101 Web Socket Protocol Handshake\r\n'); 27 socket.write('Upgrade: WebSocket\r\n'); 28 socket.write('Connection: Upgrade\r\n\r\n'); 29 socket.pipe(socket); 30})); 31 32server.listen(0, common.mustCall(() => { 33 const client = connect(server.address().port); 34 let response = ''; 35 36 client.setEncoding('utf8'); 37 client.on('data', common.mustCallAtLeast((chunk) => { 38 response += chunk; 39 }, 1)); 40 41 client.on('end', common.mustCall(() => { 42 assert.strictEqual( 43 response, 44 'HTTP/1.1 101 Web Socket Protocol Handshake\r\n' + 45 'Upgrade: WebSocket\r\n' + 46 'Connection: Upgrade\r\n\r\n' + 47 '12345678901234567890' 48 ); 49 50 server.close(); 51 })); 52 53 client.resume(); 54 client.write('GET / HTTP/1.1\r\n'); 55 client.write('Upgrade: WebSocket\r\n'); 56 client.write('Connection: Upgrade\r\n\r\n'); 57 58 sendDelayedRequestHeaders = common.mustCall(() => { 59 setTimeout(() => { 60 client.write('12345678901234567890'); 61 client.end(); 62 }, requestTimeout * 2).unref(); 63 }); 64})); 65