1// Flags: --expose-internals 2'use strict'; 3const common = require('../common'); 4const assert = require('assert'); 5const dgram = require('dgram'); 6const { internalBinding } = require('internal/test/binding'); 7const { UV_UNKNOWN } = internalBinding('uv'); 8const { kStateSymbol } = require('internal/dgram'); 9const mockError = new Error('mock DNS error'); 10 11function getSocket(callback) { 12 const socket = dgram.createSocket('udp4'); 13 14 socket.on('message', common.mustNotCall('Should not receive any messages.')); 15 socket.bind(common.mustCall(() => { 16 socket[kStateSymbol].handle.lookup = function(address, callback) { 17 process.nextTick(callback, mockError); 18 }; 19 20 callback(socket); 21 })); 22 return socket; 23} 24 25getSocket((socket) => { 26 socket.on('error', common.mustCall((err) => { 27 socket.close(); 28 assert.strictEqual(err, mockError); 29 })); 30 31 socket.send('foo', socket.address().port, 'localhost'); 32}); 33 34getSocket((socket) => { 35 const callback = common.mustCall((err) => { 36 socket.close(); 37 assert.strictEqual(err, mockError); 38 }); 39 40 socket.send('foo', socket.address().port, 'localhost', callback); 41}); 42 43{ 44 const socket = dgram.createSocket('udp4'); 45 46 socket.on('message', common.mustNotCall('Should not receive any messages.')); 47 48 socket.bind(common.mustCall(() => { 49 const port = socket.address().port; 50 const callback = common.mustCall((err) => { 51 socket.close(); 52 assert.strictEqual(err.code, 'UNKNOWN'); 53 assert.strictEqual(err.errno, 'UNKNOWN'); 54 assert.strictEqual(err.syscall, 'send'); 55 assert.strictEqual(err.address, common.localhostIPv4); 56 assert.strictEqual(err.port, port); 57 assert.strictEqual( 58 err.message, 59 `${err.syscall} ${err.code} ${err.address}:${err.port}` 60 ); 61 }); 62 63 socket[kStateSymbol].handle.send = function() { 64 return UV_UNKNOWN; 65 }; 66 67 socket.send('foo', port, common.localhostIPv4, callback); 68 })); 69} 70