From aa8f6f85596075a543ed2f2821c1819f5e3d7ff5 Mon Sep 17 00:00:00 2001 From: Paolo Insogna Date: Tue, 5 Dec 2023 15:15:38 +0100 Subject: [PATCH] net: improved test --- .../test-net-autoselectfamily-events.js | 71 +++++++++++++++++- .../test-net-autoselectfamily-events.js | 72 ------------------- 2 files changed, 69 insertions(+), 74 deletions(-) delete mode 100644 test/parallel/test-net-autoselectfamily-events.js diff --git a/test/internet/test-net-autoselectfamily-events.js b/test/internet/test-net-autoselectfamily-events.js index f2eea51bedb07e..3f6f5289c88005 100644 --- a/test/internet/test-net-autoselectfamily-events.js +++ b/test/internet/test-net-autoselectfamily-events.js @@ -1,19 +1,86 @@ 'use strict'; const common = require('../common'); -const { addresses: { INET4_IP } } = require('../common/internet'); +const { addresses: { INET6_IP, INET4_IP } } = require('../common/internet'); const { createMockedLookup } = require('../common/dns'); const assert = require('assert'); const { createConnection } = require('net'); +// Test that all events are emitted when trying a single IP (which means autoselectfamily is bypassed) +{ + const connection = createConnection({ + host: 'example.org', + port: 10, + lookup: createMockedLookup(INET4_IP), + autoSelectFamily: true, + autoSelectFamilyAttemptTimeout: 10, + }); + + connection.on('connectionAttempt', common.mustCall((address, port, family) => { + assert.strictEqual(address, INET4_IP); + assert.strictEqual(port, 10); + assert.strictEqual(family, 4); + })); + + connection.on('connectionAttemptFailed', common.mustCall((address, port, family, error) => { + assert.strictEqual(address, INET4_IP); + assert.strictEqual(port, 10); + assert.strictEqual(family, 4); + + assert.ok(error.code.match(/ECONNREFUSED|EHOSTUNREACH|ETIMEDOUT/)); + })); + + connection.on('ready', common.mustNotCall()); + connection.on('error', common.mustCall()); +} + +// Test that all events are emitted when trying multiple IPs +{ + const connection = createConnection({ + host: 'example.org', + port: 10, + lookup: createMockedLookup(INET6_IP, INET4_IP), + autoSelectFamily: true, + autoSelectFamilyAttemptTimeout: 10, + }); + + const addresses = [ + { address: INET6_IP, port: 10, family: 6 }, + { address: INET6_IP, port: 10, family: 6 }, + { address: INET4_IP, port: 10, family: 4 }, + { address: INET4_IP, port: 10, family: 4 }, + ]; + + connection.on('connectionAttempt', common.mustCall((address, port, family) => { + const expected = addresses.shift(); + + assert.strictEqual(address, expected.address); + assert.strictEqual(port, expected.port); + assert.strictEqual(family, expected.family); + }, 2)); + + connection.on('connectionAttemptFailed', common.mustCall((address, port, family, error) => { + const expected = addresses.shift(); + + assert.strictEqual(address, expected.address); + assert.strictEqual(port, expected.port); + assert.strictEqual(family, expected.family); + + assert.ok(error.code.match(/ECONNREFUSED|EHOSTUNREACH|ETIMEDOUT/)); + }, 2)); + + connection.on('ready', common.mustNotCall()); + connection.on('error', common.mustCall()); +} + // 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, '127.0.0.1'), + lookup: createMockedLookup(INET4_IP, INET6_IP), autoSelectFamily: true, autoSelectFamilyAttemptTimeout: 10, }); diff --git a/test/parallel/test-net-autoselectfamily-events.js b/test/parallel/test-net-autoselectfamily-events.js deleted file mode 100644 index 82477713244eb6..00000000000000 --- a/test/parallel/test-net-autoselectfamily-events.js +++ /dev/null @@ -1,72 +0,0 @@ -'use strict'; - -const common = require('../common'); -const { createMockedLookup } = require('../common/dns'); - -const assert = require('assert'); -const { createConnection } = require('net'); - -// Test that all events are emitted when trying a single IP (which means autoselectfamily is bypassed) -{ - const connection = createConnection({ - host: 'example.org', - port: 10, - lookup: createMockedLookup('127.0.0.1'), - autoSelectFamily: true, - autoSelectFamilyAttemptTimeout: 10, - }); - - connection.on('connectionAttempt', common.mustCall((address, port, family) => { - assert.strictEqual(address, '127.0.0.1'); - assert.strictEqual(port, 10); - assert.strictEqual(family, 4); - })); - - connection.on('connectionAttemptFailed', common.mustCall((address, port, family, error) => { - assert.strictEqual(address, '127.0.0.1'); - assert.strictEqual(port, 10); - assert.strictEqual(family, 4); - assert.strictEqual(error.code, 'ECONNREFUSED'); - })); - - connection.on('ready', common.mustNotCall()); - connection.on('error', common.mustCall()); -} - -// Test that all events are emitted when trying multiple IPs -{ - const connection = createConnection({ - host: 'example.org', - port: 10, - lookup: createMockedLookup('::1', '127.0.0.1'), - autoSelectFamily: true, - autoSelectFamilyAttemptTimeout: 10, - }); - - const addresses = [ - { address: '::1', port: 10, family: 6 }, - { address: '::1', port: 10, family: 6 }, - { address: '127.0.0.1', port: 10, family: 4 }, - { address: '127.0.0.1', port: 10, family: 4 }, - ]; - - connection.on('connectionAttempt', common.mustCall((address, port, family) => { - const expected = addresses.shift(); - - assert.strictEqual(address, expected.address); - assert.strictEqual(port, expected.port); - assert.strictEqual(family, expected.family); - }, 2)); - - connection.on('connectionAttemptFailed', common.mustCall((address, port, family, error) => { - const expected = addresses.shift(); - - assert.strictEqual(address, expected.address); - assert.strictEqual(port, expected.port); - assert.strictEqual(family, expected.family); - assert.strictEqual(error.code, 'ECONNREFUSED'); - }, 2)); - - connection.on('ready', common.mustNotCall()); - connection.on('error', common.mustCall()); -}