-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.test.js
129 lines (117 loc) · 4.95 KB
/
index.test.js
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
// import module dns
var dns = require('dns');
// backup original lookup functions
var originalLookup = dns.lookup;
var originalPromiseLookup = undefined;
if (dns.promises) {
originalPromiseLookup = dns.promises.lookup;
}
// hijack module dns
require('./index.js');
// constants
var DNS_SERVERS = ['8.8.8.8'];
var HOSTNAME = 'ipv6-test.com';
// use specified dns servers
lookup = dns.lookup;
dns.setServers(DNS_SERVERS);
// utility functions
function verifyLookup(options) {
return function (done) {
if (options === undefined) {
dns.lookup(HOSTNAME, function (err, address, family) {
if (err) {
done(err);
} else {
originalLookup(HOSTNAME, 4, function (err2, address2, family2) {
if (err2) {
done(err2);
} else {
try {
expect(address2).toEqual(address);
expect(family2).toEqual(family);
done();
} catch (error) {
done(error);
}
}
});
}
});
} else {
dns.lookup(HOSTNAME, options, function (err, address, family) {
if (err) {
done(err);
} else {
var opts = 4;
if (typeof options === 'object') {
opts = Object.assign({}, options);
opts.family = 4;
}
originalLookup(HOSTNAME, opts, function (err2, address2, family2) {
if (err2) {
done(err2);
} else {
try {
expect(family2).toEqual(family);
expect(address2).toEqual(address);
done();
} catch (error) {
done(error);
}
}
});
}
});
}
};
}
function verifyPromiseLookup(options) {
return function () {
if (options === undefined) {
return Promise.all([
dns.promises.lookup(HOSTNAME),
originalPromiseLookup(HOSTNAME, 4)
]).then(function (results) {
expect(results[1]).toEqual(results[0]);
});
} else {
var opts = 4;
if (typeof options === 'object') {
opts = Object.assign({}, options);
opts.family = 4;
}
return Promise.all([
dns.promises.lookup(HOSTNAME, options),
originalPromiseLookup(HOSTNAME, opts)
]).then(function (results) {
expect(results[1]).toEqual(results[0]);
});
}
};
}
test('dns.setServers() never changes dns.lookup()', function () { expect(dns.lookup).toBe(lookup) });
test('dns.lookup(hostname)', verifyLookup());
test('dns.lookup(hostname, 4)', verifyLookup(4));
test('dns.lookup(hostname, 6)', verifyLookup(6));
test('dns.lookup(hostname, 0)', verifyLookup(0));
test('dns.lookup(hostname, {family: 4})', verifyLookup({ family: 4 }));
test('dns.lookup(hostname, {family: 6})', verifyLookup({ family: 6 }));
test('dns.lookup(hostname, {family: 0})', verifyLookup({ family: 0 }));
test('dns.lookup(hostname, {family: 4, all: true})', verifyLookup({ family: 4, all: true }));
test('dns.lookup(hostname, {family: 6, all: true})', verifyLookup({ family: 6, all: true }));
test('dns.lookup(hostname, {family: 0, all: true})', verifyLookup({ family: 0, all: true }));
if (dns.promises) {
promiseLookup = dns.promises.lookup;
dns.promises.setServers(DNS_SERVERS);
test('dns.promises.setServers() never changes dns.promises.lookup()', function () { expect(dns.promises.lookup).toBe(promiseLookup) });
test('dns.promises.lookup(hostname)', verifyPromiseLookup());
test('dns.promises.lookup(hostname, 4)', verifyPromiseLookup(4));
test('dns.promises.lookup(hostname, 6)', verifyPromiseLookup(6));
test('dns.promises.lookup(hostname, 0)', verifyPromiseLookup(0));
test('dns.promises.lookup(hostname, {family: 4})', verifyPromiseLookup({ family: 4 }));
test('dns.promises.lookup(hostname, {family: 6})', verifyPromiseLookup({ family: 6 }));
test('dns.promises.lookup(hostname, {family: 0})', verifyPromiseLookup({ family: 0 }));
test('dns.promises.lookup(hostname, {family: 4, all: true})', verifyPromiseLookup({ family: 4, all: true }));
test('dns.promises.lookup(hostname, {family: 6, all: true})', verifyPromiseLookup({ family: 6, all: true }));
test('dns.promises.lookup(hostname, {family: 0, all: true})', verifyPromiseLookup({ family: 0, all: true }));
}