summaryrefslogtreecommitdiff
path: root/test/parallel/test-net-dns-custom-lookup.js
blob: a7c05c82b95419a17db254a29ca9fa982b52725f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
'use strict';
const common = require('../common');
const assert = require('assert');
const net = require('net');

function check(addressType, cb) {
  const server = net.createServer(function(client) {
    client.end();
    server.close();
    cb && cb();
  });

  const address = addressType === 4 ? common.localhostIPv4 : '::1';
  server.listen(0, address, common.mustCall(function() {
    net.connect({
      port: this.address().port,
      host: 'localhost',
      family: addressType,
      lookup: lookup
    }).on('lookup', common.mustCall(function(err, ip, type) {
      assert.strictEqual(err, null);
      assert.strictEqual(address, ip);
      assert.strictEqual(type, addressType);
    }));
  }));

  function lookup(host, dnsopts, cb) {
    dnsopts.family = addressType;
    if (addressType === 4) {
      process.nextTick(function() {
        cb(null, common.localhostIPv4, 4);
      });
    } else {
      process.nextTick(function() {
        cb(null, '::1', 6);
      });
    }
  }
}

check(4, function() {
  common.hasIPv6 && check(6);
});

// Verify that bad lookup() IPs are handled.
{
  net.connect({
    host: 'localhost',
    port: 80,
    lookup(host, dnsopts, cb) {
      cb(null, undefined, 4);
    }
  }).on('error', common.expectsError({ code: 'ERR_INVALID_IP_ADDRESS' }));
}