node/test/parallel/test-dgram-multicast-set-interface.js
cjihrig c5e3353953
test: add missing assertion
This commit adds an assertion to an existing try...catch
statement. Unfortunately, assert.throws() cannot be used
because the operation succeeds on some platforms, throws
EINVAL on some platforms, and throws ENOPROTOOPT on
others.

PR-URL: https://github.com/nodejs/node/pull/15519
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Yuta Hiroto <hello@about-hiroppy.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
2017-10-24 20:29:25 -04:00

124 lines
2.9 KiB
JavaScript

'use strict';
const common = require('../common');
const assert = require('assert');
const dgram = require('dgram');
{
const socket = dgram.createSocket('udp4');
socket.bind(0);
socket.on('listening', common.mustCall(() => {
// Explicitly request default system selection
socket.setMulticastInterface('0.0.0.0');
socket.close();
}));
}
{
const socket = dgram.createSocket('udp4');
socket.bind(0);
socket.on('listening', common.mustCall(() => {
socket.close(common.mustCall(() => {
assert.throws(() => { socket.setMulticastInterface('0.0.0.0'); },
/Not running/);
}));
}));
}
{
const socket = dgram.createSocket('udp4');
socket.bind(0);
socket.on('listening', common.mustCall(() => {
// Try to set with an invalid interfaceAddress (wrong address class)
//
// This operation succeeds on some platforms, throws `EINVAL` on some
// platforms, and throws `ENOPROTOOPT` on others. This is unpleasant, but
// we should at least test for it.
try {
socket.setMulticastInterface('::');
} catch (e) {
assert(e.code === 'EINVAL' || e.code === 'ENOPROTOOPT');
}
socket.close();
}));
}
{
const socket = dgram.createSocket('udp4');
socket.bind(0);
socket.on('listening', common.mustCall(() => {
// Try to set with an invalid interfaceAddress (wrong Type)
assert.throws(() => {
socket.setMulticastInterface(1);
}, /TypeError/);
socket.close();
}));
}
{
const socket = dgram.createSocket('udp4');
socket.bind(0);
socket.on('listening', common.mustCall(() => {
// Try to set with an invalid interfaceAddress (non-unicast)
assert.throws(() => {
socket.setMulticastInterface('224.0.0.2');
}, /Error/);
socket.close();
}));
}
// If IPv6 is not supported, skip the rest of the test. However, don't call
// common.skip(), which calls process.exit() while there is outstanding
// common.mustCall() activity.
if (!common.hasIPv6)
return;
{
const socket = dgram.createSocket('udp6');
socket.bind(0);
socket.on('listening', common.mustCall(() => {
// Try to set with an invalid interfaceAddress ('undefined')
assert.throws(() => {
socket.setMulticastInterface(String(undefined));
}, /EINVAL/);
socket.close();
}));
}
{
const socket = dgram.createSocket('udp6');
socket.bind(0);
socket.on('listening', common.mustCall(() => {
// Try to set with an invalid interfaceAddress ('')
assert.throws(() => {
socket.setMulticastInterface('');
}, /EINVAL/);
socket.close();
}));
}
{
const socket = dgram.createSocket('udp6');
socket.bind(0);
socket.on('listening', common.mustCall(() => {
// Using lo0 for OsX, on all other OSes, an invalid Scope gets
// turned into #0 (default selection) which is also acceptable.
socket.setMulticastInterface('::%lo0');
socket.close();
}));
}