| 'use strict'; |
| |
| const common = require('../common'); |
| const assert = require('assert'); |
| const { createServer } = require('http'); |
| const { connect } = require('net'); |
| |
| // This test validates that the requestTimeoout |
| // is disabled after the connection is upgraded. |
| let sendDelayedRequestHeaders; |
| const requestTimeout = common.platformTimeout(2000); |
| const server = createServer({ |
| headersTimeout: 0, |
| requestTimeout, |
| keepAliveTimeout: 0, |
| connectionsCheckingInterval: requestTimeout / 4 |
| }, common.mustNotCall()); |
| server.on('connection', common.mustCall(() => { |
| assert.strictEqual(typeof sendDelayedRequestHeaders, 'function'); |
| sendDelayedRequestHeaders(); |
| })); |
| |
| assert.strictEqual(server.requestTimeout, requestTimeout); |
| |
| server.on('upgrade', common.mustCall((req, socket, head) => { |
| socket.write('HTTP/1.1 101 Web Socket Protocol Handshake\r\n'); |
| socket.write('Upgrade: WebSocket\r\n'); |
| socket.write('Connection: Upgrade\r\n\r\n'); |
| socket.pipe(socket); |
| })); |
| |
| server.listen(0, common.mustCall(() => { |
| const client = connect(server.address().port); |
| let response = ''; |
| |
| client.setEncoding('utf8'); |
| client.on('data', common.mustCallAtLeast((chunk) => { |
| response += chunk; |
| }, 1)); |
| |
| client.on('end', common.mustCall(() => { |
| assert.strictEqual( |
| response, |
| 'HTTP/1.1 101 Web Socket Protocol Handshake\r\n' + |
| 'Upgrade: WebSocket\r\n' + |
| 'Connection: Upgrade\r\n\r\n' + |
| '12345678901234567890' |
| ); |
| |
| server.close(); |
| })); |
| |
| client.resume(); |
| client.write('GET / HTTP/1.1\r\n'); |
| client.write('Upgrade: WebSocket\r\n'); |
| client.write('Connection: Upgrade\r\n\r\n'); |
| |
| sendDelayedRequestHeaders = common.mustCall(() => { |
| setTimeout(() => { |
| client.write('12345678901234567890'); |
| client.end(); |
| }, requestTimeout * 2).unref(); |
| }); |
| })); |