• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Flags: --dns-result-order=ipv4first
2
3'use strict';
4const common = require('../common');
5const { addresses } = require('../common/internet');
6const assert = require('assert');
7const dns = require('dns');
8const net = require('net');
9const util = require('util');
10const isIPv4 = net.isIPv4;
11
12const dnsPromises = dns.promises;
13let running = false;
14const queue = [];
15
16function TEST(f) {
17  function next() {
18    const f = queue.shift();
19    if (f) {
20      running = true;
21      console.log(f.name);
22      f(done);
23    }
24  }
25
26  function done() {
27    running = false;
28    process.nextTick(next);
29  }
30
31  queue.push(f);
32
33  if (!running) {
34    next();
35  }
36}
37
38function checkWrap(req) {
39  assert.ok(typeof req === 'object');
40}
41
42TEST(async function test_resolve4(done) {
43  function validateResult(res) {
44    assert.ok(res.length > 0);
45
46    for (let i = 0; i < res.length; i++) {
47      assert.ok(isIPv4(res[i]));
48    }
49  }
50
51  validateResult(await dnsPromises.resolve4(addresses.INET4_HOST));
52
53  const req = dns.resolve4(
54    addresses.INET4_HOST,
55    common.mustSucceed((ips) => {
56      validateResult(ips);
57      done();
58    }));
59
60  checkWrap(req);
61});
62
63TEST(async function test_reverse_ipv4(done) {
64  function validateResult(res) {
65    assert.ok(res.length > 0);
66
67    for (let i = 0; i < res.length; i++) {
68      assert.ok(res[i]);
69      assert.ok(typeof res[i] === 'string');
70    }
71  }
72
73  validateResult(await dnsPromises.reverse(addresses.INET4_IP));
74
75  const req = dns.reverse(
76    addresses.INET4_IP,
77    common.mustSucceed((domains) => {
78      validateResult(domains);
79      done();
80    }));
81
82  checkWrap(req);
83});
84
85TEST(async function test_lookup_ipv4_explicit(done) {
86  function validateResult(res) {
87    assert.ok(net.isIPv4(res.address));
88    assert.strictEqual(res.family, 4);
89  }
90
91  validateResult(await dnsPromises.lookup(addresses.INET4_HOST, 4));
92
93  const req = dns.lookup(
94    addresses.INET4_HOST, 4,
95    common.mustSucceed((ip, family) => {
96      validateResult({ address: ip, family });
97      done();
98    }));
99
100  checkWrap(req);
101});
102
103TEST(async function test_lookup_ipv4_implicit(done) {
104  function validateResult(res) {
105    assert.ok(net.isIPv4(res.address));
106    assert.strictEqual(res.family, 4);
107  }
108
109  validateResult(await dnsPromises.lookup(addresses.INET4_HOST));
110
111  const req = dns.lookup(
112    addresses.INET4_HOST,
113    common.mustSucceed((ip, family) => {
114      validateResult({ address: ip, family });
115      done();
116    }));
117
118  checkWrap(req);
119});
120
121TEST(async function test_lookup_ipv4_explicit_object(done) {
122  function validateResult(res) {
123    assert.ok(net.isIPv4(res.address));
124    assert.strictEqual(res.family, 4);
125  }
126
127  validateResult(await dnsPromises.lookup(addresses.INET4_HOST, { family: 4 }));
128
129  const req = dns.lookup(addresses.INET4_HOST, {
130    family: 4,
131  }, common.mustSucceed((ip, family) => {
132    validateResult({ address: ip, family });
133    done();
134  }));
135
136  checkWrap(req);
137});
138
139TEST(async function test_lookup_ipv4_hint_addrconfig(done) {
140  function validateResult(res) {
141    assert.ok(net.isIPv4(res.address));
142    assert.strictEqual(res.family, 4);
143  }
144
145  validateResult(await dnsPromises.lookup(addresses.INET4_HOST, {
146    hints: dns.ADDRCONFIG,
147  }));
148
149  const req = dns.lookup(addresses.INET4_HOST, {
150    hints: dns.ADDRCONFIG,
151  }, common.mustSucceed((ip, family) => {
152    validateResult({ address: ip, family });
153    done();
154  }));
155
156  checkWrap(req);
157});
158
159TEST(async function test_lookup_ip_ipv4(done) {
160  function validateResult(res) {
161    assert.strictEqual(res.address, '127.0.0.1');
162    assert.strictEqual(res.family, 4);
163  }
164
165  validateResult(await dnsPromises.lookup('127.0.0.1'));
166
167  const req = dns.lookup('127.0.0.1',
168                         common.mustSucceed((ip, family) => {
169                           validateResult({ address: ip, family });
170                           done();
171                         }));
172
173  checkWrap(req);
174});
175
176TEST(async function test_lookup_localhost_ipv4(done) {
177  function validateResult(res) {
178    assert.strictEqual(res.address, '127.0.0.1');
179    assert.strictEqual(res.family, 4);
180  }
181
182  validateResult(await dnsPromises.lookup('localhost', 4));
183
184  const req = dns.lookup('localhost', 4,
185                         common.mustSucceed((ip, family) => {
186                           validateResult({ address: ip, family });
187                           done();
188                         }));
189
190  checkWrap(req);
191});
192
193TEST(async function test_lookup_all_ipv4(done) {
194  function validateResult(res) {
195    assert.ok(Array.isArray(res));
196    assert.ok(res.length > 0);
197
198    res.forEach((ip) => {
199      assert.ok(isIPv4(ip.address));
200      assert.strictEqual(ip.family, 4);
201    });
202  }
203
204  validateResult(await dnsPromises.lookup(addresses.INET4_HOST, {
205    all: true,
206    family: 4,
207  }));
208
209  const req = dns.lookup(
210    addresses.INET4_HOST,
211    { all: true, family: 4 },
212    common.mustSucceed((ips) => {
213      validateResult(ips);
214      done();
215    }),
216  );
217
218  checkWrap(req);
219});
220
221TEST(async function test_lookupservice_ip_ipv4(done) {
222  function validateResult(res) {
223    assert.strictEqual(typeof res.hostname, 'string');
224    assert(res.hostname);
225    assert(['http', 'www', '80'].includes(res.service));
226  }
227
228  validateResult(await dnsPromises.lookupService('127.0.0.1', 80));
229
230  const req = dns.lookupService(
231    '127.0.0.1', 80,
232    common.mustSucceed((hostname, service) => {
233      validateResult({ hostname, service });
234      done();
235    }),
236  );
237
238  checkWrap(req);
239});
240
241TEST(function test_lookupservice_ip_ipv4_promise(done) {
242  util.promisify(dns.lookupService)('127.0.0.1', 80)
243    .then(common.mustCall(({ hostname, service }) => {
244      assert.strictEqual(typeof hostname, 'string');
245      assert(hostname.length > 0);
246      assert(['http', 'www', '80'].includes(service));
247      done();
248    }));
249});
250