| 'use strict'; |
| const common = require('../common'); |
| |
| // Test that `req.setTimeout` will fired exactly once. |
| |
| const assert = require('assert'); |
| const http = require('http'); |
| |
| const HTTP_CLIENT_TIMEOUT = 2000; |
| |
| const options = { |
| method: 'GET', |
| port: undefined, |
| host: '127.0.0.1', |
| path: '/', |
| timeout: HTTP_CLIENT_TIMEOUT, |
| }; |
| |
| const server = http.createServer(() => { |
| // Never respond. |
| }); |
| |
| server.listen(0, options.host, function() { |
| doRequest(); |
| }); |
| |
| function doRequest() { |
| options.port = server.address().port; |
| const req = http.request(options); |
| req.setTimeout(HTTP_CLIENT_TIMEOUT / 2); |
| req.on('error', () => { |
| // This space is intentionally left blank. |
| }); |
| req.on('close', common.mustCall(() => server.close())); |
| |
| let timeout_events = 0; |
| req.on('timeout', common.mustCall(() => { |
| timeout_events += 1; |
| })); |
| req.end(); |
| |
| setTimeout(function() { |
| req.destroy(); |
| assert.strictEqual(timeout_events, 1); |
| }, common.platformTimeout(HTTP_CLIENT_TIMEOUT)); |
| } |