diff --git a/test/parallel/test-internal-socket-list-receive.js b/test/parallel/test-internal-socket-list-receive.js index 5315adbfd4..c0eb223719 100644 --- a/test/parallel/test-internal-socket-list-receive.js +++ b/test/parallel/test-internal-socket-list-receive.js @@ -17,6 +17,7 @@ const key = 'test-key'; const list = new SocketListReceive(child, key); list.child.emit('internalMessage', { key, cmd: 'NODE_SOCKET_NOTIFY_CLOSE' }); + list.child.emit('internalMessage', { key, cmd: 'NODE_SOCKET_GET_COUNT' }); } // Verify that a "NODE_SOCKET_ALL_CLOSED" message will be sent. diff --git a/test/parallel/test-internal-socket-list-send.js b/test/parallel/test-internal-socket-list-send.js index a5020a431c..10413bfdbc 100644 --- a/test/parallel/test-internal-socket-list-send.js +++ b/test/parallel/test-internal-socket-list-send.js @@ -112,3 +112,25 @@ const key = 'test-key'; assert.strictEqual(child.listenerCount('disconnect'), 0); })); } + +// Verify that an error will be received in callback when child is +// disconnected after sending a message and before getting the reply. +{ + const count = 1; + const child = Object.assign(new EventEmitter(), { + connected: true, + send: function(msg) { + process.nextTick(() => { + this.emit('disconnect'); + this.emit('internalMessage', { key, count, cmd: 'NODE_SOCKET_COUNT' }); + }); + } + }); + + const list = new SocketListSend(child, key); + + list.getConnections(common.mustCall((err, msg) => { + assert.strictEqual(err.message, 'child closed before reply'); + assert.strictEqual(child.listenerCount('internalMessage'), 0); + })); +}