node/test/parallel/test-dgram-implicit-bind-failure.js
Rich Trott 06c29a66d4 test: remove common.fail()
common.fail() was added to paste over issues with assert.fail() function
signature. assert.fail() has been updated to accept a single argument so
common.fail() is no longer necessary.

PR-URL: https://github.com/nodejs/node/pull/12293
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
2017-04-12 14:25:33 -07:00

56 lines
1.6 KiB
JavaScript

'use strict';
const common = require('../common');
const assert = require('assert');
const dgram = require('dgram');
const dns = require('dns');
// Monkey patch dns.lookup() so that it always fails.
dns.lookup = function(address, family, callback) {
process.nextTick(() => { callback(new Error('fake DNS')); });
};
const socket = dgram.createSocket('udp4');
let dnsFailures = 0;
let sendFailures = 0;
process.on('exit', () => {
assert.strictEqual(dnsFailures, 3);
assert.strictEqual(sendFailures, 3);
});
socket.on('error', (err) => {
if (/^Error: fake DNS$/.test(err)) {
// The DNS lookup should fail since it is monkey patched. At that point in
// time, the send queue should be populated with the send() operation. There
// should also be two listeners - this function and the dgram internal one
// time error handler.
dnsFailures++;
assert(Array.isArray(socket._queue));
assert.strictEqual(socket._queue.length, 1);
assert.strictEqual(socket.listenerCount('error'), 2);
return;
}
if (/^Error: Unable to send data$/.test(err)) {
// On error, the queue should be destroyed and this function should be
// the only listener.
sendFailures++;
assert.strictEqual(socket._queue, undefined);
assert.strictEqual(socket.listenerCount('error'), 1);
return;
}
assert.fail(`Unexpected error: ${err}`);
});
// Initiate a few send() operations, which will fail.
socket.send('foobar', common.PORT, 'localhost');
process.nextTick(() => {
socket.send('foobar', common.PORT, 'localhost');
});
setImmediate(() => {
socket.send('foobar', common.PORT, 'localhost');
});