'use strict'; const common = require('../common'); const { ok, strictEqual, throws, } = require('assert'); const { SocketAddress, } = require('net'); { const sa = new SocketAddress(); strictEqual(sa.address, '127.0.0.1'); strictEqual(sa.port, 0); strictEqual(sa.family, 'ipv4'); strictEqual(sa.flowlabel, 0); const mc = new MessageChannel(); mc.port1.onmessage = common.mustCall(({ data }) => { ok(SocketAddress.isSocketAddress(data)); strictEqual(data.address, '127.0.0.1'); strictEqual(data.port, 0); strictEqual(data.family, 'ipv4'); strictEqual(data.flowlabel, 0); mc.port1.close(); }); mc.port2.postMessage(sa); } { const sa = new SocketAddress({}); strictEqual(sa.address, '127.0.0.1'); strictEqual(sa.port, 0); strictEqual(sa.family, 'ipv4'); strictEqual(sa.flowlabel, 0); } { const sa = new SocketAddress({ address: '123.123.123.123', }); strictEqual(sa.address, '123.123.123.123'); strictEqual(sa.port, 0); strictEqual(sa.family, 'ipv4'); strictEqual(sa.flowlabel, 0); } { const sa = new SocketAddress({ address: '123.123.123.123', port: 80 }); strictEqual(sa.address, '123.123.123.123'); strictEqual(sa.port, 80); strictEqual(sa.family, 'ipv4'); strictEqual(sa.flowlabel, 0); } { const sa = new SocketAddress({ family: 'ipv6' }); strictEqual(sa.address, '::'); strictEqual(sa.port, 0); strictEqual(sa.family, 'ipv6'); strictEqual(sa.flowlabel, 0); } { const sa = new SocketAddress({ family: 'ipv6', flowlabel: 1, }); strictEqual(sa.address, '::'); strictEqual(sa.port, 0); strictEqual(sa.family, 'ipv6'); strictEqual(sa.flowlabel, 1); } [1, false, 'hello'].forEach((i) => { throws(() => new SocketAddress(i), { code: 'ERR_INVALID_ARG_TYPE' }); }); [1, false, {}, [], 'test'].forEach((family) => { throws(() => new SocketAddress({ family }), { code: 'ERR_INVALID_ARG_VALUE' }); }); [1, false, {}, []].forEach((address) => { throws(() => new SocketAddress({ address }), { code: 'ERR_INVALID_ARG_TYPE' }); }); [-1, false, {}, []].forEach((port) => { throws(() => new SocketAddress({ port }), { code: 'ERR_SOCKET_BAD_PORT' }); }); throws(() => new SocketAddress({ flowlabel: -1 }), { code: 'ERR_OUT_OF_RANGE' });