mirror of https://github.com/lukechilds/node.git
Ben Noordhuis
12 years ago
2 changed files with 0 additions and 257 deletions
@ -1,231 +0,0 @@ |
|||||
// Copyright Joyent, Inc. and other Node contributors.
|
|
||||
//
|
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a
|
|
||||
// copy of this software and associated documentation files (the
|
|
||||
// "Software"), to deal in the Software without restriction, including
|
|
||||
// without limitation the rights to use, copy, modify, merge, publish,
|
|
||||
// distribute, sublicense, and/or sell copies of the Software, and to permit
|
|
||||
// persons to whom the Software is furnished to do so, subject to the
|
|
||||
// following conditions:
|
|
||||
//
|
|
||||
// The above copyright notice and this permission notice shall be included
|
|
||||
// in all copies or substantial portions of the Software.
|
|
||||
//
|
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
||||
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
|
||||
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
|
||||
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
||||
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
|
||||
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
var common = require('../common'); |
|
||||
var assert = require('assert'); |
|
||||
|
|
||||
var dns = require('dns'), |
|
||||
child_process = require('child_process'); |
|
||||
|
|
||||
|
|
||||
// Try resolution without callback
|
|
||||
|
|
||||
assert.throws(function() { |
|
||||
dns.resolve('google.com', 'A'); |
|
||||
}); |
|
||||
assert.throws(function() { |
|
||||
dns.resolve('127.0.0.1', 'PTR'); |
|
||||
}); |
|
||||
|
|
||||
|
|
||||
var hosts = ['example.com', |
|
||||
'example.org', |
|
||||
'ietf.org', // AAAA
|
|
||||
'google.com', // MX, multiple A records
|
|
||||
'_xmpp-client._tcp.google.com', // SRV
|
|
||||
'oakalynhall.co.uk' // Multiple PTR replies
|
|
||||
]; |
|
||||
|
|
||||
var records = ['A', 'AAAA', 'MX', 'TXT', 'SRV']; |
|
||||
|
|
||||
var i = hosts.length; |
|
||||
while (i--) { |
|
||||
|
|
||||
var j = records.length; |
|
||||
while (j--) { |
|
||||
var hostCmd = 'dig -t ' + records[j] + ' ' + hosts[i] + |
|
||||
'| grep "^' + hosts[i] + '\\.\\W.*IN.*' + records[j] + '"' + |
|
||||
'| sed -E "s/[[:space:]]+/ /g" | cut -d " " -f 5- ' + |
|
||||
'| sed -e "s/\\.$//"'; |
|
||||
child_process.exec(hostCmd, checkDnsRecord(hosts[i], records[j])); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
// CNAME should resolve
|
|
||||
var resolveCNAME = 'before'; |
|
||||
dns.resolve('labs.nrcmedia.nl', 'CNAME', function(err, result) { |
|
||||
assert.deepEqual(result, ['nrcmedia.nl']); |
|
||||
assert.equal(resolveCNAME, 'beforeafter'); |
|
||||
}); |
|
||||
resolveCNAME += 'after'; |
|
||||
|
|
||||
// CNAME should not resolve
|
|
||||
dns.resolve('nrcmedia.nl', 'CNAME', function(err, result) { |
|
||||
assert.ok(err.errno, dns.NODATA); |
|
||||
}); |
|
||||
|
|
||||
function checkDnsRecord(host, record) { |
|
||||
var myHost = host, |
|
||||
myRecord = record; |
|
||||
return function(err, stdout) { |
|
||||
var expected = []; |
|
||||
var footprints = 'before'; |
|
||||
if (stdout.length) |
|
||||
expected = stdout.substr(0, stdout.length - 1).split('\n'); |
|
||||
|
|
||||
switch (myRecord) { |
|
||||
case 'A': |
|
||||
case 'AAAA': |
|
||||
dns.resolve(myHost, myRecord, function(error, result, ttl, cname) { |
|
||||
if (error) result = []; |
|
||||
cmpResults(expected, result, ttl, cname); |
|
||||
|
|
||||
// do reverse lookup check
|
|
||||
var ll = result.length; |
|
||||
while (ll--) { |
|
||||
var ip = result[ll]; |
|
||||
var reverseCmd = 'host ' + ip + |
|
||||
'| cut -d " " -f 5-' + |
|
||||
'| sed -e "s/\\.$//"'; |
|
||||
|
|
||||
child_process.exec(reverseCmd, checkReverse(ip)); |
|
||||
} |
|
||||
assert.equal(footprints, 'beforeafter'); |
|
||||
}); |
|
||||
break; |
|
||||
case 'MX': |
|
||||
dns.resolve(myHost, myRecord, function(error, result, ttl, cname) { |
|
||||
if (error) result = []; |
|
||||
|
|
||||
var strResult = []; |
|
||||
var ll = result.length; |
|
||||
while (ll--) { |
|
||||
strResult.push(result[ll].priority + ' ' + result[ll].exchange); |
|
||||
} |
|
||||
cmpResults(expected, strResult, ttl, cname); |
|
||||
assert.equal(footprints, 'beforeafter'); |
|
||||
}); |
|
||||
break; |
|
||||
case 'TXT': |
|
||||
dns.resolve(myHost, myRecord, function(error, result, ttl, cname) { |
|
||||
if (error) result = []; |
|
||||
|
|
||||
var strResult = []; |
|
||||
var ll = result.length; |
|
||||
while (ll--) { |
|
||||
strResult.push('"' + result[ll] + '"'); |
|
||||
} |
|
||||
cmpResults(expected, strResult, ttl, cname); |
|
||||
assert.equal(footprints, 'beforeafter'); |
|
||||
}); |
|
||||
break; |
|
||||
case 'SRV': |
|
||||
dns.resolve(myHost, myRecord, function(error, result, ttl, cname) { |
|
||||
if (error) result = []; |
|
||||
|
|
||||
var strResult = []; |
|
||||
var ll = result.length; |
|
||||
while (ll--) { |
|
||||
strResult.push(result[ll].priority + ' ' + |
|
||||
result[ll].weight + ' ' + |
|
||||
result[ll].port + ' ' + |
|
||||
result[ll].name); |
|
||||
} |
|
||||
cmpResults(expected, strResult, ttl, cname); |
|
||||
assert.equal(footprints, 'beforeafter'); |
|
||||
}); |
|
||||
break; |
|
||||
} |
|
||||
footprints += 'after'; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
function checkReverse(ip) { |
|
||||
var myIp = ip; |
|
||||
|
|
||||
return function(errr, stdout) { |
|
||||
var expected = stdout.substr(0, stdout.length - 1).split('\n'); |
|
||||
|
|
||||
var reversing = dns.reverse(myIp, function(error, domains, ttl, cname) { |
|
||||
if (error) domains = []; |
|
||||
cmpResults(expected, domains, ttl, cname); |
|
||||
}); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
function cmpResults(expected, result, ttl, cname) { |
|
||||
if (expected.length != result.length) { |
|
||||
if (expected.length == 1 && |
|
||||
expected[0] == '3(NXDOMAIN)' && |
|
||||
result.length == 0) { |
|
||||
// it's ok, dig returns NXDOMAIN, while dns module returns nothing
|
|
||||
} else { |
|
||||
console.log('---WARNING---\nexpected ' + expected + |
|
||||
'\nresult ' + result + '\n-------------'); |
|
||||
} |
|
||||
return; |
|
||||
} |
|
||||
expected.sort(); |
|
||||
result.sort(); |
|
||||
|
|
||||
var ll = expected.length; |
|
||||
while (ll--) { |
|
||||
assert.equal(result[ll], expected[ll]); |
|
||||
console.log('Result ' + result[ll] + |
|
||||
' was equal to expected ' + expected[ll]); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
// #1164
|
|
||||
var getHostByName = 'before'; |
|
||||
dns.getHostByName('localhost', function() { |
|
||||
assert.equal(getHostByName, 'beforeafter'); |
|
||||
}); |
|
||||
getHostByName += 'after'; |
|
||||
|
|
||||
var getHostByAddr = 'before'; |
|
||||
dns.getHostByAddr('127.0.0.1', function() { |
|
||||
assert.equal(getHostByAddr, 'beforeafter'); |
|
||||
}); |
|
||||
getHostByAddr += 'after'; |
|
||||
|
|
||||
var lookupEmpty = 'before'; |
|
||||
dns.lookup('', function() { |
|
||||
assert.equal(lookupEmpty, 'beforeafter'); |
|
||||
}); |
|
||||
lookupEmpty += 'after'; |
|
||||
|
|
||||
var lookupIp = 'before'; |
|
||||
dns.lookup('127.0.0.1', function() { |
|
||||
assert.equal(lookupIp, 'beforeafter'); |
|
||||
}); |
|
||||
lookupIp += 'after'; |
|
||||
|
|
||||
var lookupIp4 = 'before'; |
|
||||
dns.lookup('127.0.0.1', 4, function() { |
|
||||
assert.equal(lookupIp4, 'beforeafter'); |
|
||||
}); |
|
||||
lookupIp4 += 'after'; |
|
||||
|
|
||||
var lookupIp6 = 'before'; |
|
||||
dns.lookup('ietf.org', 6, function() { |
|
||||
assert.equal(lookupIp6, 'beforeafter'); |
|
||||
}); |
|
||||
lookupIp6 += 'after'; |
|
||||
|
|
||||
var lookupLocal = 'before'; |
|
||||
dns.lookup('localhost', function() { |
|
||||
assert.equal(lookupLocal, 'beforeafter'); |
|
||||
}); |
|
||||
lookupLocal += 'after'; |
|
Loading…
Reference in new issue