From 245c885abb472c90c9cc377750eda3bb2a14dce3 Mon Sep 17 00:00:00 2001 From: Santiago Gimeno Date: Thu, 21 Jun 2018 10:01:43 +0200 Subject: [PATCH] test: fix test-net-socket-constructor So it doesn't fail when creating a socket whose `fd` is already being watched. Test that functionality now inside a cluster worker. Refs: https://github.com/libuv/libuv/pull/1851 Refs: https://github.com/libuv/libuv/issues/1897 PR-URL: https://github.com/nodejs/node/pull/21466 Reviewed-By: Anna Henningsen Reviewed-By: Ben Noordhuis Reviewed-By: Colin Ihrig Reviewed-By: James M Snell --- test/parallel/test-net-socket-constructor.js | 52 +++++++++++++------- 1 file changed, 33 insertions(+), 19 deletions(-) diff --git a/test/parallel/test-net-socket-constructor.js b/test/parallel/test-net-socket-constructor.js index ec2e99deb84880..90b0907f488a9a 100644 --- a/test/parallel/test-net-socket-constructor.js +++ b/test/parallel/test-net-socket-constructor.js @@ -2,6 +2,7 @@ const common = require('../common'); const assert = require('assert'); +const cluster = require('cluster'); const net = require('net'); common.expectsError(() => { @@ -25,27 +26,40 @@ function test(sock, readable, writable) { assert.strictEqual(socket.writable, writable); } -test(undefined, false, false); +if (cluster.isMaster) { + test(undefined, false, false); -const server = net.createServer(common.mustCall((socket) => { - test(socket, true, true); - test({ handle: socket._handle }, false, false); - test({ handle: socket._handle, readable: true, writable: true }, true, true); - if (socket._handle.fd >= 0) { - test(socket._handle.fd, false, false); - test({ fd: socket._handle.fd }, false, false); - test({ fd: socket._handle.fd, readable: true, writable: true }, true, true); - } + const server = net.createServer(common.mustCall((socket) => { + socket.unref(); + test(socket, true, true); + test({ handle: socket._handle }, false, false); + test({ handle: socket._handle, readable: true, writable: true }, + true, true); + server.close(); + })); - server.close(); -})); + server.listen(common.mustCall(() => { + const { port } = server.address(); + const socket = net.connect(port, common.mustCall(() => { + test(socket, true, true); + socket.end(); + })); -server.listen(common.mustCall(() => { - const { port } = server.address(); - const socket = net.connect(port, common.mustCall(() => { - test(socket, true, true); - socket.end(); + test(socket, false, true); })); - test(socket, false, true); -})); + cluster.setupMaster({ + stdio: ['pipe', 'pipe', 'pipe', 'ipc', 'pipe', 'pipe', 'pipe'] + }); + + const worker = cluster.fork(); + worker.on('exit', common.mustCall((code, signal) => { + assert.strictEqual(code, 0); + assert.strictEqual(signal, null); + })); +} else { + test(4, false, false); + test({ fd: 5 }, false, false); + test({ fd: 6, readable: true, writable: true }, true, true); + process.disconnect(); +}