-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathtest.js
More file actions
101 lines (92 loc) · 4.01 KB
/
test.js
File metadata and controls
101 lines (92 loc) · 4.01 KB
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
'use strict';
const assert = require('assert');
const nodeDns = require('dns');
const osDns = require('./');
describe('lookup', function() {
this.timeout(60_000);
const queries = [
{ type: 'A', method: 'resolve4', hostname: 'example.org' },
{ type: 'AAAA', method: 'resolve6', hostname: 'example.org' },
{ type: 'TXT', method: 'resolveTxt', hostname: 'example.org' },
{ type: 'CNAME', method: 'resolveCname', hostname: 'en.wikipedia.org' },
{ type: 'SRV', method: 'resolveSrv', hostname: '_mongodb._tcp.cluster0.ucdwm.mongodb.net' },
];
for (const useOsDns of [osDns, osDns.withNodeFallback]) {
context(`when ${useOsDns === osDns ? 'not ': ''}using a Node.js fallback`, () => {
for (const { type, method, hostname } of queries) {
context(`for a ${type} query`, () => {
it('looks up with resolve() and matches Node.js', (done) => {
useOsDns.resolve(hostname, type, ((err, osResults) => {
if (err) { return done(err); }
if (useOsDns === osDns.withNodeFallback) {
assert.strictEqual(osDns.wasNativelyLookedUp(osResults), true);
}
nodeDns.resolve(hostname, type, ((err, nodeResults) => {
if (err) { return done(err); }
assert.deepStrictEqual(new Set(osResults), new Set(nodeResults));
done();
}));
}));
});
it('looks up with resolve<X>() and matches Node.js', (done) => {
useOsDns[method](hostname, ((err, osResults) => {
if (err) { return done(err); }
if (useOsDns === osDns.withNodeFallback) {
assert.strictEqual(osDns.wasNativelyLookedUp(osResults), true);
}
nodeDns[method](hostname, ((err, nodeResults) => {
if (err) { return done(err); }
assert.deepStrictEqual(new Set(osResults), new Set(nodeResults));
done();
}));
}));
});
it('looks up with promises.resolve() and matches Node.js', async() => {
const [ osResults, nodeResults ] = await Promise.all([
useOsDns.promises.resolve(hostname, type),
nodeDns.promises.resolve(hostname, type),
]);
if (useOsDns === osDns.withNodeFallback) {
assert.strictEqual(osDns.wasNativelyLookedUp(osResults), true);
}
assert.deepStrictEqual(new Set(osResults), new Set(nodeResults));
});
it('looks up with promises.resolve<X>() and matches Node.js', async() => {
const [ osResults, nodeResults ] = await Promise.all([
useOsDns.promises[method](hostname),
nodeDns.promises[method](hostname),
]);
if (useOsDns === osDns.withNodeFallback) {
assert.strictEqual(osDns.wasNativelyLookedUp(osResults), true);
}
assert.deepStrictEqual(new Set(osResults), new Set(nodeResults));
});
});
}
for (const { type, method } of queries) {
it('provides an error with resolve()', (done) => {
useOsDns.resolve('nonexistent.nx', type, (err) => {
if (!err) {
return done(new Error('missed exception'));
}
done();
});
});
it('provides an error with resolve<X>()', (done) => {
useOsDns[method]('nonexistent.nx', (err) => {
if (!err) {
return done(new Error('missed exception'));
}
done();
});
});
it('provides an error with promises.resolve()', async() => {
await assert.rejects(() => osDns.promises.resolve('nonexistent.nx', type));
});
it('provides an error with promises.resolve<X>()', async() => {
await assert.rejects(() => osDns.promises[method]('nonexistent.nx'));
});
}
});
}
});