3 var dns = require("dns"),
4 child_process = require("child_process"),
8 // Try resolution without callback
10 assert.throws(function () {
11 dns.resolve('google.com', 'A');
13 assert.throws(function () {
14 dns.resolve('127.0.0.1', 'PTR');
18 var hosts = ['example.com',
21 'google.com', // MX, multiple A records
22 '_xmpp-client._tcp.google.com', // SRV
23 'oakalynhall.co.uk' // Multiple PTR replies
26 var records = ['A', 'AAAA', 'MX', 'TXT', 'SRV'];
31 var j = records.length;
33 var hostCmd = "dig -t " + records[j] + " " + hosts[i] +
34 "| grep '^" + hosts[i] + "\\.\\W.*IN.*" + records[j] + "'" +
35 "| sed -E 's/[[:space:]]+/ /g' | cut -d ' ' -f 5- " +
36 "| sed -e 's/\\.$//'";
37 child_process.exec(hostCmd, checkDnsRecord(hosts[i], records[j]));
41 function checkDnsRecord(host, record) {
44 return function(err, stdout) {
47 expected = stdout.substr(0, stdout.length - 1).split("\n");
52 dns.resolve(myHost, myRecord, function (error, result, ttl, cname) {
53 if(error) result = [];
54 cmpResults(expected, result, ttl, cname);
56 // do reverse lookup check
57 var ll = result.length;
60 var reverseCmd = "host " + ip +
61 "| cut -d \" \" -f 5-" +
62 "| sed -e 's/\\.$//'";
64 child_process.exec(reverseCmd, checkReverse(ip));
69 dns.resolve(myHost, myRecord, function (error, result, ttl, cname) {
70 if(error) result = [];
73 var ll = result.length;
75 strResult.push(result[ll].priority + " " + result[ll].exchange);
77 cmpResults(expected, strResult, ttl, cname);
81 dns.resolve(myHost, myRecord, function (error, result, ttl, cname) {
82 if(error) result = [];
85 var ll = result.length;
87 strResult.push('"' + result[ll] + '"');
89 cmpResults(expected, strResult, ttl, cname);
93 dns.resolve(myHost, myRecord, function (error, result, ttl, cname) {
94 if(error) result = [];
97 var ll = result.length;
99 strResult.push(result[ll].priority + " " +
100 result[ll].weight + " " +
101 result[ll].port + " " +
104 cmpResults(expected, strResult, ttl, cname);
111 function checkReverse(ip) {
114 return function (errr, stdout) {
115 var expected = stdout.substr(0, stdout.length - 1).split("\n");
117 reversing = dns.reverse(myIp, function (error, domains, ttl, cname) {
118 if(error) domains = [];
119 cmpResults(expected, domains, ttl, cname);
124 function cmpResults(expected, result, ttl, cname) {
125 if (expected.length != result.length) {
126 if (expected.length == 1 && expected[0] == '3(NXDOMAIN)' && result.length == 0) {
127 // it's ok, dig returns NXDOMAIN, while dns module returns nothing
129 puts('---WARNING---\nexpected ' + expected + '\nresult ' + result + '\n-------------');
136 ll = expected.length;
138 assert.equal(result[ll], expected[ll]);
139 puts("Result " + result[ll] + " was equal to expected " + expected[ll]);