mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 21:19:50 +01:00
2cb94240f9
PR-URL: https://github.com/nodejs/node/pull/51045 Fixes: https://github.com/nodejs/node/issues/48763 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
84 lines
2.5 KiB
JavaScript
84 lines
2.5 KiB
JavaScript
'use strict';
|
|
|
|
const common = require('../common');
|
|
const { createMockedLookup } = require('../common/dns');
|
|
|
|
const assert = require('assert');
|
|
const { createConnection, createServer, setDefaultAutoSelectFamily } = require('net');
|
|
|
|
const autoSelectFamilyAttemptTimeout = common.defaultAutoSelectFamilyAttemptTimeout;
|
|
|
|
// Test that IPV4 is reached by default if IPV6 is not reachable and the default is enabled
|
|
{
|
|
const ipv4Server = createServer((socket) => {
|
|
socket.on('data', common.mustCall(() => {
|
|
socket.write('response-ipv4');
|
|
socket.end();
|
|
}));
|
|
});
|
|
|
|
ipv4Server.listen(0, '127.0.0.1', common.mustCall(() => {
|
|
setDefaultAutoSelectFamily(true);
|
|
|
|
const connection = createConnection({
|
|
host: 'example.org',
|
|
port: ipv4Server.address().port,
|
|
lookup: createMockedLookup('::1', '127.0.0.1'),
|
|
autoSelectFamilyAttemptTimeout,
|
|
});
|
|
|
|
let response = '';
|
|
connection.setEncoding('utf-8');
|
|
|
|
connection.on('data', (chunk) => {
|
|
response += chunk;
|
|
});
|
|
|
|
connection.on('end', common.mustCall(() => {
|
|
assert.strictEqual(response, 'response-ipv4');
|
|
ipv4Server.close();
|
|
}));
|
|
|
|
connection.write('request');
|
|
}));
|
|
}
|
|
|
|
// Test that IPV4 is not reached by default if IPV6 is not reachable and the default is disabled
|
|
{
|
|
const ipv4Server = createServer((socket) => {
|
|
socket.on('data', common.mustCall(() => {
|
|
socket.write('response-ipv4');
|
|
socket.end();
|
|
}));
|
|
});
|
|
|
|
ipv4Server.listen(0, '127.0.0.1', common.mustCall(() => {
|
|
setDefaultAutoSelectFamily(false);
|
|
|
|
const port = ipv4Server.address().port;
|
|
|
|
const connection = createConnection({
|
|
host: 'example.org',
|
|
port,
|
|
lookup: createMockedLookup('::1', '127.0.0.1'),
|
|
});
|
|
|
|
connection.on('ready', common.mustNotCall());
|
|
connection.on('error', common.mustCall((error) => {
|
|
if (common.hasIPv6) {
|
|
assert.strictEqual(error.code, 'ECONNREFUSED');
|
|
assert.strictEqual(error.message, `connect ECONNREFUSED ::1:${port}`);
|
|
} else if (error.code === 'EAFNOSUPPORT') {
|
|
assert.strictEqual(error.message, `connect EAFNOSUPPORT ::1:${port} - Local (undefined:undefined)`);
|
|
} else if (error.code === 'EUNATCH') {
|
|
assert.strictEqual(error.message, `connect EUNATCH ::1:${port} - Local (:::0)`);
|
|
} else {
|
|
assert.strictEqual(error.code, 'EADDRNOTAVAIL');
|
|
assert.strictEqual(error.message, `connect EADDRNOTAVAIL ::1:${port} - Local (:::0)`);
|
|
}
|
|
|
|
ipv4Server.close();
|
|
}));
|
|
}));
|
|
}
|