// Flags: --expose-internals 'use strict'; const common = require('../common'); const assert = require('assert'); const EventEmitter = require('events'); const SocketListReceive = require('internal/socket_list').SocketListReceive; const key = 'test-key'; // Verify that the message won't be sent when child is not connected. { const child = Object.assign(new EventEmitter(), { connected: false, _send: common.mustNotCall() }); 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. { const child = Object.assign(new EventEmitter(), { connected: true, _send: common.mustCall((msg) => { assert.strictEqual(msg.cmd, 'NODE_SOCKET_ALL_CLOSED'); assert.strictEqual(msg.key, key); }) }); const list = new SocketListReceive(child, key); list.child.emit('internalMessage', { key, cmd: 'NODE_SOCKET_NOTIFY_CLOSE' }); } // Verify that a "NODE_SOCKET_COUNT" message will be sent. { const child = Object.assign(new EventEmitter(), { connected: true, _send: common.mustCall((msg) => { assert.strictEqual(msg.cmd, 'NODE_SOCKET_COUNT'); assert.strictEqual(msg.key, key); assert.strictEqual(msg.count, 0); }) }); const list = new SocketListReceive(child, key); list.child.emit('internalMessage', { key, cmd: 'NODE_SOCKET_GET_COUNT' }); } // Verify that the connections count is added and an "empty" event // will be emitted when all sockets in obj were closed. { const child = new EventEmitter(); const obj = { socket: new EventEmitter() }; const list = new SocketListReceive(child, key); assert.strictEqual(list.connections, 0); list.add(obj); assert.strictEqual(list.connections, 1); list.on('empty', common.mustCall((self) => assert.strictEqual(self, list))); obj.socket.emit('close'); assert.strictEqual(list.connections, 0); }