test: split up internet dns tests · nodejs/node@9e5f099
1+'use strict';
2+var common = require('../common');
3+var assert = require('assert'),
4+dns = require('dns'),
5+net = require('net'),
6+isIP = net.isIP,
7+isIPv4 = net.isIPv4;
8+var util = require('util');
9+10+var expected = 0,
11+completed = 0,
12+running = false,
13+queue = [];
14+15+function TEST(f) {
16+function next() {
17+var f = queue.shift();
18+if (f) {
19+running = true;
20+console.log(f.name);
21+f(done);
22+}
23+}
24+25+function done() {
26+running = false;
27+completed++;
28+process.nextTick(next);
29+}
30+31+expected++;
32+queue.push(f);
33+34+if (!running) {
35+next();
36+}
37+}
38+39+function checkWrap(req) {
40+assert.ok(typeof req === 'object');
41+}
42+43+TEST(function test_resolve4(done) {
44+var req = dns.resolve4('www.google.com', function(err, ips) {
45+if (err) throw err;
46+47+assert.ok(ips.length > 0);
48+49+for (var i = 0; i < ips.length; i++) {
50+assert.ok(isIPv4(ips[i]));
51+}
52+53+done();
54+});
55+56+checkWrap(req);
57+});
58+59+TEST(function test_reverse_ipv4(done) {
60+var req = dns.reverse('8.8.8.8', function(err, domains) {
61+if (err) throw err;
62+63+assert.ok(domains.length > 0);
64+65+for (var i = 0; i < domains.length; i++) {
66+assert.ok(domains[i]);
67+assert.ok(typeof domains[i] === 'string');
68+}
69+70+done();
71+});
72+73+checkWrap(req);
74+});
75+76+TEST(function test_lookup_ipv4_explicit(done) {
77+var req = dns.lookup('www.google.com', 4, function(err, ip, family) {
78+if (err) throw err;
79+assert.ok(net.isIPv4(ip));
80+assert.strictEqual(family, 4);
81+82+done();
83+});
84+85+checkWrap(req);
86+});
87+88+TEST(function test_lookup_ipv4_implicit(done) {
89+var req = dns.lookup('www.google.com', function(err, ip, family) {
90+if (err) throw err;
91+assert.ok(net.isIPv4(ip));
92+assert.strictEqual(family, 4);
93+94+done();
95+});
96+97+checkWrap(req);
98+});
99+100+TEST(function test_lookup_ipv4_explicit_object(done) {
101+var req = dns.lookup('www.google.com', {
102+family: 4
103+}, function(err, ip, family) {
104+if (err) throw err;
105+assert.ok(net.isIPv4(ip));
106+assert.strictEqual(family, 4);
107+108+done();
109+});
110+111+checkWrap(req);
112+});
113+114+TEST(function test_lookup_ipv4_hint_addrconfig(done) {
115+var req = dns.lookup('www.google.com', {
116+hints: dns.ADDRCONFIG
117+}, function(err, ip, family) {
118+if (err) throw err;
119+assert.ok(net.isIPv4(ip));
120+assert.strictEqual(family, 4);
121+122+done();
123+});
124+125+checkWrap(req);
126+});
127+128+TEST(function test_lookup_ip_ipv4(done) {
129+var req = dns.lookup('127.0.0.1', function(err, ip, family) {
130+if (err) throw err;
131+assert.strictEqual(ip, '127.0.0.1');
132+assert.strictEqual(family, 4);
133+134+done();
135+});
136+137+checkWrap(req);
138+});
139+140+TEST(function test_lookup_localhost_ipv4(done) {
141+var req = dns.lookup('localhost', 4, function(err, ip, family) {
142+if (err) throw err;
143+assert.strictEqual(ip, '127.0.0.1');
144+assert.strictEqual(family, 4);
145+146+done();
147+});
148+149+checkWrap(req);
150+});
151+152+TEST(function test_lookup_all_ipv4(done) {
153+var req = dns.lookup('www.google.com', {all: true, family: 4},
154+function(err, ips) {
155+if (err) throw err;
156+assert.ok(Array.isArray(ips));
157+assert.ok(ips.length > 0);
158+159+ips.forEach(function(ip) {
160+assert.ok(isIPv4(ip.address));
161+assert.strictEqual(ip.family, 4);
162+});
163+164+done();
165+});
166+167+checkWrap(req);
168+});
169+170+TEST(function test_lookupservice_ip_ipv4(done) {
171+var req = dns.lookupService('127.0.0.1', 80, function(err, host, service) {
172+if (err) throw err;
173+assert.equal(typeof host, 'string');
174+assert(host);
175+176+/*
177+ * Retrieve the actual HTTP service name as setup on the host currently
178+ * running the test by reading it from /etc/services. This is not ideal,
179+ * as the service name lookup could use another mechanism (e.g nscd), but
180+ * it's already better than hardcoding it.
181+ */
182+var httpServiceName = common.getServiceName(80, 'tcp');
183+if (!httpServiceName) {
184+/*
185+ * Couldn't find service name, reverting to the most sensible default
186+ * for port 80.
187+ */
188+httpServiceName = 'http';
189+}
190+191+assert.strictEqual(service, httpServiceName);
192+193+done();
194+});
195+196+checkWrap(req);
197+});
198+199+process.on('exit', function() {
200+console.log(completed + ' tests completed');
201+assert.equal(running, false);
202+assert.strictEqual(expected, completed);
203+});