-
Notifications
You must be signed in to change notification settings - Fork 30.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
8adfe2a
commit 018c36a
Showing
2 changed files
with
67 additions
and
30 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
'use strict'; | ||
|
||
const common = require('../common'); | ||
const { addresses: { INET6_IP, INET4_IP } } = require('../common/internet'); | ||
const { createMockedLookup } = require('../common/dns'); | ||
|
||
const assert = require('assert'); | ||
const { createConnection } = require('net'); | ||
|
||
// | ||
// When testing this is MacOS, remember that the last connection will have no timeout at Node.js | ||
// level but only at operating system one. | ||
// | ||
// The default for MacOS is 75 seconds. It can be changed by doing: | ||
// | ||
// sudo sysctl net.inet.tcp.keepinit=VALUE_IN_MS | ||
// | ||
|
||
// Test that if a connection attempt times out and the socket is destroyed before the | ||
// next attempt starts then the process does not crash | ||
{ | ||
const connection = createConnection({ | ||
host: 'example.org', | ||
port: 443, | ||
lookup: createMockedLookup(INET4_IP, INET6_IP), | ||
autoSelectFamily: true, | ||
autoSelectFamilyAttemptTimeout: 10, | ||
}); | ||
|
||
const pass = common.mustCall(); | ||
|
||
connection.on('connectionAttemptTimeout', (address, port, family) => { | ||
assert.strictEqual(address, INET4_IP); | ||
assert.strictEqual(port, 443); | ||
assert.strictEqual(family, 4); | ||
connection.destroy(); | ||
pass() | ||
}); | ||
|
||
// Depending on the network, it might be impossible to obtain a timeout in 10ms, | ||
// which is the minimum value allowed by network family autoselection. | ||
// At the time of writing (Dec 2023), the network times out on local machine and in the Node CI, | ||
// but it does not on GitHub actions runner. | ||
// Therefore, after five seconds we just consider this test as passed. | ||
setTimeout(() => { | ||
pass() | ||
process.exit(0) | ||
}, 5000).unref() | ||
} |