From 7a1216d82bfc80993d9e6b0bb039d587f7e6fb24 Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Tue, 24 Sep 2019 23:00:23 -0700 Subject: [PATCH] test: fix flaky test-cluster-net-listen-ipv6only-none test-cluster-net-listen-ipv6only-none was using port `0` for an IPv6-only operation and assuming that the operating system would supply a port that was also available in IPv4. However, CI results seem to indicate that a port can be supplied that is in use by IPv4 but available to IPv6, resulting in the test failing. Use `common.PORT` to avoid this issue. Fixes: https://github.com/nodejs/node/issues/29679 --- .../test-cluster-net-listen-ipv6only-none.js | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) rename test/{parallel => sequential}/test-cluster-net-listen-ipv6only-none.js (67%) diff --git a/test/parallel/test-cluster-net-listen-ipv6only-none.js b/test/sequential/test-cluster-net-listen-ipv6only-none.js similarity index 67% rename from test/parallel/test-cluster-net-listen-ipv6only-none.js rename to test/sequential/test-cluster-net-listen-ipv6only-none.js index 401afbc035e36a..d520b7f25ccf30 100644 --- a/test/parallel/test-cluster-net-listen-ipv6only-none.js +++ b/test/sequential/test-cluster-net-listen-ipv6only-none.js @@ -17,13 +17,16 @@ const WORKER_ACCOUNT = 3; if (cluster.isMaster) { const workers = new Map(); - let address; const countdown = new Countdown(WORKER_ACCOUNT, () => { - // Make sure the `ipv6Only` option works. + // Make sure the `ipv6Only` option works. This is the part of the test that + // requires the whole test to use `common.PORT` rather than port `0`. If it + // used port `0` instead, then the operating system can supply a port that + // is available for the IPv6 interface but in use by the IPv4 interface. + // Refs: https://github.com/nodejs/node/issues/29679 const server = net.createServer().listen({ host: '0.0.0.0', - port: address.port, + port: common.PORT, }, common.mustCall(() => { // Exit. server.close(); @@ -37,13 +40,9 @@ if (cluster.isMaster) { const worker = cluster.fork().on('exit', common.mustCall((statusCode) => { assert.strictEqual(statusCode, 0); })).on('listening', common.mustCall((workerAddress) => { - if (!address) { - address = workerAddress; - } else { - assert.strictEqual(address.addressType, workerAddress.addressType); - assert.strictEqual(address.host, workerAddress.host); - assert.strictEqual(address.port, workerAddress.port); - } + assert.strictEqual(workerAddress.addressType, 6); + assert.strictEqual(workerAddress.address, host); + assert.strictEqual(workerAddress.port, common.PORT); countdown.dec(); })); @@ -52,7 +51,7 @@ if (cluster.isMaster) { } else { net.createServer().listen({ host, - port: 0, + port: common.PORT, ipv6Only: true, }, common.mustCall()); }