• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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